Files
CT/src/ViewModel/Global/settingsViewModel.ts
T

69 lines
2.0 KiB
TypeScript
Raw Normal View History

import * as React from "bloatless-react";
2024-07-25 16:02:49 +02:00
import CoreViewModel from "./coreViewModel";
2024-07-22 19:52:08 +02:00
import SettingsModel from "../../Model/Global/settingsModel";
export default class SettingsViewModel {
2026-04-01 08:29:39 +00:00
settingsModel: SettingsModel;
// state
username: React.State<string> = new React.State("");
usernameInput: React.State<string> = new React.State("");
firstDayOfWeekInput: React.State<string> = new React.State("0");
2026-04-08 20:39:12 +00:00
isShowingSettingsModal: React.State<boolean> = new React.State(false);
2026-04-08 21:03:36 +00:00
selectedModalPage: React.State<SettingsModalPages> = new React.State(
SettingsModalPages.Appearance,
);
2026-04-01 08:29:39 +00:00
// guards
cannotSetName: React.State<boolean> = React.createProxyState(
[this.usernameInput],
() =>
this.usernameInput.value == "" ||
this.usernameInput.value == this.settingsModel.username,
);
// methods
setName = (): void => {
this.settingsModel.setName(this.usernameInput.value);
this.username.value = this.settingsModel.username;
this.usernameInput.callSubscriptions();
};
setFirstDayofWeek = (): void => {
this.settingsModel.setFirstDayOfWeek(this.firstDayOfWeekInput.value);
};
2026-04-08 20:39:12 +00:00
showSettingsModal = (): void => {
this.isShowingSettingsModal.value = true;
2026-04-08 21:03:36 +00:00
};
2026-04-08 20:39:12 +00:00
hideSettingsModal = (): void => {
this.isShowingSettingsModal.value = false;
2026-04-08 21:03:36 +00:00
};
showModalPage = (page: SettingsModalPages): void => {
this.selectedModalPage.value = page;
};
2026-04-08 20:39:12 +00:00
2026-04-01 08:29:39 +00:00
// init
constructor(
public coreViewModel: CoreViewModel,
settingsModel: SettingsModel,
) {
this.settingsModel = settingsModel;
this.username.value = settingsModel.username;
this.usernameInput.value = settingsModel.username;
this.firstDayOfWeekInput.value = settingsModel.firstDayOfWeek;
// subscriptions
this.firstDayOfWeekInput.subscribe(this.setFirstDayofWeek);
}
}
2026-04-08 21:03:36 +00:00
export enum SettingsModalPages {
Appearance,
Regional,
}