Files
outline/app/models/Team.ts

124 lines
2.3 KiB
TypeScript

import { computed, observable } from "mobx";
import { TeamPreference, TeamPreferences } from "@shared/types";
import { stringToColor } from "@shared/utils/color";
import BaseModel from "./BaseModel";
import Field from "./decorators/Field";
class Team extends BaseModel {
@Field
@observable
id: string;
@Field
@observable
name: string;
@Field
@observable
avatarUrl: string;
@Field
@observable
sharing: boolean;
@Field
@observable
inviteRequired: boolean;
@Field
@observable
commenting: boolean;
@Field
@observable
documentEmbeds: boolean;
@Field
@observable
defaultCollectionId: string | null;
@Field
@observable
memberCollectionCreate: boolean;
@Field
@observable
guestSignin: boolean;
@Field
@observable
subdomain: string | null | undefined;
@Field
@observable
defaultUserRole: string;
@Field
@observable
preferences: TeamPreferences | null;
domain: string | null | undefined;
url: string;
@Field
@observable
allowedDomains: string[] | null | undefined;
@computed
get signinMethods(): string {
return "SSO";
}
@computed
get color(): string {
return stringToColor(this.id);
}
@computed
get initial(): string {
return this.name ? this.name[0] : "?";
}
/**
* Returns whether this team is using a separate editing mode behind an "Edit"
* button rather than seamless always-editing.
*
* @returns True if editing mode is seamless (no button)
*/
@computed
get seamlessEditing(): boolean {
return !!this.getPreference(TeamPreference.SeamlessEdit, true);
}
/**
* Get the value for a specific preference key, or return the fallback if
* none is set.
*
* @param key The TeamPreference key to retrieve
* @param fallback An optional fallback value, defaults to false.
* @returns The value
*/
getPreference<T extends keyof TeamPreferences>(
key: T,
fallback = false
): TeamPreferences[T] | false {
return this.preferences?.[key] ?? fallback;
}
/**
* Set the value for a specific preference key.
*
* @param key The TeamPreference key to retrieve
* @param value The value to set
*/
setPreference(key: TeamPreference, value: boolean) {
this.preferences = {
...this.preferences,
[key]: value,
};
}
}
export default Team;