simonduerr's picture
Upload folder using huggingface_hub
514575e verified
<script lang="ts">
import { createEventDispatcher, tick } from "svelte";
import { Upload, ModifyUpload } from "@gradio/upload";
import type { FileData, Client } from "@gradio/client";
import { BlockLabel } from "@gradio/atoms";
import { File } from "@gradio/icons";
import FileRetrieval from "./FileRetrieval.svelte";
import FilePreview from "./FilePreview.svelte";
import type { I18nFormatter } from "@gradio/utils";
import MolecularViewer from "./MolecularViewer.svelte";
export let value: null | FileData | FileData[];
export let label: string;
export let show_label = true;
export let file_count: "single" | "multiple" | "directory" = "single";
export let file_types: string[] | null = null;
export let selectable = false;
export let root: string;
export let height: number | undefined = undefined;
export let i18n: I18nFormatter;
export let max_file_size: number | null = null;
export let upload: Client["upload"];
export let stream_handler: Client["stream"];
export let config = {};
export let confidenceLabel = "";
export let representations = [];
export let moldata = null;
export let molviewer = false;
async function handle_upload({
detail,
}: CustomEvent<FileData | FileData[]>): Promise<void> {
value = detail;
console.log("upload", detail);
await tick();
dispatch("change", value);
dispatch("upload", detail);
}
function handle_clear(): void {
value = null;
oldata = null;
dispatch("change", null);
dispatch("clear");
}
const dispatch = createEventDispatcher<{
change: FileData[] | FileData | null;
clear: undefined;
drag: boolean;
upload: FileData[] | FileData;
load: FileData[] | FileData;
error: string;
}>();
let dragging = false;
$: dispatch("drag", dragging);
</script>
<BlockLabel {show_label} Icon={File} float={!value} label={label || "File"} />
{#if value && (Array.isArray(value) ? value.length > 0 : true)}
<ModifyUpload {i18n} on:clear={handle_clear} absolute />
<FilePreview
{i18n}
on:select
{selectable}
{value}
{height}
on:change
on:delete
/>
{#if moldata != null && molviewer}
<MolecularViewer {moldata} {config} {confidenceLabel} {representations} />
{/if}
{:else}
<FileRetrieval
{root}
on:load={handle_upload}
{upload}
on:notfound={() => dispatch("notfound")}
/>
<Upload
on:load={handle_upload}
filetype={file_types}
{file_count}
{max_file_size}
{root}
bind:dragging
on:error
{stream_handler}
{upload}
>
<slot />
</Upload>
{/if}