cleanup, add fileContentHandler for ViewModel

This commit is contained in:
marlon-erler
2024-07-23 00:25:28 +02:00
parent 224c00c8d8
commit 39b50e9254
6 changed files with 109 additions and 49 deletions
+5 -4
View File
@@ -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(
+9 -1
View File
@@ -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<string>) => 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<string>) => void): void => {
this.fileContentHandler = handler;
};
// init
constructor(chatModel: ChatModel, storageModel: StorageModel) {
this.chatModel = chatModel;
+8 -2
View File
@@ -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<string>) => {
this.taskPageViewModel.handleFileContent(fileContent);
}
);
// load
this.loadPageSelection();
+19 -18
View File
@@ -16,23 +16,6 @@ export default class MessagePageViewModel {
cannotSendMessage: React.State<boolean>;
// 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);
}
};
+24 -4
View File
@@ -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<string>): 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);
}
};