Skip to content

Commit 5f84fb4

Browse files
Fix FileInputField to call onFilesChanged even when no file is selected (#664)
This is situation when user opens file selection dialog, but dismisses it by clicking on Close/Cancel button or pressing Escape key. Before this fix, state of the input was reset, but not propagated.
1 parent 14b0f38 commit 5f84fb4

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

src/components/FileInputField/FileInputField.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,15 @@ export const FileInputField = React.forwardRef((props, ref) => {
7878
const handleFileChange = (files, event) => {
7979
if (files.length === 0) {
8080
setSelectedFileNames([]);
81+
onFilesChanged([], event);
8182
return;
8283
}
8384

8485
// Mimic the native behavior of the `input` element: if multiple files are selected and the input
8586
// does not accept multiple files, no files are processed.
8687
if (files.length > 1 && !multiple) {
8788
setSelectedFileNames([]);
89+
onFilesChanged([], event);
8890
return;
8991
}
9092

src/components/FileInputField/__tests__/FileInputField.spec.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,26 @@ test.describe('FileInputField', () => {
126126
expect(called).toBe(true);
127127
});
128128

129+
test('Call onFilesChanged callback when no file is selected.', async ({ mount }) => {
130+
let called = false;
131+
let calledWith: FileList | null = null;
132+
133+
const component = await mount(
134+
<FileInputFieldForTest
135+
onFilesChanged={(files: FileList) => {
136+
called = true;
137+
calledWith = files;
138+
}}
139+
/>,
140+
);
141+
142+
const inputField = component.locator('input[type="file"]');
143+
await inputField.setInputFiles([]);
144+
145+
expect(called).toBe(true);
146+
expect(calledWith).toStrictEqual([]);
147+
});
148+
129149
test('Call onFilesChanged callback when file drag and drop into field.', async ({
130150
mount,
131151
page,

0 commit comments

Comments
 (0)