fix board context management, cleanup

This commit is contained in:
marlon-erler
2026-04-13 19:45:52 +00:00
parent f16059f91a
commit c2da7f4c9b
19 changed files with 63 additions and 89 deletions
+3 -6
View File
@@ -26,8 +26,6 @@ import { v4 } from "uuid";
import { CommonKeys } from "../../View/keystrokes";
export default class ChatViewModel extends ContextHost<ChatPageTypes> {
contextDebugDescription = "chat";
calendarViewModel: CalendarPageViewModel;
taskPageViewModel: TaskPageViewModel;
messagePageViewModel: MessagePageViewModel;
@@ -58,6 +56,7 @@ export default class ChatViewModel extends ContextHost<ChatPageTypes> {
open = (): void => {
this.coreViewModel.context = this;
this.chatListViewModel.openChat(this);
//this.selectedPage.callSubscriptions();
};
close = (): void => {
@@ -70,8 +69,6 @@ export default class ChatViewModel extends ContextHost<ChatPageTypes> {
this.selectedPage.value = page;
};
closeSubPages = (): void => {};
setColor = (color: Colors): void => {
this.setDisplayedColor(color);
this.chatModel.setColor(color);
@@ -100,7 +97,7 @@ export default class ChatViewModel extends ContextHost<ChatPageTypes> {
const lastUsedPage: string | null =
this.coreViewModel.storageModel.read(path);
if (lastUsedPage != null) {
this.selectedPage.value = lastUsedPage as any;
this.openPage(lastUsedPage as ChatPageTypes);
}
this.selectedPage.subscribeSilent((newPage) => {
@@ -152,7 +149,7 @@ export default class ChatViewModel extends ContextHost<ChatPageTypes> {
public readonly connectionViewModel: ConnectionViewModel,
public readonly chatListViewModel: ChatListViewModel,
) {
super();
super("chat");
// page viewModels
this.calendarViewModel = new CalendarPageViewModel(
+2 -1
View File
@@ -94,7 +94,6 @@ export default class CoreViewModel {
export class Context {
contextId = v4();
contextDebugDescription: string;
keystrokes = new Map<string, () => void>();
handleKeystroke = (e: KeyboardEvent): boolean => {
@@ -112,6 +111,8 @@ export class Context {
registerKeyStroke = (key: string, fn: () => void): void => {
this.keystrokes.set(key, fn);
};
constructor(public contextDebugDescription: string) {}
}
export class ContextHost<T> extends Context {
@@ -13,8 +13,6 @@ import CoreViewModel, { Context } from "./coreViewModel";
import { CommonKeys } from "../../View/keystrokes";
export default class FileTransferViewModel extends Context {
contextDebugDescription = "transfer";
// state
presentedModal: React.State<FileTransferModals | undefined> =
new React.State<any>(undefined);
@@ -173,7 +171,7 @@ export default class FileTransferViewModel extends Context {
// init
constructor(public readonly coreViewModel: CoreViewModel) {
super();
super("file-transfer");
this.coreViewModel.fileTransferModel.fileHandlerManager.addHandler(
this.handleReceivedFile,
@@ -42,7 +42,7 @@ export default class NotificationViewModel {
(chat) => chat.chatModel.info.primaryChannel == notification.chat,
);
chat.open();
chat.selectedPage.value = ChatPageTypes.Messages;
chat.openPage(ChatPageTypes.Messages);
};
// loop
+1 -3
View File
@@ -5,8 +5,6 @@ import { Languages, ThemeSettings } from "../../Model/Global/settingsModel";
import { CommonKeys } from "../../View/keystrokes";
export default class SettingsViewModel extends Context {
contextDebugDescription = "settings";
// state
username: React.State<string> = new React.State("");
usernameInput: React.State<string> = new React.State("");
@@ -73,7 +71,7 @@ export default class SettingsViewModel extends Context {
// init
constructor(public readonly coreViewModel: CoreViewModel) {
super();
super("settings");
this.username.value = coreViewModel.settingsModel.username;
this.usernameInput.value = coreViewModel.settingsModel.username;
+1 -3
View File
@@ -8,8 +8,6 @@ import CoreViewModel, { Context } from "./coreViewModel";
import { CommonKeys } from "../../View/keystrokes";
export default class StorageViewModel extends Context {
contextDebugDescription = "storage";
// state
isShowingStorageModal: React.State<boolean> = new React.State(false);
selectedPath: React.State<string> = new React.State(
@@ -67,7 +65,7 @@ export default class StorageViewModel extends Context {
// init
constructor(public readonly coreViewModel: CoreViewModel) {
super();
super("storage");
this.selectedFileName = React.createProxyState(
[this.selectedPath],
+1 -3
View File
@@ -16,8 +16,6 @@ import TaskViewModel from "./taskViewModel";
import { CommonKeys } from "../../View/keystrokes";
export default class BoardViewModel extends TaskContainingPageViewModel {
contextDebugDescription = "board";
// state
name: React.State<string> = new React.State("");
color: React.State<Colors> = new React.State<any>(Colors.Standard);
@@ -255,7 +253,7 @@ export default class BoardViewModel extends TaskContainingPageViewModel {
public readonly taskPageViewModel: TaskPageViewModel,
public readonly boardInfo: BoardInfoFileContent,
) {
super(coreViewModel, chatViewModel, boardsAndTasksModel);
super(coreViewModel, chatViewModel, boardsAndTasksModel, "board");
// load
this.loadListRelevantData();
+1 -3
View File
@@ -14,8 +14,6 @@ import { CommonKeys } from "../../View/keystrokes";
export const CALENDAR_EVENT_BOARD_ID = "events";
export default class CalendarPageViewModel extends TaskContainingPageViewModel {
contextDebugDescription = "calendar";
// data
get monthString(): string {
return CalendarModel.getMonthString(
@@ -190,7 +188,7 @@ export default class CalendarPageViewModel extends TaskContainingPageViewModel {
public readonly calendarModel: CalendarModel,
public readonly boardsAndTasksModel: BoardsAndTasksModel,
) {
super(coreViewModel, chatViewModel, boardsAndTasksModel);
super(coreViewModel, chatViewModel, boardsAndTasksModel, "calendar");
this.calendarModel = calendarModel;
this.boardsAndTasksModel = boardsAndTasksModel;
+1 -3
View File
@@ -6,8 +6,6 @@ import SettingsViewModel from "../Global/settingsViewModel";
import StorageViewModel from "../Global/storageViewModel";
export default class HomeViewModel extends Context {
contextDebugDescription = "home";
constructor(
public readonly coreViewModel: CoreViewModel,
public readonly settingsViewModel: SettingsViewModel,
@@ -15,7 +13,7 @@ export default class HomeViewModel extends Context {
public readonly storageViewModel: StorageViewModel,
public readonly connectionViewModel: ConnectionViewModel,
) {
super();
super("home");
this.coreViewModel.context = this;
+1 -3
View File
@@ -13,8 +13,6 @@ import { v4 } from "uuid";
import { CommonKeys } from "../../View/keystrokes";
export default class MessagePageViewModel extends Context {
contextDebugDescription = "message-page";
// state
chatMessageViewModels: React.MapState<ChatMessageViewModel> =
new React.MapState();
@@ -130,7 +128,7 @@ export default class MessagePageViewModel extends Context {
public readonly coreViewModel: CoreViewModel,
public readonly chatViewModel: ChatViewModel,
) {
super();
super("message-page");
// states
this.cannotSendMessage = React.createProxyState(
+1 -3
View File
@@ -5,8 +5,6 @@ import { Colors } from "../../colors";
import CoreViewModel, { Context } from "../Global/coreViewModel";
export default class SettingsPageViewModel extends Context {
contextDebugDescription = "settings";
// state
primaryChannel: React.State<string> = new React.State("");
primaryChannelInput: React.State<string> = new React.State("");
@@ -115,7 +113,7 @@ export default class SettingsPageViewModel extends Context {
public readonly coreViewModel: CoreViewModel,
public readonly chatViewModel: ChatViewModel,
) {
super();
super("settings");
this.loadListRelevantData();
@@ -59,7 +59,8 @@ export default class TaskContainingPageViewModel extends Context {
public readonly coreViewModel: CoreViewModel,
public readonly chatViewModel: ChatViewModel,
public readonly boardsAndTasksModel: BoardsAndTasksModel,
contextDebugDescription: string,
) {
super();
super(contextDebugDescription);
}
}
+9 -6
View File
@@ -11,8 +11,6 @@ import { IndexManager } from "../../Model/Utility/utility";
import { CommonKeys } from "../../View/keystrokes";
export default class TaskPageViewModel extends ContextHost<string> {
contextDebugDescription = "task-page";
// data
readonly boardIndexManager = new IndexManager<BoardViewModel>(
(boardViewModel: BoardViewModel) => boardViewModel.name.value,
@@ -145,6 +143,8 @@ export default class TaskPageViewModel extends ContextHost<string> {
// load
loadData = (): void => {
console.log("LOADING TASK PAGE DATA");
this.closeContext();
this.boardViewModels.clear();
const boardIds: string[] = this.boardsAndTasksModel.listBoardIds();
@@ -166,7 +166,7 @@ export default class TaskPageViewModel extends ContextHost<string> {
public readonly chatViewModel: ChatViewModel,
public readonly boardsAndTasksModel: BoardsAndTasksModel,
) {
super();
super("task-page");
this.chatViewModel = chatViewModel;
@@ -174,17 +174,20 @@ export default class TaskPageViewModel extends ContextHost<string> {
this.chatViewModel.registerContext(ChatPageTypes.Tasks, this);
this.selectedBoardId.subscribeSilent(this.updateContexts);
this.loadData();
// handlers
boardsAndTasksModel.boardHandlerManager.addHandler(
(boardInfoFileContent: BoardInfoFileContent) => {
this.showBoardInList(boardInfoFileContent);
this.updateBoardIndices();
this.updateContexts();
},
);
this.chatViewModel.currentContext.subscribeSilent((context) => {
if (!this.isOpen) return;
if (context != this) return;
this.openLastUsedBoard();
});
// keystrokes
this.registerKeyStroke(CommonKeys.Options, this.toggleBoardList);
}
+1 -4
View File
@@ -13,8 +13,6 @@ import { v4 } from "uuid";
import { CommonKeys } from "../../View/keystrokes";
export default class TaskViewModel extends Context {
contextDebugDescription = "task";
// util
get sortingString(): string {
const splitDate: string[] = this.date.value.split("-");
@@ -87,7 +85,6 @@ export default class TaskViewModel extends Context {
// view
open = (): void => {
console.log(this);
this.coreViewModel.context = this;
this.containingModel.selectTask(this);
};
@@ -219,7 +216,7 @@ export default class TaskViewModel extends Context {
public readonly containingModel: TaskContainingPageViewModel,
public task: TaskFileContent,
) {
super();
super("task");
// load
this.loadAllData();