Commit 7e87341
feat(ui): folder picker sort/filter/create/rename and exclusions size rollups (#315)
## Summary
Closes #305, #306, #307 (v2.12.0 wave, PR3).
- **#306 destination folder picker**: client-side sort (Name asc/desc,
Modified asc/desc, default Name asc), type-to-filter (substring, current
folder only, auto-focus on open, resets on navigation), backend
pagination
verified complete on all three backends, near-fullscreen sizing (92vw x
85vh capped 1400px) in the add-source wizard modal specifically on the
destination-folder and exclusions steps.
- **#307 create/rename**: "New folder" button on every browsable backend
(Drive, S3, SFTP - reuses `ensure_folder`'s idempotent
search-then-create),
inline hover rename on Drive + SFTP (`RemoteStore::rename_folder`: Drive
is
a `files.update` name-only PATCH; SFTP does a real `RENAME` + moves the
sidecar, and can mint a new id since SFTP ids are path-derived - the UI
replaces the row by its old id with the backend's returned entry). S3
stays
on the trait's unsupported default (`BackendKind::supports_rename` =
false)
and shows a disabled control with an explanatory tooltip instead of
hiding
the affordance outright. All actions surface errors inline, next to the
control that failed - never an alert dialog.
- **#305 exclusions rollups**: the backend preview walker now streams a
per-directory file-count + byte-size rollup with each batch - a
descended
directory's rollup starts at 0 and settles upward as its subtree streams
in
(re-emitting the same row without duplicating it), a pruned excluded
directory gets its final answer immediately via one lightweight
recursive
disk count (no classification). The summary line gained an
excluded-bytes
"would be freed" stat to match the existing included-bytes one.
## Visual baselines
Not touched in this PR. Per the wave lead's sequencing note: `#311`
(bottleneck tile) and `#313` (queue nav button, which changes all 104
full-page screenshots) land first; I'll rebase and run `just
visual-update`
in a follow-up commit on this branch afterward. The one baseline my
changes
affect is `setup-wizard.spec.ts`'s `step3-source.png` (light + dark) -
the
`SetupWizard` step 3 embeds the picker's new toolbar
(sort/filter/new-folder
button).
## Test plan
- [x] `cargo test` across touched crates (`driven-remote`,
`driven-drive`,
`driven-sftp`, `driven-backend`, `driven-core`) and `src-tauri` - 447
src-tauri tests + all crate tests green, including new coverage for
rollup settling/pruning, SFTP rename (real move + sidecar + id change +
clobber refusal + same-name no-op), and the fake Drive store's rename.
- [x] `cargo clippy --all-targets` clean
(`driven-remote`/`-drive`/`-sftp`/
`-backend`/`-core` and `src-tauri`).
- [x] `cargo fmt --check` clean.
- [x] `pnpm run test:unit` - 806 vitest tests green (added ~30: picker
sort/filter/create/rename, tree rollup rendering + fill sizing, store
rollup settling).
- [x] `vue-tsc --noEmit`, `eslint .`, `prettier --check` all clean.
- [x] `just e2e-run wizard-first-run local-folder-round-trip` - both
PASS
against the real containerized app (boots into the setup wizard,
renders the picker, completes a real backup/restore round trip). Did
not run the full `just e2e` suite (expensive); these two scenarios are
the ones that exercise the wizard/picker paths this PR touches.
- [ ] Visual regression (`just visual-update`) - deferred per the
baseline
sequencing above.
## README
Updated: the live-exclusion-preview bullet now mentions the per-folder
size
rollup, and a new bullet describes the picker's
sort/filter/new-folder/rename
behavior including the S3 rename caveat.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_019xKUm9vH4ifb5LHR5szy1v
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>1 parent f951cde commit 7e87341
30 files changed
Lines changed: 2066 additions & 219 deletions
File tree
- crates
- driven-backend/src
- driven-core/src
- driven-drive
- src
- fake
- google
- tests
- driven-remote/src
- driven-sftp/src
- src-tauri/src
- commands
- ui
- src
- __tests__
- components
- ipc
- locales
- stores
- views
- test-support
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
126 | 128 | | |
127 | 129 | | |
128 | 130 | | |
| |||
200 | 202 | | |
201 | 203 | | |
202 | 204 | | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
203 | 210 | | |
204 | 211 | | |
205 | 212 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
131 | 134 | | |
132 | 135 | | |
133 | 136 | | |
| |||
142 | 145 | | |
143 | 146 | | |
144 | 147 | | |
| 148 | + | |
145 | 149 | | |
146 | 150 | | |
147 | 151 | | |
| |||
551 | 555 | | |
552 | 556 | | |
553 | 557 | | |
| 558 | + | |
554 | 559 | | |
555 | 560 | | |
556 | 561 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1266 | 1266 | | |
1267 | 1267 | | |
1268 | 1268 | | |
| 1269 | + | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
| 1274 | + | |
| 1275 | + | |
1269 | 1276 | | |
1270 | 1277 | | |
1271 | 1278 | | |
| |||
1324 | 1331 | | |
1325 | 1332 | | |
1326 | 1333 | | |
| 1334 | + | |
1327 | 1335 | | |
1328 | 1336 | | |
1329 | 1337 | | |
| |||
1386 | 1394 | | |
1387 | 1395 | | |
1388 | 1396 | | |
| 1397 | + | |
1389 | 1398 | | |
1390 | 1399 | | |
1391 | 1400 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1110 | 1110 | | |
1111 | 1111 | | |
1112 | 1112 | | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
1113 | 1141 | | |
1114 | 1142 | | |
1115 | 1143 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1108 | 1108 | | |
1109 | 1109 | | |
1110 | 1110 | | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
1111 | 1138 | | |
1112 | 1139 | | |
1113 | 1140 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1004 | 1004 | | |
1005 | 1005 | | |
1006 | 1006 | | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
| 1062 | + | |
| 1063 | + | |
| 1064 | + | |
| 1065 | + | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
125 | 152 | | |
126 | 153 | | |
127 | 154 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
294 | 294 | | |
295 | 295 | | |
296 | 296 | | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
297 | 328 | | |
298 | 329 | | |
299 | 330 | | |
| |||
0 commit comments