Skip to content

feat(tabs): right-click context menu with bulk close + dirty guard#38

Merged
mertbekci merged 2 commits into
mainfrom
feat/tab-context-menu
Apr 15, 2026
Merged

feat(tabs): right-click context menu with bulk close + dirty guard#38
mertbekci merged 2 commits into
mainfrom
feat/tab-context-menu

Conversation

@mertbekci

Copy link
Copy Markdown
Member

Özet

Sekme barına VS Code paritesinde sağ-tık context menüsü eklendi ve kirli (dirty) sekmeler için koruma dialog'u devreye alındı.

Menü öğeleri

  • Close - sadece bu sekmeyi kapatır
  • Close Others - tek sekme kaldığında disabled
  • Close to the Right - en sağdaki sekmede disabled
  • Close Saved - hiç kaydedilmiş sekme yoksa disabled
  • Close All
  • Duplicate
  • Copy URL - URL boşsa disabled
  • Reveal in sidebar - yalnız kind === 'file' sekmelerinde görünür; Files sidebar'ında dosyanın atalarını açıp satırı görünüre kaydırır

Dirty guard

Kirli sekme içeren her kapatma eylemi önce ConfirmDialog üzerinden VS Code tarzı "unsaved changes" onayı ister:

  • Tek kirli sekme: '{isim}' has unsaved changes / Close / Cancel
  • Toplu: You have {N} unsaved tabs / Close {N} / Cancel

Cancel tüm batch'i iptal eder.

Store eklemeleri

  • closeOtherTabs, closeTabsToRight, closeSavedTabs, closeAllTabs - her biri kaldırılan sekmeleri closedTabStack'e iter (⌘⇧T reopen bozulmasın) ve tek set() ile commit eder
  • revealInSidebarTick / revealInSidebarPath / revealInSidebar() - mevcut focusUrlTick pattern'ini takip eder
  • Sidebar, tick değişince hedef yolun tüm atalarını açar ve satırı scrollIntoView ile görünüre çeker

Doğrulama

  • pnpm -r typecheck
  • pnpm -r test ✓ (195 passed + 7 skipped, değişmedi)
  • pnpm --filter=@scrapeman/desktop build
  • Manuel render testi için dosya yok (yeni framework eklenmedi)

Adds a VS Code-parity context menu on tab bar entries:
- Close / Close Others / Close to the Right / Close Saved / Close All
- Duplicate
- Copy URL
- Reveal in sidebar (file tabs only)

Any action that would close a dirty tab now routes through a
ConfirmDialog guard matching VS Code's "unsaved changes" prompt;
dismissing the dialog cancels the whole batch. Bulk-close store
actions push every removed tab onto closedTabStack so the existing
reopen-closed-tab shortcut keeps working across mass closes.

Reveal in sidebar reuses the existing tick-signal pattern: the
Sidebar's tree auto-expands every ancestor of the target path and
scrolls the file row into view.
@mertbekci mertbekci added the ready for review PR ready for review label Apr 15, 2026
@mertbekci mertbekci self-assigned this Apr 15, 2026
- confirmGuard explicitly clears the guard state so a stale dirtyCount
  cannot flash when the dialog reopens mid-animation
- closeOtherTabs snapshots the removed tabs only after verifying the
  kept tab exists; phantom entries no longer leak into closedTabStack
- closeOtherTabs / closeTabsToRight / closeSavedTabs / closeAllTabs push
  snapshots in reverse order so ⌘⇧T pops most-recent-first (VS Code
  parity instead of oldest-first)
- Sidebar revealSignal collapses to a useMemo — drop the mirror state
  and the companion useEffect
- TreeNode reveal effect depends on the tick + node.kind + node.relPath
  instead of the whole node reference, so unrelated parent re-renders
  no longer retrigger the scroll
@mertbekci
mertbekci merged commit 0a8780f into main Apr 15, 2026
3 checks passed
@mertbekci
mertbekci deleted the feat/tab-context-menu branch April 15, 2026 08:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready for review PR ready for review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant