verdnatura-chat/app/definitions/ISetting.ts

238 lines
5.5 KiB
TypeScript

export type SettingId = string;
export type GroupId = SettingId;
export type TabId = SettingId;
export type SectionName = string;
export enum SettingEditor {
COLOR = 'color',
EXPRESSION = 'expression'
}
type AssetValue = { defaultUrl?: string };
export type SettingValueMultiSelect = (string | number)[];
export type SettingValueRoomPick = Array<{ _id: string; name: string }> | string;
export type SettingValue = string | boolean | number | SettingValueMultiSelect | Date | AssetValue | undefined;
export interface ISettingSelectOption {
key: string | number;
i18nLabel: string;
}
export type ISetting = ISettingBase | ISettingEnterprise | ISettingColor | ISettingCode | ISettingAction;
export interface ISettingBase {
_id: SettingId;
type:
| 'boolean'
| 'timezone'
| 'string'
| 'relativeUrl'
| 'password'
| 'int'
| 'select'
| 'multiSelect'
| 'language'
| 'color'
| 'font'
| 'code'
| 'action'
| 'asset'
| 'roomPick'
| 'group'
| 'date';
public: boolean;
env: boolean;
group?: GroupId;
section?: SectionName;
tab?: TabId;
i18nLabel: string;
value: SettingValue;
packageValue: SettingValue;
blocked: boolean;
// enableQuery?: string | FilterQuery<ISetting> | FilterQuery<ISetting>[];
// displayQuery?: string | FilterQuery<ISetting> | FilterQuery<ISetting>[];
sorter: number;
properties?: unknown;
enterprise?: boolean;
requiredOnWizard?: boolean;
hidden?: boolean;
modules?: Array<string>;
invalidValue?: SettingValue;
valueSource?: string;
secret?: boolean;
i18nDescription?: string;
autocomplete?: boolean;
processEnvValue?: SettingValue;
meteorSettingsValue?: SettingValue;
ts: Date;
createdAt: Date;
_updatedAt?: Date;
multiline?: boolean;
values?: Array<ISettingSelectOption>;
placeholder?: string;
wizard?: {
step: number;
order: number;
} | null;
persistent?: boolean; // todo: remove
readonly?: boolean; // todo: remove
alert?: string; // todo: check if this is still used
private?: boolean; // todo: remove
}
export interface ISettingGroup {
_id: string;
hidden: boolean;
blocked: boolean;
ts?: Date;
sorter: number;
i18nLabel: string;
// displayQuery?: string | FilterQuery<ISetting> | FilterQuery<ISetting>[];
i18nDescription: string;
value?: undefined;
type: 'group';
alert?: string; // todo: check if this is needed
}
export interface ISettingEnterprise extends ISettingBase {
enterprise: true;
invalidValue: SettingValue;
}
export interface ISettingColor extends ISettingBase {
type: 'color';
editor: SettingEditor;
packageEditor?: SettingEditor;
}
export interface ISettingCode extends ISettingBase {
type: 'code';
code?: string;
}
export interface ISettingAction extends ISettingBase {
type: 'action';
value: string;
actionText?: string;
}
export interface ISettingAsset extends ISettingBase {
type: 'asset';
value: AssetValue;
}
export interface ISettingDate extends ISettingBase {
type: 'date';
value: Date;
}
export const isDateSetting = (setting: ISetting): setting is ISettingDate => setting.type === 'date';
export const isSettingEnterprise = (setting: ISettingBase): setting is ISettingEnterprise => setting.enterprise === true;
export const isSettingColor = (setting: ISettingBase): setting is ISettingColor => setting.type === 'color';
export const isSettingCode = (setting: ISettingBase): setting is ISettingCode => setting.type === 'code';
export const isSettingAction = (setting: ISettingBase): setting is ISettingAction => setting.type === 'action';
export const isSettingAsset = (setting: ISettingBase): setting is ISettingAsset => setting.type === 'asset';
export interface ISettingStatistics {
account2fa?: boolean;
cannedResponsesEnabled?: boolean;
e2e?: boolean;
e2eDefaultDirectRoom?: boolean;
e2eDefaultPrivateRoom?: boolean;
smtpHost?: string;
smtpPort?: string;
fromEmail?: string;
frameworkDevMode?: boolean;
frameworkEnable?: boolean;
surveyEnabled?: boolean;
updateChecker?: boolean;
liveStream?: boolean;
broadcasting?: boolean;
allowEditing?: boolean;
allowDeleting?: boolean;
allowUnrecognizedSlashCommand?: boolean;
allowBadWordsFilter?: boolean;
readReceiptEnabled?: boolean;
readReceiptStoreUsers?: boolean;
otrEnable?: boolean;
pushEnable?: boolean;
globalSearchEnabled?: boolean;
threadsEnabled?: boolean;
bigBlueButton?: boolean;
jitsiEnabled?: boolean;
webRTCEnableChannel?: boolean;
webRTCEnablePrivate?: boolean;
webRTCEnableDirect?: boolean;
}
export interface ISettingStatisticsObject {
accounts?: {
account2fa?: boolean;
};
cannedResponses?: {
cannedResponsesEnabled?: boolean;
};
e2ee?: {
e2e?: boolean;
e2eDefaultDirectRoom?: boolean;
e2eDefaultPrivateRoom?: boolean;
};
email?: {
smtp?: {
smtpHost?: string;
smtpPort?: string;
fromEmail?: string;
};
};
general?: {
apps?: {
frameworkDevMode?: boolean;
frameworkEnable?: boolean;
};
nps?: {
surveyEnabled?: boolean;
};
update?: {
updateChecker?: boolean;
};
};
liveStreamAndBroadcasting?: {
liveStream?: boolean;
broadcasting?: boolean;
};
message?: {
allowEditing?: boolean;
allowDeleting?: boolean;
allowUnrecognizedSlashCommand?: boolean;
allowBadWordsFilter?: boolean;
readReceiptEnabled?: boolean;
readReceiptStoreUsers?: boolean;
};
otr?: {
otrEnable?: boolean;
};
push?: {
pushEnable?: boolean;
};
search?: {
defaultProvider?: {
globalSearchEnabled?: boolean;
};
};
threads?: {
threadsEnabled?: boolean;
};
videoConference?: {
bigBlueButton?: boolean;
jitsiEnabled?: boolean;
};
webRTC?: {
webRTCEnableChannel?: boolean;
webRTCEnablePrivate?: boolean;
webRTCEnableDirect?: boolean;
};
}