| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { useDialog } from "@tui/ui/dialog"
- import { DialogSelect } from "@tui/ui/dialog-select"
- import { useRoute } from "@tui/context/route"
- import { useSync } from "@tui/context/sync"
- import { createMemo, createSignal, onMount } from "solid-js"
- import { Locale } from "@/util/locale"
- import { Keybind } from "@/util/keybind"
- import { useTheme } from "../context/theme"
- import { useSDK } from "../context/sdk"
- import { DialogSessionRename } from "./dialog-session-rename"
- export function DialogSessionList() {
- const dialog = useDialog()
- const sync = useSync()
- const { theme } = useTheme()
- const route = useRoute()
- const sdk = useSDK()
- const [toDelete, setToDelete] = createSignal<string>()
- const options = createMemo(() => {
- const today = new Date().toDateString()
- return sync.data.session
- .filter((x) => x.parentID === undefined)
- .map((x) => {
- const date = new Date(x.time.updated)
- let category = date.toDateString()
- if (category === today) {
- category = "Today"
- }
- const isDeleting = toDelete() === x.id
- return {
- title: isDeleting ? "Press delete again to confirm" : x.title,
- bg: isDeleting ? theme.error : undefined,
- value: x.id,
- category,
- footer: Locale.time(x.time.updated),
- }
- })
- })
- onMount(() => {
- dialog.setSize("large")
- })
- return (
- <DialogSelect
- title="Sessions"
- options={options()}
- limit={50}
- onMove={() => {
- setToDelete(undefined)
- }}
- onSelect={(option) => {
- route.navigate({
- type: "session",
- sessionID: option.value,
- })
- dialog.clear()
- }}
- keybind={[
- {
- keybind: Keybind.parse("delete")[0],
- title: "delete",
- onTrigger: async (option) => {
- if (toDelete() === option.value) {
- sdk.client.session.delete({
- path: {
- id: option.value,
- },
- })
- setToDelete(undefined)
- return
- }
- setToDelete(option.value)
- },
- },
- {
- keybind: Keybind.parse("r")[0],
- title: "rename",
- onTrigger: async (option) => {
- dialog.replace(() => <DialogSessionRename session={option.value} />)
- },
- },
- ]}
- />
- )
- }
|