improve centralization of models

This commit is contained in:
marlon-erler
2024-07-20 20:42:43 +02:00
parent bdbd2ac8b6
commit 995f82f3ef
11 changed files with 240 additions and 125 deletions
+19 -22
View File
@@ -6,8 +6,8 @@ import ChatViewModel from "./chatViewModel";
import StorageModel from "../Model/storageModel";
export default class ChatListViewModel {
storageModel: StorageModel;
chatListModel: ChatListModel;
storageModel: StorageModel;
// state
newChatPrimaryChannel: React.State<string> = new React.State("");
@@ -23,21 +23,6 @@ export default class ChatListViewModel {
() => this.newChatPrimaryChannel.value == ""
);
// sorting
get sortedPrimaryChannels(): string[] {
return this.chatListModel.sortedPrimaryChannels;
}
getIndexOfChat(chat: ChatViewModel): number {
return this.sortedPrimaryChannels.indexOf(chat.primaryChannel.value);
}
updateIndices = (): void => {
for (const chatViewModel of this.chatViewModels.value) {
chatViewModel.updateIndex();
}
}
// methods
createChat = (): void => {
const chatModel: ChatModel = this.chatListModel.createChat(
@@ -45,8 +30,10 @@ export default class ChatListViewModel {
);
this.newChatPrimaryChannel.value = "";
const chatViewModel: ChatViewModel = new ChatViewModel(this, chatModel);
const chatViewModel: ChatViewModel = this.createChatViewModel(chatModel);
this.chatViewModels.add(chatViewModel);
this.updateIndices();
};
untrackChat = (chatViewModel: ChatViewModel): void => {
@@ -54,6 +41,11 @@ export default class ChatListViewModel {
this.chatViewModels.remove(chatViewModel);
};
createChatViewModel = (chatModel: ChatModel): ChatViewModel => {
return new ChatViewModel(chatModel, this.storageModel, this);
}
// view
openChat = (chatViewModel: ChatViewModel): void => {
this.selectedChat.value = chatViewModel;
};
@@ -62,20 +54,25 @@ export default class ChatListViewModel {
this.selectedChat.value = undefined;
};
// sorting
updateIndices = (): void => {
for (const chatViewModel of this.chatViewModels.value) {
chatViewModel.updateIndex();
}
}
// restore
restoreChats = (): void => {
for (const chatModel of this.chatListModel.chatModels.values()) {
const chatViewModel = new ChatViewModel(this, chatModel);
const chatViewModel = this.createChatViewModel(chatModel);
this.chatViewModels.add(chatViewModel);
}
};
// init
constructor(storageModel: StorageModel) {
this.storageModel = storageModel;
const chatListModel = new ChatListModel(storageModel);
constructor(chatListModel: ChatListModel, storageModel: StorageModel) {
this.chatListModel = chatListModel;
this.storageModel = storageModel;
this.restoreChats();
}
+12 -6
View File
@@ -9,8 +9,8 @@ import { localeCompare } from "../Model/Utility/utility";
export default class ChatViewModel {
chatModel: ChatModel;
chatListViewModel: ChatListViewModel;
storageModel: StorageModel;
chatListViewModel: ChatListViewModel;
// state
index: React.State<number> = new React.State(0);
@@ -34,6 +34,8 @@ export default class ChatViewModel {
ChatPageType.Messages
);
composingMessage: React.State<string> = new React.State("");
// guards
cannotSetPrimaryChannel: React.State<boolean> = React.createProxyState(
[this.primaryChannel, this.primaryChannelInput],
@@ -45,11 +47,10 @@ export default class ChatViewModel {
// sorting
updateIndex = (): void => {
const index = this.chatListViewModel.getIndexOfChat(this);
this.index.value = index;
this.index.value = this.chatModel.index;
};
// methods
// view
open = (): void => {
this.chatListViewModel.openChat(this);
};
@@ -58,6 +59,7 @@ export default class ChatViewModel {
this.chatListViewModel.closeChat();
};
// settings
setPrimaryChannel = (): void => {
this.chatModel.setPrimaryChannel(this.primaryChannelInput.value);
this.primaryChannel.value = this.chatModel.info.primaryChannel;
@@ -117,9 +119,13 @@ export default class ChatViewModel {
};
// init
constructor(chatListViewModel: ChatListViewModel, chatModel: ChatModel) {
constructor(
chatModel: ChatModel,
storageModel: StorageModel,
chatListViewModel: ChatListViewModel
) {
this.chatModel = chatModel;
this.storageModel = chatModel.storageModel;
this.storageModel = storageModel;
this.chatListViewModel = chatListViewModel;
this.primaryChannel.value = chatModel.info.primaryChannel;
+1 -8
View File
@@ -2,7 +2,6 @@ import * as React from "bloatless-react";
import ConnectionModel from "../Model/connectionModel";
import { Message } from "udn-frontend";
import StorageModel from "../Model/storageModel";
export default class ConnectionViewModel {
connectionModel: ConnectionModel;
@@ -78,14 +77,8 @@ export default class ConnectionViewModel {
};
// init
constructor(storageModel: StorageModel) {
const connectionModel = new ConnectionModel({
storageModel,
connectionChangeHandler: this.connectionChangeHandler,
messageHandler: this.messageHandler,
});
constructor(connectionModel: ConnectionModel) {
this.connectionModel = connectionModel;
this.updatePreviousAddresses();
}
}
+1 -3
View File
@@ -1,7 +1,6 @@
import * as React from "bloatless-react";
import SettingsModel from "../Model/settingsModel";
import StorageModel from "../Model/storageModel";
export default class SettingsViewModel {
settingsModel: SettingsModel;
@@ -29,8 +28,7 @@ export default class SettingsViewModel {
};
// init
constructor(storageModel: StorageModel) {
const settingsModel = new SettingsModel(storageModel);
constructor(settingsModel: SettingsModel) {
this.settingsModel = settingsModel;
this.nameInput.value = settingsModel.username;