Centralize default user and team preferences. (#5172

Passing the fallback at each callpoint was dumb
This commit is contained in:
Tom Moor
2023-04-09 17:23:58 -04:00
committed by GitHub
parent 8324b03938
commit 2f9a56aa6f
11 changed files with 67 additions and 39 deletions

View File

@@ -20,6 +20,7 @@ import {
AllowNull,
AfterUpdate,
} from "sequelize-typescript";
import { TeamPreferenceDefaults } from "@shared/constants";
import {
CollectionPermission,
TeamPreference,
@@ -196,14 +197,15 @@ class Team extends ParanoidModel {
};
/**
* Returns the passed preference value
* Returns the value of the given preference.
*
* @param preference The user preference to retrieve
* @param fallback An optional fallback value, defaults to false.
* @returns The preference value if set, else undefined
* @param preference The team preference to retrieve
* @returns The preference value if set, else the default value
*/
public getPreference = (preference: TeamPreference, fallback = false) =>
this.preferences?.[preference] ?? fallback;
public getPreference = (preference: TeamPreference) =>
this.preferences?.[preference] ??
TeamPreferenceDefaults[preference] ??
false;
provisionFirstCollection = async (userId: string) => {
await this.sequelize!.transaction(async (transaction) => {

View File

@@ -22,6 +22,7 @@ import {
AllowNull,
AfterUpdate,
} from "sequelize-typescript";
import { UserPreferenceDefaults } from "@shared/constants";
import { languages } from "@shared/i18n";
import type { NotificationSettings } from "@shared/types";
import {
@@ -354,14 +355,15 @@ class User extends ParanoidModel {
};
/**
* Returns the passed preference value
* Returns the value of the givem preference
*
* @param preference The user preference to retrieve
* @param fallback An optional fallback value, defaults to false.
* @returns The preference value if set, else undefined
* @returns The preference value if set, else the default value.
*/
public getPreference = (preference: UserPreference, fallback = false) =>
this.preferences?.[preference] ?? fallback;
public getPreference = (preference: UserPreference) =>
this.preferences?.[preference] ??
UserPreferenceDefaults[preference] ??
false;
collectionIds = async (options = {}) => {
const collectionStubs = await Collection.scope({

View File

@@ -35,7 +35,7 @@ allow(User, "download", Document, (user, document) => {
if (
user.isViewer &&
!user.team.getPreference(TeamPreference.ViewersCanExport, true)
!user.team.getPreference(TeamPreference.ViewersCanExport)
) {
return false;
}

View File

@@ -1,9 +1,10 @@
import { TeamPreference } from "@shared/types";
import { Team } from "@server/models";
export default function presentPublicTeam(team: Team) {
return {
name: team.name,
avatarUrl: team.avatarUrl,
customTheme: team.preferences?.customTheme,
customTheme: team.getPreference(TeamPreference.CustomTheme),
};
}