feat(file-manager): resizable list-view columns in both panes - #1393
feat(file-manager): resizable list-view columns in both panes#1393maxser0v wants to merge 3 commits into
Conversation
ZacharyZcR
left a comment
There was a problem hiding this comment.
This PR is described as stacked on #1392, but its base is still , so GitHub presents the entire 4k-line #1392 feature again and the PR is now conflicting. Please retarget this PR to (or rebuild it so the diff contains only the resizable-columns commit), replace the references with real PR links, and resolve/rebase after #1392's blocking review changes. I will review the isolated delta once the stack is represented correctly.
Superseded because shell quoting removed branch names from the review body.
ZacharyZcR
left a comment
There was a problem hiding this comment.
This PR is described as stacked on #1392, but its base is still dev-2.8.0, so GitHub presents the entire 4k-line #1392 feature again and the PR is now conflicting. Please retarget this PR to feature/dual-pane-local-transfers (or rebuild it so the diff contains only the resizable-columns commit), replace the #TODO references with real PR links, and resolve/rebase after #1392's blocking review changes. I will review the isolated delta once the stack is represented correctly.
ec5260e to
373232a
Compare
373232a to
fe44926
Compare
…and-drop transfers (desktop)
Renderer side of the dual-pane file manager, built on the local filesystem
bridge added in the previous PR. Desktop app only; the web build is
unchanged (the toggle is hidden when `window.electronAPI.localFs` is absent).
- New Local pane (LocalFilePane) next to the remote grid, toggled from the
toolbar (Laptop icon); path, visibility and width are remembered in
localStorage (`termix:file-manager:local-pane:*`). Grid and list views,
hidden files toggle, breadcrumb navigation, New Folder.
- Drag files/folders from the Local pane onto the remote grid to upload,
and from the remote grid onto the Local pane to download. Both directions
stream through the main process (`useLocalTransfers`) with a single
progress toast per batch (speed, ETA, cancel). Finder drops onto the
remote grid keep working as before.
- Collision policy for downloads: destinations are checked first; if any
exist the user is asked Replace / Skip for the batch. Skip, dismiss and
timeout all mean skip - nothing is ever replaced without an explicit
click, and the main process enforces the same rule (`EEXIST` unless
`overwrite` is set).
- Drag MIME contract: `application/x-termix-local-files` for local drags,
`application/x-termix-remote-files` marker on the remote grid's internal
drags, so each pane can tell the two apart from Finder drops.
- Transfer targets are described as `{ origin, route, deviceId }`
(`getSessionOrigin` in main-axios) - the renderer never hands the main
process a URL.
- i18n: new `fileManager.local*` keys in en.json only (other locales via
Crowdin).
- Tests: LocalFilePane rendering/navigation, local-transfer-utils
(relative-path planning, size formatting).
Mirrors the remote grid's menu for the user's own disk. On an entry (or the current multi-selection): Open / Open folder, Upload to server, Reveal in Finder/Explorer, Rename (inline, F2), Copy Path, Move to Trash (confirmation toast, Del). On the background: New Folder, New File, Reveal, Show/Hide hidden files, Refresh (F5). Enter opens, Cmd/Ctrl+A selects all, Escape clears the selection. Deletion goes through shell.trashItem so it lands in the OS Trash and is recoverable; rename and create refuse names containing path separators and never overwrite an existing entry. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W
Drag the boundary at the left edge of a column header (Modified, Owner, Size, Permissions on the remote grid; Modified, Size, Kind in the local pane) to change its width; the Name column takes whatever is left. Double-click a handle to reset that column. Widths are remembered per pane in localStorage. Finishing a drag over a sortable header no longer toggles the sort. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W
fe44926 to
4942757
Compare
Overview
Resizable list-view columns in the remote grid and the local pane.
localStorage(useResizableColumns)Changes Made
ColumnResizeHandlecomponent anduseResizableColumnshook, with unit tests.grid-cols-[...]class to an inlinegridTemplateColumnsdriven by the hook. The compact-mode padding fromdev-2.8.0is preserved.Rebased on current
dev-2.8.0: keeps #1402'sminmax(140px, 1fr)name column so it cannot collapse on narrow viewports.Related Issues
Screenshots / Demos
Checklist