Sengi-Windows-MacOS-Linux/src/app/states/settings.state.ts

92 lines
3.0 KiB
TypeScript
Raw Normal View History

2019-04-01 00:30:38 +02:00
import { State, Action, StateContext, Selector, createSelector } from '@ngxs/store';
2019-03-31 00:03:17 +01:00
2019-04-01 00:30:38 +02:00
export class RemoveAccountSettings {
static readonly type = '[Settings] Remove AccountSettings';
2019-03-31 00:03:17 +01:00
constructor(public accountId: string) {}
}
2019-04-01 00:30:38 +02:00
export class SaveAccountSettings {
static readonly type = '[Settings] Save AccountSettings';
constructor(public accountSettings: AccountSettings) {}
2019-03-31 00:03:17 +01:00
}
export class SaveSettings {
2019-04-01 00:30:38 +02:00
static readonly type = '[Settings] Save Settings';
2019-03-31 00:03:17 +01:00
constructor(public settings: GlobalSettings) {}
}
2019-04-01 00:30:38 +02:00
export class AccountSettings {
2019-03-31 00:03:17 +01:00
accountId: string;
displayMention: boolean = true;
displayNotifications: boolean = true;
lastMentionCreationDate: string;
lastNotificationCreationDate: string;
2019-06-23 23:18:55 +02:00
customStatusCharLengthEnabled: boolean = false;
customStatusCharLength: number = 500;
2019-03-31 00:03:17 +01:00
}
export class GlobalSettings {
disableAllNotifications = false;
notificationSoundFileId: string = '0';
2019-04-01 00:30:38 +02:00
accountSettings: AccountSettings[] = [];
2019-03-31 00:03:17 +01:00
}
export interface SettingsStateModel {
settings: GlobalSettings;
}
@State<SettingsStateModel>({
name: 'globalsettings',
defaults: {
settings: new GlobalSettings()
}
})
2019-04-01 00:30:38 +02:00
export class SettingsState {
accountSettings(accountId: string){
return createSelector([SettingsState], (state: GlobalSettings) => {
return state.accountSettings.find(x => x.accountId === accountId);
});
}
@Action(RemoveAccountSettings)
RemoveAccountSettings(ctx: StateContext<SettingsStateModel>, action: RemoveAccountSettings){
2019-03-31 00:03:17 +01:00
const state = ctx.getState();
const newSettings = new GlobalSettings();
newSettings.disableAllNotifications = state.settings.disableAllNotifications;
2019-04-01 00:30:38 +02:00
newSettings.accountSettings = [...state.settings.accountSettings.filter(x => x.accountId !== action.accountId)];
2019-03-31 00:03:17 +01:00
ctx.patchState({
settings: newSettings
});
}
2019-04-01 00:30:38 +02:00
@Action(SaveAccountSettings)
SaveAccountSettings(ctx: StateContext<SettingsStateModel>, action: SaveAccountSettings){
2019-03-31 00:03:17 +01:00
const state = ctx.getState();
const newSettings = new GlobalSettings();
newSettings.disableAllNotifications = state.settings.disableAllNotifications;
2019-04-01 00:30:38 +02:00
newSettings.accountSettings = [...state.settings.accountSettings.filter(x => x.accountId !== action.accountSettings.accountId), action.accountSettings];
2019-03-31 00:03:17 +01:00
ctx.patchState({
settings: newSettings
});
}
@Action(SaveSettings)
SaveSettings(ctx: StateContext<SettingsStateModel>, action: SaveSettings){
const state = ctx.getState();
const newSettings = new GlobalSettings();
newSettings.disableAllNotifications = action.settings.disableAllNotifications;
2019-11-14 04:18:39 +01:00
newSettings.notificationSoundFileId = action.settings.notificationSoundFileId;
newSettings.accountSettings = [...state.settings.accountSettings];
2019-03-31 00:03:17 +01:00
ctx.patchState({
settings: newSettings
});
}
}