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

129 lines
3.9 KiB
TypeScript
Raw Normal View History

import * as React from "bloatless-react";
2024-07-23 15:41:03 +02:00
import BoardViewModel, {
BoardPageType,
} from "../../ViewModel/Pages/boardViewModel";
2024-07-25 01:38:11 +02:00
import { BoardKanbanPage } from "./boardKanbanPage";
2024-07-23 13:09:46 +02:00
import { BoardSettingsModal } from "../Modals/boardSettingsModal";
2024-07-25 04:12:30 +02:00
import { BoardStatusGridPage } from "./boardStatusGridPage";
2024-07-23 15:41:03 +02:00
import { BoardViewToggleButton } from "../Components/boardViewToggleButton";
2024-07-25 15:31:27 +02:00
import { SearchModal } from "../Modals/searchModal";
2024-07-24 13:31:28 +02:00
import { TaskSettingsModal } from "../Modals/taskSettingsModal";
2024-07-25 15:31:27 +02:00
import TaskViewModel from "../../ViewModel/Pages/taskViewModel";
2024-07-24 13:31:28 +02:00
import { TaskViewModelToEntry } from "../Components/taskEntry";
2024-07-23 13:09:46 +02:00
import { translations } from "../translations";
export function BoardPage(boardViewModel: BoardViewModel) {
boardViewModel.loadData();
2024-07-25 15:31:27 +02:00
// main content
2024-07-23 22:46:23 +02:00
const mainContent = React.createProxyState(
[boardViewModel.selectedPage],
() => {
switch (boardViewModel.selectedPage.value) {
2024-07-25 01:38:11 +02:00
case BoardPageType.Kanban: {
return BoardKanbanPage(boardViewModel);
}
2024-07-25 04:12:30 +02:00
case BoardPageType.StatusGrid: {
return BoardStatusGridPage(boardViewModel);
}
2024-07-23 22:46:23 +02:00
default: {
2024-07-24 13:31:28 +02:00
return (
<div
2024-07-24 15:59:48 +02:00
class="task-grid"
2024-07-24 13:31:28 +02:00
children:append={[
2024-07-25 15:31:27 +02:00
boardViewModel.filteredTaskViewModels,
2024-07-24 13:31:28 +02:00
TaskViewModelToEntry,
]}
></div>
);
2024-07-23 22:46:23 +02:00
}
}
}
);
2024-07-25 15:31:27 +02:00
// task modal
2024-07-24 13:31:28 +02:00
const taskSettingsModal = React.createProxyState(
[boardViewModel.selectedTaskViewModel],
() => {
if (boardViewModel.selectedTaskViewModel.value == undefined) {
return <div></div>;
} else {
return TaskSettingsModal(boardViewModel.selectedTaskViewModel.value);
}
}
);
2024-07-23 13:09:46 +02:00
return (
<div class="pane">
<div class="toolbar">
<span>
<button
class="ghost"
aria-label={translations.chatPage.task.closeBoard}
on:click={boardViewModel.close}
>
<span class="icon">arrow_back</span>
</button>
<button
class="ghost"
aria-label={translations.chatPage.task.boardSettingsHeadline}
on:click={boardViewModel.showSettings}
>
<span class="icon">settings</span>
</button>
</span>
2024-07-23 15:25:16 +02:00
<span class="scroll-h ribbon">
2024-07-23 15:41:03 +02:00
{BoardViewToggleButton(
translations.chatPage.task.listViewButtonAudioLabel,
"view_list",
BoardPageType.List,
boardViewModel
)}
{BoardViewToggleButton(
translations.chatPage.task.kanbanViewButtonAudioLabel,
"view_kanban",
BoardPageType.Kanban,
boardViewModel
)}
{BoardViewToggleButton(
translations.chatPage.task.statusViewButtonAudioLabel,
"grid_view",
BoardPageType.StatusGrid,
boardViewModel
)}
2024-07-23 15:25:16 +02:00
</span>
<span>
<button
class="ghost"
aria-label={translations.chatPage.task.filterTasksButtonAudioLabel}
on:click={boardViewModel.showFilterModal}
>
<span class="icon">filter_alt</span>
</button>
<button
2024-07-23 23:28:22 +02:00
class="ghost"
2024-07-23 15:25:16 +02:00
aria-label={translations.chatPage.task.createTaskButtonAudioLabel}
2024-07-24 13:31:28 +02:00
on:click={boardViewModel.createTask}
2024-07-23 15:25:16 +02:00
>
<span class="icon">add</span>
</button>
</span>
2024-07-23 13:09:46 +02:00
</div>
2024-07-25 02:49:23 +02:00
<div class="content main-content" children:set={mainContent}></div>
2024-07-23 13:09:46 +02:00
{BoardSettingsModal(boardViewModel)}
2024-07-25 15:31:27 +02:00
{SearchModal(
translations.chatPage.task.filterTasksHeadline,
boardViewModel.taskViewModels,
boardViewModel.filteredTaskViewModels,
TaskViewModelToEntry,
boardViewModel.getStringsFromTaskViewModel,
boardViewModel.isPresentingFilterModal
)}
2024-07-24 13:31:28 +02:00
<div children:set={taskSettingsModal}></div>
2024-07-23 13:09:46 +02:00
</div>
);
}