Skip to content

feat(file-manager): resizable list-view columns in both panes - #1393

Open
maxser0v wants to merge 3 commits into
Termix-SSH:dev-2.8.0from
maxser0v:feature/file-manager-resizable-columns
Open

feat(file-manager): resizable list-view columns in both panes#1393
maxser0v wants to merge 3 commits into
Termix-SSH:dev-2.8.0from
maxser0v:feature/file-manager-resizable-columns

Conversation

@maxser0v

@maxser0v maxser0v commented Sep 5, 2026

Copy link
Copy Markdown

Stacked on #1414 (→ #1413#1392). Only feat(file-manager): resizable list-view columns in both panes (373232a) is new here — please review that commit alone. Will rebase onto dev-2.8.0 once #1414 merges.

Overview

Resizable list-view columns in the remote grid and the local pane.

  • Added: 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.
  • Added: double-click a handle to reset that column
  • Added: widths are remembered per pane in localStorage (useResizableColumns)
  • Fixed: finishing a drag over a sortable header no longer toggles the sort

Changes Made

  • New ColumnResizeHandle component and useResizableColumns hook, with unit tests.
  • The list header and rows switch from a fixed grid-cols-[...] class to an inline gridTemplateColumns driven by the hook. The compact-mode padding from dev-2.8.0 is preserved.

Rebased on current dev-2.8.0: keeps #1402's minmax(140px, 1fr) name column so it cannot collapse on narrow viewports.

Related Issues

Screenshots / Demos

Screenshot 2026-09-05 at 1 29 11 PM

Checklist

  • Code follows project style guidelines
  • Supports mobile and desktop UI/app (if applicable) — list view is desktop; mobile UI unchanged
  • I have read Contributing.md
  • This is not a translation request. See docs

@ZacharyZcR ZacharyZcR left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@ZacharyZcR
ZacharyZcR dismissed their stale review September 7, 2026 01:43

Superseded because shell quoting removed branch names from the review body.

@ZacharyZcR ZacharyZcR left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Max and others added 3 commits September 9, 2026 18:58
…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
@maxser0v
maxser0v force-pushed the feature/file-manager-resizable-columns branch from fe44926 to 4942757 Compare September 9, 2026 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants