import { createDropzone } from "@soorria/solid-dropzone"; import { Info, UploadIcon } from "lucide-solid"; import { createSignal, Show } from "solid-js"; import { createMutation, useQueryClient } from "@tanstack/solid-query"; import { readPodcastQueryKey, readPodcastsQueryKey, updatePodcastImageMutation } from "../client/@tanstack/solid-query.gen"; import { PodcastPublic } from "../client"; export default function UploadImage(props: { podcastId: string }) { const queryClient = useQueryClient(); const [uploading, setUploading] = createSignal(false); const [statusText, setStatusText] = createSignal(null); const updatePodcastImage = createMutation(() => ({ ...updatePodcastImageMutation(), onSuccess(data, vars) { queryClient.setQueryData(readPodcastQueryKey({ path: vars.path }), data); queryClient.setQueryData(readPodcastsQueryKey(), (oldData: PodcastPublic[]) => oldData ? [...oldData.filter((x) => x.id !== data.id), data] : oldData); }, })) const dropzone = createDropzone({ onDrop(files: File[]) { if (!files[0]) { throw new Error("No file was uploaded"); } setStatusText("Uploading..."); setUploading(true); updatePodcastImage.mutate({ body: { image: files[0], }, path: { podcast_id: props.podcastId, } }, { onSuccess() { setStatusText("Podcast image uploaded!"); setUploading(false); }, onError(error, _variables, _context) { setStatusText(`Error uploading: ${error.detail}`); setUploading(false); }, }); } }); return <>

{dropzone.isDragActive ? "Drop podcast image here..." : "Drag podcast image here to upload, or click to open"}

; }