improve centralization of models
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,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;
|
||||
|
||||
Reference in New Issue
Block a user