implement board sorting
This commit is contained in:
Vendored
+28
-5
@@ -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) => {
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ export function BoardEntry(boardViewModel: BoardViewModel) {
|
|||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
boardViewModel.index.subscribe((newIndex) => {
|
||||||
|
view.style.order = newIndex;
|
||||||
|
});
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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 =
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user