From 6d4f54aaa0fdda87f3654bf58a695bcd8e8256a1 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Tue, 23 Jul 2024 01:40:30 +0200 Subject: [PATCH] handle new items through ViewModels --- dist/index.js | 22 ++++++++++++++-------- src/Model/Files/fileModel.ts | 1 - src/Model/Files/taskModel.ts | 15 ++++++++++++++- src/ViewModel/Chat/chatViewModel.ts | 5 ----- src/ViewModel/Pages/taskPageViewModel.ts | 9 +++++++-- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/dist/index.js b/dist/index.js index 380ca03b..d39faf3c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -531,6 +531,8 @@ storageModel; chatModel; fileModel; + boardHandler = () => { + }; // paths getBasePath = () => { return this.fileModel.getModelContainerPath("taskModel"); @@ -562,7 +564,7 @@ } }; handleBoard = (boardInfoFileContent) => { - this.storeBoard(boardInfoFileContent); + this.updateBoard(boardInfoFileContent); }; handleTask = (taskFileContent) => { this.storeTask(taskFileContent); @@ -574,6 +576,7 @@ return boardInfoFileContent; }; updateBoard = (boardInfoFileContent) => { + this.boardHandler(boardInfoFileContent); this.storeBoard(boardInfoFileContent); this.chatModel.sendMessage("", boardInfoFileContent); }; @@ -639,11 +642,16 @@ this.storageModel.removeRecursively(taskFilePath); this.storageModel.removeRecursively(taskReferencePath); }; + // other + setBoardHandler = (handler) => { + this.boardHandler = handler; + }; // init constructor(storageModel2, chatModel, fileModel) { this.chatModel = chatModel; this.fileModel = fileModel; this.storageModel = storageModel2; + fileModel.setFileContentHandler(this.handleFileContent); } // utility static createBoardInfoFileContent = (fileId, name, color) => { @@ -1394,7 +1402,7 @@ taskModel; // state newBoardNameInput = new State(""); - boardViewModels = new ListState(); + boardViewModels = new MapState(); // guards cannotCreateBoard = createProxyState( [this.newBoardNameInput], @@ -1416,7 +1424,7 @@ // view showBoard = (boardInfo) => { const boardViewModel = new BoardViewModel(this, boardInfo); - this.boardViewModels.add(boardViewModel); + this.boardViewModels.set(boardInfo.fileId, boardViewModel); }; // load loadData = () => { @@ -1431,6 +1439,9 @@ // init constructor(taskModel, storageModel2) { this.taskModel = taskModel; + taskModel.setBoardHandler((boardInfoFileContent) => { + this.showBoard(boardInfoFileContent); + }); } }; @@ -1484,11 +1495,6 @@ chatModel.setMessageHandler((chatMessage) => { this.messagePageViewModel.showChatMessage(chatMessage); }); - chatModel.fileModel.setFileContentHandler( - (fileContent) => { - this.taskPageViewModel.handleFileContent(fileContent); - } - ); this.loadPageSelection(); } }; diff --git a/src/Model/Files/fileModel.ts b/src/Model/Files/fileModel.ts index 1e937740..b3639668 100644 --- a/src/Model/Files/fileModel.ts +++ b/src/Model/Files/fileModel.ts @@ -20,7 +20,6 @@ export default class FileModel { fileContentHandler: (fileContent: FileContent) => void = () => {}; - // paths getBasePath = (): string[] => { return StorageModel.getPath( diff --git a/src/Model/Files/taskModel.ts b/src/Model/Files/taskModel.ts index c180da9c..2f443a4e 100644 --- a/src/Model/Files/taskModel.ts +++ b/src/Model/Files/taskModel.ts @@ -16,6 +16,8 @@ export default class TaskModel { chatModel: ChatModel; fileModel: FileModel; + boardHandler: (boardInfoFileContent: BoardInfoFileContent) => void = () => {}; + // paths getBasePath = (): string[] => { return this.fileModel.getModelContainerPath("taskModel"); @@ -60,7 +62,7 @@ export default class TaskModel { }; handleBoard = (boardInfoFileContent: BoardInfoFileContent) => { - this.storeBoard(boardInfoFileContent); + this.updateBoard(boardInfoFileContent); }; handleTask = (taskFileContent: TaskFileContent) => { @@ -76,6 +78,7 @@ export default class TaskModel { }; updateBoard = (boardInfoFileContent: BoardInfoFileContent): void => { + this.boardHandler(boardInfoFileContent); this.storeBoard(boardInfoFileContent); this.chatModel.sendMessage("", boardInfoFileContent); }; @@ -160,6 +163,13 @@ export default class TaskModel { this.storageModel.removeRecursively(taskReferencePath); }; + // other + setBoardHandler = ( + handler: (boardInfoFileContent: BoardInfoFileContent) => void + ): void => { + this.boardHandler = handler; + }; + // init constructor( storageModel: StorageModel, @@ -169,6 +179,9 @@ export default class TaskModel { this.chatModel = chatModel; this.fileModel = fileModel; this.storageModel = storageModel; + + // handlers + fileModel.setFileContentHandler(this.handleFileContent); } // utility diff --git a/src/ViewModel/Chat/chatViewModel.ts b/src/ViewModel/Chat/chatViewModel.ts index 01f8852e..02cbad1b 100644 --- a/src/ViewModel/Chat/chatViewModel.ts +++ b/src/ViewModel/Chat/chatViewModel.ts @@ -77,11 +77,6 @@ export default class ChatViewModel { chatModel.setMessageHandler((chatMessage: ChatMessage) => { this.messagePageViewModel.showChatMessage(chatMessage); }); - chatModel.fileModel.setFileContentHandler( - (fileContent: FileContent) => { - this.taskPageViewModel.handleFileContent(fileContent); - } - ); // load this.loadPageSelection(); diff --git a/src/ViewModel/Pages/taskPageViewModel.ts b/src/ViewModel/Pages/taskPageViewModel.ts index 5d59c5f1..e568787d 100644 --- a/src/ViewModel/Pages/taskPageViewModel.ts +++ b/src/ViewModel/Pages/taskPageViewModel.ts @@ -16,7 +16,7 @@ export default class TaskPageViewModel { // state newBoardNameInput: React.State = new React.State(""); - boardViewModels: React.ListState = new React.ListState(); + boardViewModels: React.MapState = new React.MapState(); // guards cannotCreateBoard: React.State = React.createProxyState( @@ -48,7 +48,7 @@ export default class TaskPageViewModel { // view showBoard = (boardInfo: BoardInfoFileContent): void => { const boardViewModel: BoardViewModel = new BoardViewModel(this, boardInfo); - this.boardViewModels.add(boardViewModel); + this.boardViewModels.set(boardInfo.fileId, boardViewModel); }; // load @@ -68,5 +68,10 @@ export default class TaskPageViewModel { // init constructor(taskModel: TaskModel, storageModel: StorageModel) { this.taskModel = taskModel; + + // handlers + taskModel.setBoardHandler((boardInfoFileContent: BoardInfoFileContent) => { + this.showBoard(boardInfoFileContent); + }); } }