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 => {
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
ref={inputRef}
multiple={false}
onBlobReady={async ({ blob, extension }) =>
uploadPhotoFromClient(blob, extension)
.then(updatedStorageUrl =>

View File

@ -202,16 +202,17 @@ export default function AppStateProvider({
}, [router, pathname]);
// Returns false when upload is cancelled
const startUpload = useCallback(() => new Promise<boolean>(resolve => {
if (uploadInputRef.current) {
uploadInputRef.current.value = '';
uploadInputRef.current.click();
uploadInputRef.current.oninput = () => resolve(true);
uploadInputRef.current.oncancel = () => resolve(false);
} else {
resolve(false);
}
})
const startUpload = useCallback(() =>
new Promise<boolean>(resolve => {
if (uploadInputRef.current) {
uploadInputRef.current.value = '';
uploadInputRef.current.click();
uploadInputRef.current.oninput = () => resolve(true);
uploadInputRef.current.oncancel = () => resolve(false);
} else {
resolve(false);
}
})
, []);
const setUploadState = useCallback((uploadState: Partial<UploadState>) => {
_setUploadState(prev => ({ ...prev, ...uploadState }));

View File

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