summaryrefslogtreecommitdiff
path: root/src/taskbar/index.tsx
blob: 3752e52714f97899b366cc4664369712c7cffaff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { StartButton } from "./start"
import { Time } from "./time"
import { Task, taskManager } from "$/desktop"
import { useCallback } from "preact/hooks"
import { useLiveSignal } from "@preact/signals/utils";

function TaskButton({ task }: TaskButton.Props) {
    const source = useLiveSignal(task.source);
    const title = useLiveSignal(task.title);

    const handleClick = useCallback(() => {
        task.window.minimized.value = !task.window.minimized.value;
        taskManager.focusWindow(task)
    }, [])

    return <li>
        <button onClick={handleClick}>
            <img src={`/assets/${source.value.value.type}.png`} />
            <div>{title.value.value ?? "[404 Title Not Found]"}</div>
        </button>
    </li>
}

namespace TaskButton {
    export type Props = {
        task: Task
    }
}

export function Taskbar() {
    const sortedTasks = [...taskManager.tasks.value.value].sort((a, b) => a.id - b.id);

    return <nav>
        <StartButton />
        <ul>
            { sortedTasks.map(task => <TaskButton task={task}/>)}
        </ul>
        <Time />
        <div id="netpunk_descender"></div>
    </nav>
}