Files
CT/src/View/Components/taskEntry.tsx
T

58 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-07-24 13:31:28 +02:00
import * as React from "bloatless-react";
import TaskViewModel from "../../ViewModel/Pages/taskViewModel";
export function TaskEntry(taskViewModel: TaskViewModel) {
2024-07-24 15:12:35 +02:00
const details: { [icon: string]: string } = {
description: taskViewModel.description.value || "---",
priority_high: taskViewModel.priority.value || "---",
category: taskViewModel.category.value || "---",
clock_loader_40: taskViewModel.status.value || "---",
calendar_month: taskViewModel.date.value || "---",
schedule: taskViewModel.time.value || "---",
};
2024-07-24 13:31:28 +02:00
const view = (
2024-07-25 04:12:30 +02:00
<button
2024-07-25 16:20:43 +02:00
draggable="true"
2024-07-25 04:12:30 +02:00
class="tile flex-no"
2024-07-25 18:16:29 +02:00
style="user-select: none; -webkit-user-select: none"
2024-07-25 04:12:30 +02:00
on:click={taskViewModel.open}
2024-07-25 16:20:43 +02:00
on:dragstart={taskViewModel.dragStart}
2024-07-25 04:12:30 +02:00
>
2024-07-24 15:12:35 +02:00
<div>
2024-07-27 01:29:00 +02:00
<b class="ellipsis" subscribe:innerText={taskViewModel.name}></b>
2024-07-24 15:12:35 +02:00
<hr></hr>
<div
class="grid secondary"
style="grid-template-columns: repeat(2, 1fr); column-gap: 1rem; row-gap: .5rem"
>
{...Object.entries(details).map((entry) => (
<span
class="flex-row align-center width-100 flex-no clip"
style="gap: 1rem"
>
<span class="icon" style="font-size: 1.1rem">
{entry[0]}
</span>
<span class="ellipsis">{entry[1]}</span>
</span>
))}
</div>
</div>
2024-07-24 13:31:28 +02:00
</button>
);
2024-07-24 14:34:28 +02:00
taskViewModel.index.subscribe((newIndex) => {
view.style.order = newIndex;
});
2024-07-24 13:31:28 +02:00
return view;
}
export const TaskViewModelToEntry: React.StateItemConverter<TaskViewModel> = (
taskViewModel: TaskViewModel
) => {
return TaskEntry(taskViewModel);
};