import { $, component$, noSerialize, NoSerialize, useSignal, useVisibleTask$ } from "@builder.io/qwik"; import { useNanostore$ } from "~/hooks/nanostores"; import { api } from "~/lib/api"; import { areFilesLoaded, dashboardFiles } from "~/lib/stores"; import { StereoFile } from "~/lib/types"; import { SolarUploadLinear, SvgSpinnersBarsRotateFade } from "../misc/Icons"; import StereoLogo from "../misc/StereoLogo"; export default component$(() => { const loaded = useNanostore$(areFilesLoaded); const files = useNanostore$(dashboardFiles); const fileInputRef = useSignal(); const uploadingFiles = useSignal | undefined>(); const now = useSignal(new Date()); useVisibleTask$(() => { const interval = setInterval(() => { now.value = new Date(); }, 500); return () => clearInterval(interval); }); const uploadFiles = $(async () => { if (!uploadingFiles.value) { console.error("No file(s) selected for upload."); return; } try { const ufiles = uploadingFiles.value as File[]; for (const file of ufiles) { const name = file.name.replace(/[^a-zA-Z0-9_.-]/g, "_"); const f = new File([file], name, { type: file.type }); await api.upload(f); } files.value = await api.list(); } catch (error) { console.error("Error uploading file:", error); } }) return (
{ uploadingFiles.value = noSerialize(Object.values((e.target as HTMLInputElement).files || {})); await uploadFiles(); }} multiple />
{/* TODO: replace this button with a modal with options like settings log out etc */}

|

{now.value.toLocaleTimeString()}

) })