Skip to content

Commit 455e965

Browse files
fix: fileUpload onRemove clashes with onChange [FC-1234] (#2464)
* chore: call onChange in case of fileupload * chore: added flushsync * chore: update file upload onRemove clashes with onchange * Update .changeset/modern-geckos-relate.md Co-authored-by: Saurabh Daware <[email protected]> * chore: add note in change log --------- Co-authored-by: Saurabh Daware <[email protected]>
1 parent 964ee14 commit 455e965

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

.changeset/modern-geckos-relate.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'@razorpay/blade': patch
3+
---
4+
5+
fix(FileUpload): fileupload on remove clashes with onchage
6+
7+
> [!NOTE]
8+
>
9+
> Previously, onChange did not provide an updated value when a file was removed. Now, when a file is removed from FileUpload, onChange will return the updated value.

packages/blade/src/components/FileUpload/FileUpload.web.tsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useState, useCallback, useMemo, useRef, forwardRef } from 'react';
2+
import { flushSync } from 'react-dom';
23
import type { FileUploadProps, BladeFile, BladeFileList } from './types';
34
import { StyledFileUploadWrapper } from './StyledFileUploadWrapper';
45
import {
@@ -312,7 +313,9 @@ const _FileUpload: React.ForwardRefRenderFunction<BladeElementRef, FileUploadPro
312313
size={size}
313314
onRemove={() => {
314315
const newFiles = selectedFiles.filter(({ id }) => id !== selectedFiles[0].id);
315-
setSelectedFiles(() => newFiles);
316+
flushSync(() => {
317+
setSelectedFiles(() => newFiles);
318+
});
316319
onRemove?.({ file: selectedFiles[0] });
317320
fireNativeEvent(inputRef, ['change', 'input']);
318321
}}
@@ -374,7 +377,9 @@ const _FileUpload: React.ForwardRefRenderFunction<BladeElementRef, FileUploadPro
374377
size={size}
375378
onRemove={() => {
376379
const newFiles = selectedFiles.filter(({ id }) => id !== file.id);
377-
setSelectedFiles(() => newFiles);
380+
flushSync(() => {
381+
setSelectedFiles(() => newFiles);
382+
});
378383
onRemove?.({ file });
379384
fireNativeEvent(inputRef, ['change', 'input']);
380385
}}

0 commit comments

Comments
 (0)