Refine reupload input behavior

This commit is contained in:
Sam Becker 2026-02-10 22:46:44 -06:00
parent 4c96b0c0dc
commit 3e3f163aa9
3 changed files with 22 additions and 12 deletions

View File

@ -156,7 +156,13 @@ export default function AdminPhotoMenu({
/>, />,
action: () => new Promise(resolve => { action: () => new Promise(resolve => {
onUploadFinishRef.current = resolve; onUploadFinishRef.current = resolve;
inputRef.current?.click(); if (inputRef.current) {
inputRef.current.value = '';
inputRef.current.click();
inputRef.current.oncancel = () => resolve(false);
} else {
resolve();
}
}), }),
}); });
@ -220,6 +226,7 @@ export default function AdminPhotoMenu({
}}/> }}/>
<ImageInput <ImageInput
ref={inputRef} ref={inputRef}
multiple={false}
onBlobReady={async ({ blob, extension }) => onBlobReady={async ({ blob, extension }) =>
uploadPhotoFromClient(blob, extension) uploadPhotoFromClient(blob, extension)
.then(updatedStorageUrl => .then(updatedStorageUrl =>

View File

@ -202,7 +202,8 @@ export default function AppStateProvider({
}, [router, pathname]); }, [router, pathname]);
// Returns false when upload is cancelled // Returns false when upload is cancelled
const startUpload = useCallback(() => new Promise<boolean>(resolve => { const startUpload = useCallback(() =>
new Promise<boolean>(resolve => {
if (uploadInputRef.current) { if (uploadInputRef.current) {
uploadInputRef.current.value = ''; uploadInputRef.current.value = '';
uploadInputRef.current.click(); uploadInputRef.current.click();

View File

@ -15,6 +15,7 @@ export default function ImageInput({
id = 'file', id = 'file',
onStart, onStart,
onBlobReady, onBlobReady,
multiple = true,
shouldResize, shouldResize,
maxSize = MAX_IMAGE_SIZE, maxSize = MAX_IMAGE_SIZE,
quality = 0.9, quality = 0.9,
@ -31,6 +32,7 @@ export default function ImageInput({
hasMultipleUploads?: boolean, hasMultipleUploads?: boolean,
isLastBlob?: boolean, isLastBlob?: boolean,
}) => Promise<any> }) => Promise<any>
multiple?: boolean
shouldResize?: boolean shouldResize?: boolean
maxSize?: number maxSize?: number
quality?: number quality?: number
@ -102,7 +104,7 @@ export default function ImageInput({
className="hidden!" className="hidden!"
accept={ACCEPTED_PHOTO_FILE_TYPES.join(',')} accept={ACCEPTED_PHOTO_FILE_TYPES.join(',')}
disabled={disabled} disabled={disabled}
multiple multiple={multiple}
onChange={async e => { onChange={async e => {
onStart?.(); onStart?.();
const { files } = e.currentTarget; const { files } = e.currentTarget;