2024-07-23 23:32:49 +02:00
|
|
|
import "./taskPage.css";
|
|
|
|
|
|
2024-07-22 13:17:21 +02:00
|
|
|
import * as React from "bloatless-react";
|
|
|
|
|
|
2024-07-23 12:43:30 +02:00
|
|
|
import { BoardPage } from "./boardPage";
|
2024-07-24 13:31:28 +02:00
|
|
|
import { BoardViewModelToEntry } from "../Components/boardEntry";
|
2024-07-22 21:07:44 +02:00
|
|
|
import TaskPageViewModel from "../../ViewModel/Pages/taskPageViewModel";
|
2026-04-09 16:48:22 +00:00
|
|
|
import CoreViewModel from "../../ViewModel/Global/coreViewModel";
|
2026-04-10 18:17:16 +00:00
|
|
|
import { PlaceholderView } from "../Components/placeholderView";
|
2026-04-13 22:11:49 +00:00
|
|
|
import { v4 } from "uuid";
|
2026-04-14 13:15:38 +00:00
|
|
|
import { ViewController } from "../viewController";
|
2024-07-22 13:17:21 +02:00
|
|
|
|
2026-04-09 16:48:22 +00: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
|
|
|
|
2026-04-13 22:11:49 +00:00
|
|
|
const persistenceId = taskPageViewModel.chatViewModel.chatModel.id;
|
2026-04-15 12:47:10 +00:00
|
|
|
const pages = ViewController.taskPages.setState(persistenceId, () =>
|
2026-04-14 09:20:44 +00:00
|
|
|
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">
|
2026-04-09 16:48:22 +00:00
|
|
|
{
|
|
|
|
|
coreViewModel.translations.chatPage.task
|
|
|
|
|
.boardNotFound
|
|
|
|
|
}
|
2026-04-01 08:29:39 +00:00
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-07-23 13:51:27 +02:00
|
|
|
|
2026-04-09 16:48:22 +00:00
|
|
|
return BoardPage(coreViewModel, selectedBoard);
|
2026-04-14 09:20:44 +00:00
|
|
|
}),
|
|
|
|
|
);
|
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"
|
|
|
|
|
bind:value={taskPageViewModel.newBoardNameInput}
|
|
|
|
|
on:enter={taskPageViewModel.createBoard}
|
|
|
|
|
placeholder={
|
2026-04-09 16:48:22 +00:00
|
|
|
coreViewModel.translations.chatPage.task
|
2026-04-01 08:29:39 +00:00
|
|
|
.newBoardNamePlaceholder
|
|
|
|
|
}
|
|
|
|
|
></input>
|
|
|
|
|
<button
|
|
|
|
|
class="primary"
|
|
|
|
|
aria-label={
|
2026-04-09 16:48:22 +00:00
|
|
|
coreViewModel.translations.chatPage.task
|
2026-04-01 08:29:39 +00:00
|
|
|
.createBoardButtonAudioLabel
|
|
|
|
|
}
|
|
|
|
|
on:click={taskPageViewModel.createBoard}
|
|
|
|
|
toggle:disabled={
|
|
|
|
|
taskPageViewModel.cannotCreateBoard
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
<span class="icon">add</span>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div
|
|
|
|
|
class="grid gap"
|
|
|
|
|
style="grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr))"
|
|
|
|
|
children:append={[
|
|
|
|
|
taskPageViewModel.boardViewModels,
|
|
|
|
|
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"
|
2026-04-13 22:11:49 +00:00
|
|
|
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
|
|
|
}
|