The GitHub Actions job "Required Checks" on texera.git/main has failed. Run started by GitHub user github-merge-queue[bot] (triggered by github-merge-queue[bot]).
Head commit for run: dcb25efa9e1d4321b7b99459db4ee777f37cbaff / Tanishq Gandhi <[email protected]> feat(frontend): add a folder option to the upload panel's file picker (#8428) ### What changes were proposed in this PR? The upload panel on a dataset's or model's **Versions & Files** tab said *"Drag & drop file/folder to upload"*, and dragging a folder did work — but the button beside it could only pick files. Uploading a folder was possible only by dragging one in, which rules out a maximised window, a laptop with nothing to drag from, and keyboard use. The panel now offers **Upload Files** and **Upload Folder**. Two buttons rather than one, because a file input cannot do both: a folder can only be chosen when the input carries `webkitdirectory`, and that attribute *switches the dialog's mode* rather than widening it — with it the OS dialog picks only directories, without it only files. Drag & drop can accept either because it is a different API: a drop carries entries that report `isFile`/`isDirectory`, while an input hands back a flat `FileList`. Google Drive, Dropbox and OneDrive all split the same choice in two. The panel keeps one hidden input per mode and both buttons feed the same handler. `fileDropped`'s tail — size limits, conflict resolution, existing-file skipping, the banner — is now a shared `addSelection`, so both routes behave identically. **Before** — one button, files only: <img width="368" height="167" alt="issue7-1-upload-panel-before" src="https://github.com/user-attachments/assets/a6f0a743-0c2b-4adc-bb35-88be8fb05db9" /> **After** — the folder route is reachable without dragging: <img width="368" height="167" alt="issue7-1-upload-panel-after" src="https://github.com/user-attachments/assets/eee6a5be-0368-46dc-ac0b-42e8abf2fad5" /> https://github.com/user-attachments/assets/93fe4a26-1a1d-45d0-92ca-27febdd75dd2 ### Any related issues, documentation, discussions? Closes #8387. ### How was this PR tested? `files-uploader.component.spec.ts` and `version-uploader.component.spec.ts`, 108 passed. Four new cases: - one picker per mode, asserting only the folder input carries `webkitdirectory` - each button opens its own picker, and not the other - **a picked folder keeps its structure** — `readings/2026/a.csv` rather than `a.csv` - a picked loose file uses its bare name, which is what it carries One existing case, `opens the file selector from the drop-zone button`, asserted the button clicked `ngx-file-drop`'s hidden input. That input is no longer the picker, so it is replaced by the two cases above. ``` cd frontend npx ng test --include src/app/dashboard/component/user/files-uploader/files-uploader.component.spec.ts \ --include src/app/dashboard/component/user/version-uploader/version-uploader.component.spec.ts ``` Checked end-to-end against a local stack by picking a real folder through the new button: ``` readings/ ├── notes.md └── 2026/{a.csv,b.csv} staged -> readings/notes.md, readings/2026/a.csv, readings/2026/b.csv ``` Full relative paths, nested folder included — identical to dropping the same folder in. ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Opus 5) Report URL: https://github.com/apache/texera/actions/runs/33915986556 With regards, GitHub Actions via GitBox
