From f3e4be375f6bcf4aac9f16a8f3516a1b7b7db995 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Sat, 20 Jul 2024 21:04:41 +0200 Subject: [PATCH] add guard cannotSendMessage --- src/Model/chatModel.ts | 10 +++++++--- src/View/homePage.tsx | 2 +- src/ViewModel/chatListViewModel.tsx | 20 ++++++++++++++++---- src/ViewModel/chatViewModel.tsx | 14 ++++++++++++-- src/ViewModel/settingsViewModel.ts | 17 ++++++++++------- src/index.tsx | 6 +++++- 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/Model/chatModel.ts b/src/Model/chatModel.ts index 13222bc2..8ba04161 100644 --- a/src/Model/chatModel.ts +++ b/src/Model/chatModel.ts @@ -161,7 +161,10 @@ export class ChatModel { }; // messaging - sendMessage = (body: string): void => { + sendMessage = (body: string): boolean => { + const senderName = this.settingsModel.username; + if (senderName == "") return false; + const allChannels = [this.info.primaryChannel]; for (const secondaryChannel of this.info.secondaryChannels) { allChannels.push(secondaryChannel); @@ -171,11 +174,12 @@ export class ChatModel { const chatMessage: ChatMessage = ChatModel.createChatMessage( combinedChannel, - this.settingsModel.username, + senderName, body ); - + this.connectionModel.sendMessageOrStore(chatMessage); + return true; }; // memory diff --git a/src/View/homePage.tsx b/src/View/homePage.tsx index 2d28d69b..61949d66 100644 --- a/src/View/homePage.tsx +++ b/src/View/homePage.tsx @@ -96,7 +96,7 @@ export function HomePage( {translations.homePage.yourNameLabel} diff --git a/src/ViewModel/chatListViewModel.tsx b/src/ViewModel/chatListViewModel.tsx index 25a745c4..6b743bbc 100644 --- a/src/ViewModel/chatListViewModel.tsx +++ b/src/ViewModel/chatListViewModel.tsx @@ -3,11 +3,13 @@ import * as React from "bloatless-react"; import ChatListModel from "../Model/chatListModel"; import { ChatModel } from "../Model/chatModel"; import ChatViewModel from "./chatViewModel"; +import SettingsViewModel from "./settingsViewModel"; import StorageModel from "../Model/storageModel"; export default class ChatListViewModel { chatListModel: ChatListModel; storageModel: StorageModel; + settingsViewModel: SettingsViewModel; // state newChatPrimaryChannel: React.State = new React.State(""); @@ -42,8 +44,13 @@ export default class ChatListViewModel { }; createChatViewModel = (chatModel: ChatModel): ChatViewModel => { - return new ChatViewModel(chatModel, this.storageModel, this); - } + return new ChatViewModel( + chatModel, + this.storageModel, + this.settingsViewModel, + this + ); + }; // view openChat = (chatViewModel: ChatViewModel): void => { @@ -59,7 +66,7 @@ export default class ChatListViewModel { for (const chatViewModel of this.chatViewModels.value) { chatViewModel.updateIndex(); } - } + }; // restore restoreChats = (): void => { @@ -71,9 +78,14 @@ export default class ChatListViewModel { }; // init - constructor(chatListModel: ChatListModel, storageModel: StorageModel) { + constructor( + chatListModel: ChatListModel, + storageModel: StorageModel, + settingsViewModel: SettingsViewModel + ) { this.chatListModel = chatListModel; this.storageModel = storageModel; + this.settingsViewModel = settingsViewModel; this.restoreChats(); } diff --git a/src/ViewModel/chatViewModel.tsx b/src/ViewModel/chatViewModel.tsx index 4c6822c1..0ea854e6 100644 --- a/src/ViewModel/chatViewModel.tsx +++ b/src/ViewModel/chatViewModel.tsx @@ -5,11 +5,13 @@ import StorageModel, { storageKeys } from "../Model/storageModel"; import ChatListViewModel from "./chatListViewModel"; import { ChatModel } from "../Model/chatModel"; import { Color } from "./colors"; +import SettingsViewModel from "./settingsViewModel"; import { localeCompare } from "../Model/Utility/utility"; export default class ChatViewModel { chatModel: ChatModel; storageModel: StorageModel; + settingsViewModel: SettingsViewModel; chatListViewModel: ChatListViewModel; // state @@ -44,6 +46,7 @@ export default class ChatViewModel { this.primaryChannelInput.value == this.primaryChannel.value ); cannotSetEncryptionKey: React.State; + cannotSendMessage: React.State; // sorting updateIndex = (): void => { @@ -100,13 +103,13 @@ export default class ChatViewModel { this.close(); this.chatModel.delete(); this.chatListViewModel.restoreChats(); - } + }; // messaging sendMessage = (): void => { this.chatModel.sendMessage(this.composingMessage.value); this.composingMessage.value = ""; - } + }; // restore restorePageSelection = (): void => { @@ -134,10 +137,12 @@ export default class ChatViewModel { constructor( chatModel: ChatModel, storageModel: StorageModel, + settingsViewModel: SettingsViewModel, chatListViewModel: ChatListViewModel ) { this.chatModel = chatModel; this.storageModel = storageModel; + this.settingsViewModel = settingsViewModel; this.chatListViewModel = chatListViewModel; this.primaryChannel.value = chatModel.info.primaryChannel; @@ -149,6 +154,11 @@ export default class ChatViewModel { () => this.encryptionKeyInput.value == this.chatModel.info.encryptionKey ); + this.cannotSendMessage = React.createProxyState( + [this.settingsViewModel.username], + () => this.settingsViewModel.username.value == "" + ); + this.color.value = chatModel.color; this.restoreSecondaryChannels(); diff --git a/src/ViewModel/settingsViewModel.ts b/src/ViewModel/settingsViewModel.ts index a0af7361..c952b337 100644 --- a/src/ViewModel/settingsViewModel.ts +++ b/src/ViewModel/settingsViewModel.ts @@ -6,21 +6,23 @@ export default class SettingsViewModel { settingsModel: SettingsModel; // state - nameInput: React.State = new React.State(""); + username: React.State = new React.State(""); + usernameInput: React.State = new React.State(""); firstDayOfWeekInput: React.State = new React.State(0); // guards cannotSetName: React.State = React.createProxyState( - [this.nameInput], + [this.usernameInput], () => - this.nameInput.value == "" || - this.nameInput.value == this.settingsModel.username + this.usernameInput.value == "" || + this.usernameInput.value == this.settingsModel.username ); // set setName = (): void => { - this.settingsModel.setName(this.nameInput.value); - this.nameInput.callSubscriptions(); + this.settingsModel.setName(this.usernameInput.value); + this.username.value = this.settingsModel.username; + this.usernameInput.callSubscriptions(); }; setFirstDayofWeek = (): void => { @@ -31,7 +33,8 @@ export default class SettingsViewModel { constructor(settingsModel: SettingsModel) { this.settingsModel = settingsModel; - this.nameInput.value = settingsModel.username; + this.username.value = settingsModel.username; + this.usernameInput.value = settingsModel.username; this.firstDayOfWeekInput.value = settingsModel.firstDayOfWeek; // subscriptions diff --git a/src/index.tsx b/src/index.tsx index c5bd45b5..543d68be 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -29,7 +29,11 @@ storageModel.print(); // viewModels const settingsViewModel = new SettingsViewModel(settingsModel); const connectionViewModel = new ConnectionViewModel(connectionModel); -const chatListViewModel = new ChatListViewModel(chatListModel, storageModel); +const chatListViewModel = new ChatListViewModel( + chatListModel, + storageModel, + settingsViewModel +); // view document.body.append(
);