import { APP_REGISTRY } from "$/apps"; import { Ref } from "preact"; import { useCallback, useRef, useState } from "preact/hooks"; import { getTaskId, taskManager } from "."; import { signal } from "@preact/signals"; import { SourceTypes, VirtualFile } from "$/apps/source"; export function File({ file }: { file: VirtualFile }) { const [focused, setFocused] = useState(false); const buttonRef: Ref = useRef(null); const handleBlur = useCallback((e: PointerEvent) => { if (!buttonRef.current!.contains(e.target! as Node)) { setFocused(false); document.removeEventListener("click", handleBlur) } }, []) const handleFocus = useCallback(() => { setFocused(true); document.addEventListener("click", handleBlur) }, []) const handleDoubleClick = useCallback(() => { let app = APP_REGISTRY[file.type as SourceTypes]; if (app === undefined) { console.error(`couldn't find app for file of type "${file.type}"`) return } setFocused(false); taskManager.add({ app, source: signal(file), window: { minimized: signal(false), maximized: signal(false), height: file.height, width: file.width, z: signal(taskManager.tasks.value.value.length) }, title: signal(undefined), id: getTaskId(), contentReady: signal(false), sizingFinished: signal(false) }) }, []) return }