Files
CT/src/View/ChatPages/taskPage.tsx
T

100 lines
3.9 KiB
TypeScript
Raw Normal View History

2026-04-18 11:55:01 +00:00
import "./taskPage.css";
import { BoardPage } from "./boardPage";
2026-04-18 11:55:01 +00:00
import { ViewController } from "../viewController";
import { PlaceholderView } from "../Components/placeholderView";
2026-09-26 23:32:38 +02:00
import { NewItemEntry } from "../Components/newItemEntry";
2024-07-24 13:31:28 +02:00
import { BoardViewModelToEntry } from "../Components/boardEntry";
2026-09-23 00:09:09 +02:00
import * as React from "../../react";
2024-07-22 21:07:44 +02:00
import TaskPageViewModel from "../../ViewModel/Pages/taskPageViewModel";
import CoreViewModel from "../../ViewModel/Global/coreViewModel";
2024-07-22 13:17:21 +02:00
export function TaskPage(
coreViewModel: CoreViewModel,
taskPageViewModel: TaskPageViewModel,
) {
2026-04-01 08:29:39 +00:00
taskPageViewModel.loadData();
2024-07-23 00:05:48 +02:00
2026-04-01 08:29:39 +00:00
const isShowingBoard = React.createProxyState(
[taskPageViewModel.selectedBoardId],
() => taskPageViewModel.selectedBoardId.value != undefined,
);
2024-07-23 23:32:49 +02:00
const persistenceId = taskPageViewModel.chatViewModel.chatModel.id;
2026-04-15 12:47:10 +00:00
const pages = ViewController.taskPages.setState(persistenceId, () =>
React.createProxyState([taskPageViewModel.selectedBoardId], () => {
2026-04-01 08:29:39 +00:00
const selectedBoardId = taskPageViewModel.selectedBoardId.value;
if (selectedBoardId == undefined) {
2026-04-10 18:17:16 +00:00
return PlaceholderView(
coreViewModel.translations.chatPage.task.noBoardSelected,
2026-04-01 08:29:39 +00:00
);
}
const selectedBoard =
taskPageViewModel.boardViewModels.value.get(selectedBoardId);
if (selectedBoard == undefined) {
return (
<div class="pane align-center justify-center">
<span class="secondary">
{
coreViewModel.translations.chatPage.task
.boardNotFound
}
2026-04-01 08:29:39 +00:00
</span>
</div>
);
}
2024-07-23 13:51:27 +02:00
return BoardPage(coreViewModel, selectedBoard);
}),
);
2024-07-23 02:57:20 +02:00
2026-04-01 08:29:39 +00:00
return (
<div
id="task-page"
toggle:isshowingboard={isShowingBoard}
set:showingboardlist={taskPageViewModel.isShowingBoadList}
>
<div
id="board-list"
class="pane-wrapper side background"
set:color={taskPageViewModel.chatViewModel.displayedColor}
>
<div class="pane">
<div class="toolbar">
<div class="flex-row width-input">
<input
class="no-outline"
2026-09-23 00:09:09 +02:00
bind:value={taskPageViewModel.boardQuery}
2026-04-01 08:29:39 +00:00
on:enter={taskPageViewModel.createBoard}
placeholder={
2026-09-26 23:32:38 +02:00
coreViewModel.translations.general
2026-09-30 13:55:04 +02:00
.filterOrCreateLabel(coreViewModel.translations.chatPage.task.typeBoard)
2026-04-01 08:29:39 +00:00
}
></input>
</div>
</div>
2026-09-26 23:32:38 +02:00
<div class="content gap">
{NewItemEntry(
coreViewModel,
taskPageViewModel.boardQuery,
taskPageViewModel.createBoard,
)}
2026-04-01 08:29:39 +00:00
<div
class="grid gap"
style="grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr))"
children:append={[
2026-09-23 00:09:09 +02:00
taskPageViewModel.boardMatches,
2026-04-01 08:29:39 +00:00
BoardViewModelToEntry,
]}
></div>
</div>
</div>
2024-07-23 23:32:49 +02:00
</div>
<div
2026-04-01 08:29:39 +00:00
id="board-content"
class="pane-wrapper"
children:set={pages}
2024-07-23 23:32:49 +02:00
></div>
2024-07-23 13:09:46 +02:00
</div>
2026-04-01 08:29:39 +00:00
);
2024-07-22 13:17:21 +02:00
}