diff --git a/dist/index.js b/dist/index.js index e9192fb7..6628a3d4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -696,6 +696,8 @@ chatModel; storageModel; taskModel; + fileContentHandler = () => { + }; // paths getBasePath = () => { return StorageModel.getPath( @@ -729,6 +731,7 @@ const didStore = this.storeFileContent(fileContent); if (didStore == false) return; this.taskModel.handleFileContent(fileContent); + this.fileContentHandler(fileContent); }; // methods addFileContent = (fileContent) => { @@ -776,6 +779,10 @@ ); return fileContent; }; + // other + setFileContentHandler = (handler) => { + this.fileContentHandler = handler; + }; // init constructor(chatModel, storageModel2) { this.chatModel = chatModel; @@ -996,9 +1003,6 @@ chatMessage.body = decryptedBody; chatMessage.stringifiedFile = decryptedFile; }; - setMessageHandler = (handler) => { - this.chatMessageHandler = handler; - }; subscribe = () => { this.connectionModel.addChannel(this.info.primaryChannel); }; @@ -1014,6 +1018,10 @@ const dirPath = this.getBasePath(); this.storageModel.removeRecursively(dirPath); }; + // other + setMessageHandler = (handler) => { + this.chatMessageHandler = handler; + }; // load loadInfo = () => { const info = this.storageModel.readStringifiable( @@ -1246,20 +1254,6 @@ // guards cannotSendMessage; // methods - addChatMessage = (chatMessage) => { - const chatMessageModel = new ChatMessageViewModel( - this, - chatMessage, - chatMessage.sender == this.chatViewModel.settingsViewModel.username.value - ); - const existingChatMessageViewModel = this.chatMessageViewModels.value.get(chatMessage.id); - if (existingChatMessageViewModel != void 0) { - existingChatMessageViewModel.body.value = chatMessage.body; - existingChatMessageViewModel.status.value = chatMessage.status; - } else { - this.chatMessageViewModels.set(chatMessage.id, chatMessageModel); - } - }; sendMessage = () => { if (this.cannotSendMessage.value == true) return; this.sendMessageFromBody(this.composingMessage.value); @@ -1274,10 +1268,25 @@ this.chatViewModel.chatModel.addMessage(chatMessage); messageViewModel.loadData(); }; + // view + showChatMessage = (chatMessage) => { + const chatMessageModel = new ChatMessageViewModel( + this, + chatMessage, + chatMessage.sender == this.chatViewModel.settingsViewModel.username.value + ); + const existingChatMessageViewModel = this.chatMessageViewModels.value.get(chatMessage.id); + if (existingChatMessageViewModel != void 0) { + existingChatMessageViewModel.body.value = chatMessage.body; + existingChatMessageViewModel.status.value = chatMessage.status; + } else { + this.chatMessageViewModels.set(chatMessage.id, chatMessageModel); + } + }; // load loadData = () => { for (const chatMessage of this.chatViewModel.chatModel.messages) { - this.addChatMessage(chatMessage); + this.showChatMessage(chatMessage); } }; // init @@ -1391,6 +1400,12 @@ [this.newBoardNameInput], () => this.newBoardNameInput.value == "" ); + // handlers + handleFileContent = (fileContent) => { + if (checkMatchesObjectStructure(fileContent, BoardInfoFileContentReference) == false) + return; + this.showBoard(fileContent); + }; // methods createBoard = () => { if (this.cannotCreateBoard.value == true) return; @@ -1398,6 +1413,10 @@ this.newBoardNameInput.value = ""; this.loadData(); }; + // view + showBoard = (boardInfo) => { + this.boards.add(boardInfo); + }; // load loadData = () => { this.boards.clear(); @@ -1405,7 +1424,7 @@ for (const boardId of boardIds) { const boardInfo = this.taskModel.getBoardInfo(boardId); if (boardInfo == null) continue; - this.boards.add(boardInfo); + this.showBoard(boardInfo); } }; // init @@ -1466,8 +1485,13 @@ this.messagePageViewModel = new MessagePageViewModel(this); this.settingsPageViewModel = new SettingsPageViewModel(this); chatModel.setMessageHandler((chatMessage) => { - this.messagePageViewModel.addChatMessage(chatMessage); + this.messagePageViewModel.showChatMessage(chatMessage); }); + chatModel.fileModel.setFileContentHandler( + (fileContent) => { + this.taskPageViewModel.handleFileContent(fileContent); + } + ); this.loadPageSelection(); this.updateIndex(); } diff --git a/src/Model/Chat/chatModel.ts b/src/Model/Chat/chatModel.ts index a0b6d118..d8bb85b0 100644 --- a/src/Model/Chat/chatModel.ts +++ b/src/Model/Chat/chatModel.ts @@ -159,10 +159,6 @@ export default class ChatModel { chatMessage.stringifiedFile = decryptedFile; }; - setMessageHandler = (handler: (chatMessage: ChatMessage) => void): void => { - this.chatMessageHandler = handler; - }; - subscribe = (): void => { this.connectionModel.addChannel(this.info.primaryChannel); }; @@ -185,6 +181,11 @@ export default class ChatModel { this.storageModel.removeRecursively(dirPath); }; + // other + setMessageHandler = (handler: (chatMessage: ChatMessage) => void): void => { + this.chatMessageHandler = handler; + }; + // load loadInfo = (): void => { const info: ChatInfo | null = this.storageModel.readStringifiable( diff --git a/src/Model/Files/fileModel.ts b/src/Model/Files/fileModel.ts index 44d86dd8..1e937740 100644 --- a/src/Model/Files/fileModel.ts +++ b/src/Model/Files/fileModel.ts @@ -9,7 +9,6 @@ import { } from "../Utility/utility"; import ChatModel from "../Chat/chatModel"; -import { Color } from "../../colors"; import TaskModel from "./taskModel"; import { v4 } from "uuid"; @@ -19,6 +18,9 @@ export default class FileModel { taskModel: TaskModel; + fileContentHandler: (fileContent: FileContent) => void = () => {}; + + // paths getBasePath = (): string[] => { return StorageModel.getPath( @@ -62,6 +64,7 @@ export default class FileModel { if (didStore == false) return; this.taskModel.handleFileContent(fileContent); + this.fileContentHandler(fileContent); }; // methods @@ -132,6 +135,11 @@ export default class FileModel { return fileContent; }; + // other + setFileContentHandler = (handler: (fileContent: FileContent) => void): void => { + this.fileContentHandler = handler; + }; + // init constructor(chatModel: ChatModel, storageModel: StorageModel) { this.chatModel = chatModel; diff --git a/src/ViewModel/Chat/chatViewModel.ts b/src/ViewModel/Chat/chatViewModel.ts index 53c5e9fe..3a467502 100644 --- a/src/ViewModel/Chat/chatViewModel.ts +++ b/src/ViewModel/Chat/chatViewModel.ts @@ -4,6 +4,7 @@ import ChatModel, { ChatMessage } from "../../Model/Chat/chatModel"; import StorageModel, { filePaths } from "../../Model/Global/storageModel"; import ChatListViewModel from "./chatListViewModel"; +import { FileContent } from "../../Model/Files/fileModel"; import MessagePageViewModel from "../Pages/messagePageViewModel"; import SettingsPageViewModel from "../Pages/settingsPageViewModel"; import SettingsViewModel from "../Global/settingsViewModel"; @@ -78,9 +79,14 @@ export default class ChatViewModel { this.settingsPageViewModel = new SettingsPageViewModel(this); // handlers - chatModel.setMessageHandler((chatMessage) => { - this.messagePageViewModel.addChatMessage(chatMessage); + 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/messagePageViewModel.ts b/src/ViewModel/Pages/messagePageViewModel.ts index ee7e404e..1b35af84 100644 --- a/src/ViewModel/Pages/messagePageViewModel.ts +++ b/src/ViewModel/Pages/messagePageViewModel.ts @@ -16,23 +16,6 @@ export default class MessagePageViewModel { cannotSendMessage: React.State; // methods - addChatMessage = (chatMessage: ChatMessage): void => { - const chatMessageModel = new ChatMessageViewModel( - this, - chatMessage, - chatMessage.sender == this.chatViewModel.settingsViewModel.username.value - ); - - const existingChatMessageViewModel: ChatMessageViewModel | undefined = - this.chatMessageViewModels.value.get(chatMessage.id); - if (existingChatMessageViewModel != undefined) { - existingChatMessageViewModel.body.value = chatMessage.body; - existingChatMessageViewModel.status.value = chatMessage.status; - } else { - this.chatMessageViewModels.set(chatMessage.id, chatMessageModel); - } - }; - sendMessage = (): void => { if (this.cannotSendMessage.value == true) return; @@ -53,10 +36,28 @@ export default class MessagePageViewModel { messageViewModel.loadData(); }; + // view + showChatMessage = (chatMessage: ChatMessage): void => { + const chatMessageModel = new ChatMessageViewModel( + this, + chatMessage, + chatMessage.sender == this.chatViewModel.settingsViewModel.username.value + ); + + const existingChatMessageViewModel: ChatMessageViewModel | undefined = + this.chatMessageViewModels.value.get(chatMessage.id); + if (existingChatMessageViewModel != undefined) { + existingChatMessageViewModel.body.value = chatMessage.body; + existingChatMessageViewModel.status.value = chatMessage.status; + } else { + this.chatMessageViewModels.set(chatMessage.id, chatMessageModel); + } + }; + // load loadData = (): void => { for (const chatMessage of this.chatViewModel.chatModel.messages) { - this.addChatMessage(chatMessage); + this.showChatMessage(chatMessage); } }; diff --git a/src/ViewModel/Pages/taskPageViewModel.ts b/src/ViewModel/Pages/taskPageViewModel.ts index e1025ab2..901e5b06 100644 --- a/src/ViewModel/Pages/taskPageViewModel.ts +++ b/src/ViewModel/Pages/taskPageViewModel.ts @@ -1,8 +1,13 @@ import * as React from "bloatless-react"; -import TaskModel, { BoardInfoFileContent } from "../../Model/Files/taskModel"; +import TaskModel, { + BoardInfoFileContent, + BoardInfoFileContentReference, +} from "../../Model/Files/taskModel"; +import { FileContent } from "../../Model/Files/fileModel"; import StorageModel from "../../Model/Global/storageModel"; +import { checkMatchesObjectStructure } from "../../Model/Utility/typeSafety"; export default class TaskPageViewModel { taskModel: TaskModel; @@ -18,6 +23,16 @@ export default class TaskPageViewModel { () => this.newBoardNameInput.value == "" ); + // handlers + handleFileContent = (fileContent: FileContent): void => { + if ( + checkMatchesObjectStructure(fileContent, BoardInfoFileContentReference) == + false + ) + return; + this.showBoard(fileContent as BoardInfoFileContent); + }; + // methods createBoard = (): void => { if (this.cannotCreateBoard.value == true) return; @@ -28,6 +43,11 @@ export default class TaskPageViewModel { this.loadData(); }; + // view + showBoard = (boardInfo: BoardInfoFileContent): void => { + this.boards.add(boardInfo); + }; + // load loadData = (): void => { this.boards.clear(); @@ -36,9 +56,9 @@ export default class TaskPageViewModel { for (const boardId of boardIds) { const boardInfo: BoardInfoFileContent | null = this.taskModel.getBoardInfo(boardId); - if (boardInfo == null) continue; - - this.boards.add(boardInfo); + if (boardInfo == null) continue; + + this.showBoard(boardInfo); } };