add BoardViewModel

This commit is contained in:
marlon-erler
2024-07-23 00:57:40 +02:00
parent d35f2ff0ea
commit 267bdcfc73
6 changed files with 80 additions and 26 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ export function TaskPage(taskPageViewModel: TaskPageViewModel) {
<div
class="grid gap"
style="grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr))"
children:append={[taskPageViewModel.boards, BoardInfoToEntry]}
children:append={[taskPageViewModel.boardViewModels, BoardInfoToEntry]}
></div>
</div>
</div>
+8 -8
View File
@@ -1,15 +1,15 @@
import * as React from "bloatless-react";
import { BoardInfoFileContent } from "../../Model/Files/taskModel";
import BoardViewModel from "../../ViewModel/Pages/boardViewModel";
export function BoardEntry(boardInfo: BoardInfoFileContent) {
export function BoardEntry(boardViewModel: BoardViewModel) {
const view = (
<button
color={boardInfo.color}
set:color={boardViewModel.color}
class="tile colored-tile"
>
<span class="shadow">{boardInfo.name}</span>
<b>{boardInfo.name}</b>
<span class="shadow" subscribe:innerText={boardViewModel.name}></span>
<b subscribe:innerText={boardViewModel.name}></b>
</button>
);
@@ -17,7 +17,7 @@ export function BoardEntry(boardInfo: BoardInfoFileContent) {
}
export const BoardInfoToEntry: React.StateItemConverter<
BoardInfoFileContent
> = (boardInfo: BoardInfoFileContent) => {
return BoardEntry(boardInfo);
BoardViewModel
> = (boardViewModel: BoardViewModel) => {
return BoardEntry(boardViewModel);
};
@@ -1,5 +1,3 @@
// this file is responsible for managing individual chat messages.
import * as React from "bloatless-react";
import { ChatMessage, ChatMessageStatus } from "../../Model/Chat/chatModel";
+31
View File
@@ -0,0 +1,31 @@
import * as React from "bloatless-react";
import { BoardInfoFileContent } from "../../Model/Files/taskModel";
import { Color } from "../../colors";
import TaskPageViewModel from "./taskPageViewModel";
export default class BoardViewModel {
taskPageViewModel: TaskPageViewModel;
// data
boardInfo: BoardInfoFileContent;
name: React.State<string> = new React.State("");
color: React.State<Color> = new React.State<Color>(Color.Standard);
// load
loadListRelevantData = (): void => {
this.name.value = this.boardInfo.name;
this.color.value = this.boardInfo.color;
}
loadData = (): void => {}
// init
constructor(taskPageViewModel: TaskPageViewModel, boardInfo: BoardInfoFileContent) {
this.taskPageViewModel = taskPageViewModel;
this.boardInfo = boardInfo;
this.loadListRelevantData();
}
}
+6 -4
View File
@@ -5,6 +5,7 @@ import TaskModel, {
BoardInfoFileContentReference,
} from "../../Model/Files/taskModel";
import BoardViewModel from "./boardViewModel";
import { FileContent } from "../../Model/Files/fileModel";
import StorageModel from "../../Model/Global/storageModel";
import { checkMatchesObjectStructure } from "../../Model/Utility/typeSafety";
@@ -15,7 +16,7 @@ export default class TaskPageViewModel {
// state
newBoardNameInput: React.State<string> = new React.State("");
boards: React.ListState<BoardInfoFileContent> = new React.ListState();
boardViewModels: React.ListState<BoardViewModel> = new React.ListState();
// guards
cannotCreateBoard: React.State<boolean> = React.createProxyState(
@@ -41,17 +42,18 @@ export default class TaskPageViewModel {
this.taskModel.createBoard(this.newBoardNameInput.value);
this.newBoardNameInput.value = "";
this.boards.add(boardInfoFileContent);
this.showBoard(boardInfoFileContent);
};
// view
showBoard = (boardInfo: BoardInfoFileContent): void => {
this.boards.add(boardInfo);
const boardViewModel: BoardViewModel = new BoardViewModel(this, boardInfo);
this.boardViewModels.add(boardViewModel);
};
// load
loadData = (): void => {
this.boards.clear();
this.boardViewModels.clear();
const boardIds: string[] = this.taskModel.listBoardIds();
for (const boardId of boardIds) {