diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index e559044..8033ce3 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -4804,21 +4804,23 @@ export function App(): ReactElement { } }), [actionBusy, columnOrder, downloadDisclosureRevision, downloadPackageSpeeds, downloadQueueTotalBytes, downloadRemaining, downloadsSortColumn, downloadsSortDescending, downloadsViewCore, editingName, editingPackageId, gridTemplate, liveDownloadSpeedBps, providerStats.length, scheduleCountdown, schedulePickerOpen, scheduleTimeInput, snapshot.canPause, snapshot.canStart, snapshot.canStop, snapshot.clipboardActive, snapshot.etaText, snapshot.reconnectSeconds, snapshot.session.items, snapshot.session.paused, snapshot.session.reconnectReason, snapshot.session.running, snapshot.settings.animatePackageDisclosure, snapshot.settings.scheduledStartEpochMs, snapshot.stats.totalDownloaded, snapshot.stats.totalPackages]); + const resetColumnLayout = useCallback((): void => { + if (columnDragSettleTimerRef.current !== null) { + window.clearTimeout(columnDragSettleTimerRef.current); + columnDragSettleTimerRef.current = null; + } + cancelColumnDragAnimations(); + if (columnDragSessionRef.current) { + clearDownloadColumnDrag(columnDragSessionRef.current); + columnDragSessionRef.current = null; + } + setColumnOrder(DEFAULT_COLUMN_ORDER); + persistColumnOrder(DEFAULT_COLUMN_ORDER); + showToast("Spaltenlayout zurückgesetzt", 1800); + }, [cancelColumnDragAnimations, persistColumnOrder, showToast]); + const downloadsActions: DownloadsViewActions = { - onResetColumnLayout: () => { - if (columnDragSettleTimerRef.current !== null) { - window.clearTimeout(columnDragSettleTimerRef.current); - columnDragSettleTimerRef.current = null; - } - cancelColumnDragAnimations(); - if (columnDragSessionRef.current) { - clearDownloadColumnDrag(columnDragSessionRef.current); - columnDragSessionRef.current = null; - } - setColumnOrder(DEFAULT_COLUMN_ORDER); - persistColumnOrder(DEFAULT_COLUMN_ORDER); - showToast("Spaltenlayout zurückgesetzt", 1800); - }, + onResetColumnLayout: resetColumnLayout, onDisplayModeChange: setDownloadDisplayMode, onFilterChange: setDownloadFilter, onProviderFilterChange: setDownloadProviderFilter, @@ -6449,7 +6451,7 @@ export function App(): ReactElement { x={colHeaderCtx.x} y={colHeaderCtx.y} > - {ALL_COLUMN_KEYS.map((col) => { + {ALL_COLUMN_KEYS.map((col) => { const def = COLUMN_DEFS[col]; if (!def) return null; const isVisible = columnOrder.includes(col); @@ -6482,8 +6484,13 @@ export function App(): ReactElement { > {isVisible ? "\u2713 " : "\u2003 "}{def.label} - ); - })} + ); + })} +
+ ) : null} historyContextMenu={historyCtxMenu ? (() => { diff --git a/tests/app-shell.test.tsx b/tests/app-shell.test.tsx index e763867..3b9f8ea 100644 --- a/tests/app-shell.test.tsx +++ b/tests/app-shell.test.tsx @@ -85,12 +85,17 @@ describe("desktop shell", () => { it("resets the download columns immediately and persists the default order", () => { const source = readFileSync(new URL("../src/renderer/App.tsx", import.meta.url), "utf8"); + const reset = source.slice(source.indexOf("const resetColumnLayout"), source.indexOf("const downloadsActions")); const actions = source.slice(source.indexOf("const downloadsActions"), source.indexOf("const statisticsActions")); + const menu = source.slice(source.indexOf("columnContextMenu={"), source.indexOf("historyContextMenu={")); - expect(actions).toContain("onResetColumnLayout"); - expect(actions).toContain("setColumnOrder(DEFAULT_COLUMN_ORDER)"); - expect(actions).toContain("persistColumnOrder(DEFAULT_COLUMN_ORDER)"); - expect(actions).toContain('showToast("Spaltenlayout zurückgesetzt"'); + expect(reset).toContain("setColumnOrder(DEFAULT_COLUMN_ORDER)"); + expect(reset).toContain("persistColumnOrder(DEFAULT_COLUMN_ORDER)"); + expect(reset).toContain('showToast("Spaltenlayout zurückgesetzt"'); + expect(actions).toContain("onResetColumnLayout: resetColumnLayout"); + expect(menu).toContain("Spaltenlayout zurücksetzen"); + expect(menu).toContain("resetColumnLayout()"); + expect(menu).toContain("setColHeaderCtx(null)"); }); it("keeps application menus mounted for animated opening and closing", () => {