MCPcopy
hub / github.com/pingdotgg/uploadthing / UploadButton

Function UploadButton

packages/solid/src/components/button.tsx:73–311  ·  view source on GitHub ↗
(
  props: FileRouter extends TRouter
    ? ErrorMessage<"You forgot to pass the generic">
    : UploadButtonProps<TRouter, TEndpoint>,
)

Source from the content-addressed store, hash-verified

71 * />
72 */
73export function UploadButton<
74 TRouter extends FileRouter,
75 TEndpoint extends keyof TRouter,
76>(
77 props: FileRouter extends TRouter
78 ? ErrorMessage<"You forgot to pass the generic">
79 : UploadButtonProps<TRouter, TEndpoint>,
80) {
81 const $props = props as UploadButtonProps<TRouter, TEndpoint>;
82
83 const {
84 mode = "auto",
85 appendOnPaste = false,
86 cn = defaultClassListMerger,
87 } = $props.config ?? {};
88 let acRef = new AbortController();
89
90 let inputRef: HTMLInputElement;
91 const [uploadProgress, setUploadProgress] = createSignal(0);
92 const [files, setFiles] = createSignal<File[]>([]);
93
94 const uploadThing = __createUploadThingInternal(
95 resolveMaybeUrlArg($props.url),
96 $props.endpoint,
97 $props.fetch ?? globalThis.fetch,
98 {
99 signal: acRef.signal,
100 headers: $props.headers,
101 onClientUploadComplete: (res) => {
102 setFiles([]);
103 inputRef.value = "";
104 void $props.onClientUploadComplete?.(res);
105 setUploadProgress(0);
106 },
107 uploadProgressGranularity: $props.uploadProgressGranularity,
108 onUploadProgress: (p) => {
109 setUploadProgress(p);
110 $props.onUploadProgress?.(p);
111 },
112 onUploadError: $props.onUploadError,
113 onUploadBegin: $props.onUploadBegin,
114 onBeforeUploadBegin: $props.onBeforeUploadBegin,
115 },
116 );
117
118 const fileInfo = () => generatePermittedFileTypes(uploadThing.routeConfig());
119
120 const state = () => {
121 const ready = fileInfo().fileTypes.length > 0;
122
123 if ($props.disabled) return "disabled";
124 if (!ready) return "readying";
125 if (!uploadThing.isUploading()) return "ready";
126 return "uploading";
127 };
128
129 const uploadFiles = (files: File[]) => {
130 const input = "input" in $props ? $props.input : undefined;

Callers

nothing calls this directly

Calls 12

resolveMaybeUrlArgFunction · 0.90
styleFieldToClassNameFunction · 0.90
styleFieldToCssObjectFunction · 0.90
generateMimeTypesFunction · 0.90
contentFieldToContentFunction · 0.90
getButtonContentFunction · 0.85
setFilesFunction · 0.70
stateFunction · 0.70
fileInfoFunction · 0.70
uploadFilesFunction · 0.70

Tested by

no test coverage detected