implement board sorting

This commit is contained in:
marlon-erler
2024-07-23 14:27:38 +02:00
parent 20488f8a26
commit 4d55a4974a
6 changed files with 66 additions and 11 deletions
+28 -5
View File
@@ -1423,6 +1423,7 @@
color = new State("standard" /* Standard */); color = new State("standard" /* Standard */);
isSelected; isSelected;
isPresentingSettingsModal = new State(false); isPresentingSettingsModal = new State(false);
index = new State(0);
// view // view
select = () => { select = () => {
this.taskPageViewModel.selectBoard(this); this.taskPageViewModel.selectBoard(this);
@@ -1437,6 +1438,10 @@
this.saveSettings(); this.saveSettings();
this.isPresentingSettingsModal.value = false; this.isPresentingSettingsModal.value = false;
}; };
updateIndex = () => {
const index = this.taskPageViewModel.boardIndexManager.getIndex(this);
this.index.value = index;
};
// methods // methods
saveSettings = () => { saveSettings = () => {
const newBoardInfoFileContent = TaskModel.createBoardInfoFileContent( const newBoardInfoFileContent = TaskModel.createBoardInfoFileContent(
@@ -1477,6 +1482,10 @@
storageModel; storageModel;
taskModel; taskModel;
chatViewModel; chatViewModel;
// data
boardIndexManager = new IndexManager(
(boardViewModel) => boardViewModel.name.value
);
// state // state
newBoardNameInput = new State(""); newBoardNameInput = new State("");
boardViewModels = new MapState(); boardViewModels = new MapState();
@@ -1498,9 +1507,11 @@
const boardInfoFileContent = this.taskModel.createBoard(this.newBoardNameInput.value); const boardInfoFileContent = this.taskModel.createBoard(this.newBoardNameInput.value);
this.newBoardNameInput.value = ""; this.newBoardNameInput.value = "";
this.showBoardInList(boardInfoFileContent); this.showBoardInList(boardInfoFileContent);
this.updateIndices();
}; };
updateBoard = (boardInfoFileContent) => { updateBoard = (boardInfoFileContent) => {
this.taskModel.updateBoard(boardInfoFileContent); this.taskModel.updateBoard(boardInfoFileContent);
this.updateIndices();
}; };
// view // view
showBoardInList = (boardInfo) => { showBoardInList = (boardInfo) => {
@@ -1515,6 +1526,12 @@
this.selectedBoardId.value = void 0; this.selectedBoardId.value = void 0;
this.chatViewModel.resetColor(); this.chatViewModel.resetColor();
}; };
updateIndices = () => {
this.boardIndexManager.update([...this.boardViewModels.value.values()]);
for (const boardViewModel of this.boardViewModels.value.values()) {
boardViewModel.updateIndex();
}
};
// load // load
loadData = () => { loadData = () => {
this.boardViewModels.clear(); this.boardViewModels.clear();
@@ -1524,6 +1541,7 @@
if (boardInfo == null) continue; if (boardInfo == null) continue;
this.showBoardInList(boardInfo); this.showBoardInList(boardInfo);
} }
this.updateIndices();
}; };
// init // init
constructor(taskModel, storageModel2, chatViewModel) { constructor(taskModel, storageModel2, chatViewModel) {
@@ -1533,6 +1551,7 @@
taskModel.boardHandlerManager.addHandler( taskModel.boardHandlerManager.addHandler(
(boardInfoFileContent) => { (boardInfoFileContent) => {
this.showBoardInList(boardInfoFileContent); this.showBoardInList(boardInfoFileContent);
this.updateIndices();
} }
); );
} }
@@ -1574,7 +1593,7 @@
this.displayedColor.value = this.settingsPageViewModel.color.value; this.displayedColor.value = this.settingsPageViewModel.color.value;
}; };
updateIndex = () => { updateIndex = () => {
const index = this.chatListViewModel.indexManager.getIndex(this); const index = this.chatListViewModel.chatIndexManager.getIndex(this);
this.index.value = index; this.index.value = index;
}; };
// load // load
@@ -1619,12 +1638,13 @@
chatListModel; chatListModel;
storageModel; storageModel;
settingsViewModel; settingsViewModel;
// data
chatIndexManager = new IndexManager(
(chatViewModel) => chatViewModel.settingsPageViewModel.primaryChannel.value
);
// state // state
newChatPrimaryChannel = new State(""); newChatPrimaryChannel = new State("");
chatViewModels = new ListState(); chatViewModels = new ListState();
indexManager = new IndexManager(
(chatViewModel) => chatViewModel.settingsPageViewModel.primaryChannel.value
);
selectedChat = new State(void 0); selectedChat = new State(void 0);
// guards // guards
cannotCreateChat = createProxyState( cannotCreateChat = createProxyState(
@@ -1657,7 +1677,7 @@
); );
}; };
updateIndices = () => { updateIndices = () => {
this.indexManager.update([...this.chatViewModels.value.values()]); this.chatIndexManager.update([...this.chatViewModels.value.values()]);
for (const chatViewModel of this.chatViewModels.value) { for (const chatViewModel of this.chatViewModels.value) {
chatViewModel.updateIndex(); chatViewModel.updateIndex();
} }
@@ -2087,6 +2107,9 @@
/* @__PURE__ */ createElement("span", { class: "shadow", "subscribe:innerText": boardViewModel.name }), /* @__PURE__ */ createElement("span", { class: "shadow", "subscribe:innerText": boardViewModel.name }),
/* @__PURE__ */ createElement("b", { "subscribe:innerText": boardViewModel.name }) /* @__PURE__ */ createElement("b", { "subscribe:innerText": boardViewModel.name })
); );
boardViewModel.index.subscribe((newIndex) => {
view.style.order = newIndex;
});
return view; return view;
} }
var BoardInfoToEntry = (boardViewModel) => { var BoardInfoToEntry = (boardViewModel) => {
+4
View File
@@ -16,6 +16,10 @@ export function BoardEntry(boardViewModel: BoardViewModel) {
</button> </button>
); );
boardViewModel.index.subscribe((newIndex) => {
view.style.order = newIndex;
});
return view; return view;
} }
+7 -5
View File
@@ -12,14 +12,16 @@ export default class ChatListViewModel {
storageModel: StorageModel; storageModel: StorageModel;
settingsViewModel: SettingsViewModel; settingsViewModel: SettingsViewModel;
// state // data
newChatPrimaryChannel: React.State<string> = new React.State(""); chatIndexManager: IndexManager<ChatViewModel> = new IndexManager(
chatViewModels: React.ListState<ChatViewModel> = new React.ListState();
indexManager: IndexManager<ChatViewModel> = new IndexManager(
(chatViewModel: ChatViewModel) => (chatViewModel: ChatViewModel) =>
chatViewModel.settingsPageViewModel.primaryChannel.value chatViewModel.settingsPageViewModel.primaryChannel.value
); );
// state
newChatPrimaryChannel: React.State<string> = new React.State("");
chatViewModels: React.ListState<ChatViewModel> = new React.ListState();
selectedChat: React.State<ChatViewModel | undefined> = new React.State< selectedChat: React.State<ChatViewModel | undefined> = new React.State<
ChatViewModel | undefined ChatViewModel | undefined
>(undefined); >(undefined);
@@ -61,7 +63,7 @@ export default class ChatListViewModel {
}; };
updateIndices = (): void => { updateIndices = (): void => {
this.indexManager.update([...this.chatViewModels.value.values()]); this.chatIndexManager.update([...this.chatViewModels.value.values()]);
for (const chatViewModel of this.chatViewModels.value) { for (const chatViewModel of this.chatViewModels.value) {
chatViewModel.updateIndex(); chatViewModel.updateIndex();
} }
+1 -1
View File
@@ -55,7 +55,7 @@ export default class ChatViewModel {
}; };
updateIndex = (): void => { updateIndex = (): void => {
const index: number = this.chatListViewModel.indexManager.getIndex(this); const index: number = this.chatListViewModel.chatIndexManager.getIndex(this);
this.index.value = index; this.index.value = index;
}; };
+8
View File
@@ -17,6 +17,8 @@ export default class BoardViewModel {
isSelected: React.State<boolean>; isSelected: React.State<boolean>;
isPresentingSettingsModal: React.State<boolean> = new React.State(false); isPresentingSettingsModal: React.State<boolean> = new React.State(false);
index: React.State<number> = new React.State(0);
// view // view
select = (): void => { select = (): void => {
this.taskPageViewModel.selectBoard(this); this.taskPageViewModel.selectBoard(this);
@@ -35,6 +37,12 @@ export default class BoardViewModel {
this.isPresentingSettingsModal.value = false; this.isPresentingSettingsModal.value = false;
}; };
updateIndex = (): void => {
const index: number =
this.taskPageViewModel.boardIndexManager.getIndex(this);
this.index.value = index;
};
// methods // methods
saveSettings = (): void => { saveSettings = (): void => {
const newBoardInfoFileContent: BoardInfoFileContent = const newBoardInfoFileContent: BoardInfoFileContent =
+18
View File
@@ -8,6 +8,7 @@ import TaskModel, {
import BoardViewModel from "./boardViewModel"; import BoardViewModel from "./boardViewModel";
import ChatViewModel from "../Chat/chatViewModel"; import ChatViewModel from "../Chat/chatViewModel";
import { FileContent } from "../../Model/Files/fileModel"; import { FileContent } from "../../Model/Files/fileModel";
import { IndexManager } from "../../Model/Utility/utility";
import StorageModel from "../../Model/Global/storageModel"; import StorageModel from "../../Model/Global/storageModel";
import { checkMatchesObjectStructure } from "../../Model/Utility/typeSafety"; import { checkMatchesObjectStructure } from "../../Model/Utility/typeSafety";
@@ -17,6 +18,11 @@ export default class TaskPageViewModel {
chatViewModel: ChatViewModel; chatViewModel: ChatViewModel;
// data
boardIndexManager: IndexManager<BoardViewModel> = new IndexManager(
(boardViewModel: BoardViewModel) => boardViewModel.name.value
);
// state // state
newBoardNameInput: React.State<string> = new React.State(""); newBoardNameInput: React.State<string> = new React.State("");
@@ -51,10 +57,12 @@ export default class TaskPageViewModel {
this.newBoardNameInput.value = ""; this.newBoardNameInput.value = "";
this.showBoardInList(boardInfoFileContent); this.showBoardInList(boardInfoFileContent);
this.updateIndices();
}; };
updateBoard = (boardInfoFileContent: BoardInfoFileContent): void => { updateBoard = (boardInfoFileContent: BoardInfoFileContent): void => {
this.taskModel.updateBoard(boardInfoFileContent); this.taskModel.updateBoard(boardInfoFileContent);
this.updateIndices();
}; };
// view // view
@@ -73,6 +81,13 @@ export default class TaskPageViewModel {
this.chatViewModel.resetColor(); this.chatViewModel.resetColor();
}; };
updateIndices = (): void => {
this.boardIndexManager.update([...this.boardViewModels.value.values()]);
for (const boardViewModel of this.boardViewModels.value.values()) {
boardViewModel.updateIndex();
}
};
// load // load
loadData = (): void => { loadData = (): void => {
this.boardViewModels.clear(); this.boardViewModels.clear();
@@ -85,6 +100,8 @@ export default class TaskPageViewModel {
this.showBoardInList(boardInfo); this.showBoardInList(boardInfo);
} }
this.updateIndices();
}; };
// init // init
@@ -102,6 +119,7 @@ export default class TaskPageViewModel {
taskModel.boardHandlerManager.addHandler( taskModel.boardHandlerManager.addHandler(
(boardInfoFileContent: BoardInfoFileContent) => { (boardInfoFileContent: BoardInfoFileContent) => {
this.showBoardInList(boardInfoFileContent); this.showBoardInList(boardInfoFileContent);
this.updateIndices();
} }
); );
} }