2024-07-20 02:00:00 +02:00
|
|
|
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";
|
2026-04-09 16:48:22 +00:00
|
|
|
import { Languages } from "../../View/translations";
|
2024-07-20 02:00:00 +02:00
|
|
|
|
|
|
|
|
export default class SettingsViewModel {
|
2026-04-01 08:29:39 +00:00
|
|
|
// state
|
|
|
|
|
username: React.State<string> = new React.State("");
|
|
|
|
|
usernameInput: React.State<string> = new React.State("");
|
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
|
|
|
|
2026-04-09 16:48:22 +00:00
|
|
|
firstDayOfWeek: React.State<string> = new React.State("0");
|
|
|
|
|
language: React.State<Languages> = new React.State(Languages.English);
|
|
|
|
|
|
2026-04-01 08:29:39 +00:00
|
|
|
// guards
|
|
|
|
|
cannotSetName: React.State<boolean> = React.createProxyState(
|
|
|
|
|
[this.usernameInput],
|
|
|
|
|
() =>
|
|
|
|
|
this.usernameInput.value == "" ||
|
2026-04-09 16:48:22 +00:00
|
|
|
this.usernameInput.value ==
|
|
|
|
|
this.coreViewModel.settingsModel.username,
|
2026-04-01 08:29:39 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// methods
|
|
|
|
|
setName = (): void => {
|
2026-04-09 16:48:22 +00:00
|
|
|
this.coreViewModel.settingsModel.setName(this.usernameInput.value);
|
|
|
|
|
this.username.value = this.coreViewModel.settingsModel.username;
|
2026-04-01 08:29:39 +00:00
|
|
|
this.usernameInput.callSubscriptions();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
setFirstDayofWeek = (): void => {
|
2026-04-09 16:48:22 +00:00
|
|
|
this.coreViewModel.settingsModel.setFirstDayOfWeek(
|
|
|
|
|
this.firstDayOfWeek.value,
|
|
|
|
|
);
|
2026-04-01 08:29:39 +00:00
|
|
|
};
|
|
|
|
|
|
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
|
2026-04-09 16:48:22 +00:00
|
|
|
constructor(public coreViewModel: CoreViewModel) {
|
|
|
|
|
this.username.value = coreViewModel.settingsModel.username;
|
|
|
|
|
this.usernameInput.value = coreViewModel.settingsModel.username;
|
|
|
|
|
this.firstDayOfWeek.value = coreViewModel.settingsModel.firstDayOfWeek;
|
2026-04-01 08:29:39 +00:00
|
|
|
|
|
|
|
|
// subscriptions
|
2026-04-09 16:48:22 +00:00
|
|
|
this.firstDayOfWeek.subscribe(this.setFirstDayofWeek);
|
2026-04-01 08:29:39 +00:00
|
|
|
}
|
2024-07-20 02:00:00 +02:00
|
|
|
}
|
2026-04-08 21:03:36 +00:00
|
|
|
|
|
|
|
|
export enum SettingsModalPages {
|
|
|
|
|
Appearance,
|
|
|
|
|
Regional,
|
2026-04-08 21:14:37 +00:00
|
|
|
Info,
|
2026-04-08 21:03:36 +00:00
|
|
|
}
|