import * as React from "bloatless-react"; import CoreViewModel from "./coreViewModel"; import SettingsModel from "../../Model/Global/settingsModel"; import { Languages } from "../../View/translations"; export default class SettingsViewModel { // state username: React.State = new React.State(""); usernameInput: React.State = new React.State(""); isShowingSettingsModal: React.State = new React.State(false); selectedModalPage: React.State = new React.State( SettingsModalPages.Appearance, ); requiresReload = new React.State(false); firstDayOfWeek: React.State = new React.State("0"); language: React.State = new React.State(Languages.English); // guards cannotSetName: React.State = React.createProxyState( [this.usernameInput], () => this.usernameInput.value == "" || this.usernameInput.value == this.coreViewModel.settingsModel.username, ); // methods setName = (): void => { this.coreViewModel.settingsModel.setName(this.usernameInput.value); this.username.value = this.coreViewModel.settingsModel.username; this.usernameInput.callSubscriptions(); }; setFirstDayofWeek = (): void => { this.coreViewModel.settingsModel.setFirstDayOfWeek( this.firstDayOfWeek.value, ); }; showSettingsModal = (): void => { this.isShowingSettingsModal.value = true; }; hideSettingsModal = (): void => { this.isShowingSettingsModal.value = false; if (this.requiresReload.value == true) { window.location.reload(); } }; showModalPage = (page: SettingsModalPages): void => { this.selectedModalPage.value = page; }; // init constructor(public coreViewModel: CoreViewModel) { this.username.value = coreViewModel.settingsModel.username; this.usernameInput.value = coreViewModel.settingsModel.username; this.firstDayOfWeek.value = coreViewModel.settingsModel.firstDayOfWeek; this.language.value = coreViewModel.settingsModel.language; // subscriptions this.firstDayOfWeek.subscribe(this.setFirstDayofWeek); this.language.subscribeSilent((newValue) => { this.coreViewModel.settingsModel.setLanguage(newValue); this.requiresReload.value = true; }) } } export enum SettingsModalPages { Appearance, Regional, Info, }