diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index acda888..23891c7 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -114,6 +114,7 @@ import { projectAccountRows, resolveHistoryRetentionSelection, sortAccountRows, + formatAccountContextHeading, type AccountAddOption, type AccountRowSource, type SettingsFormViewModel, @@ -5982,8 +5983,7 @@ export function App(): ReactElement { y={accountContextMenu.y} >
- {activeAccountContextRow.hosterLabel} - {activeAccountContextRow.modeLabel} · {activeAccountContextRow.username} + {formatAccountContextHeading(activeAccountContextRow.hosterLabel, activeAccountContextRow.modeLabel)}
+ onClick={(event) => { + event.stopPropagation(); + const rect = event.currentTarget.getBoundingClientRect(); + actions.onContextMenu(row.id, rect.right, rect.bottom); + }} + onDoubleClick={(event) => event.stopPropagation()} + type="button" + >⋯
); diff --git a/src/renderer/views/settings/settings-model.ts b/src/renderer/views/settings/settings-model.ts index 0c2b8a6..a410d21 100644 --- a/src/renderer/views/settings/settings-model.ts +++ b/src/renderer/views/settings/settings-model.ts @@ -72,6 +72,10 @@ export function getAccountTableMinWidth(widths: AccountTableColumnWidths): numbe return 42 + 64 + ACCOUNT_TABLE_COLUMN_IDS.reduce((sum, id) => sum + widths[id], 0); } +export function formatAccountContextHeading(hoster: string, mode: string): string { + return `${hoster} | ${mode}`; +} + export function getSettingsSaveLabel(state: SettingsSaveState): string { switch (state) { case "dirty": diff --git a/tests/settings-view.test.tsx b/tests/settings-view.test.tsx index a4c41b6..93aed37 100644 --- a/tests/settings-view.test.tsx +++ b/tests/settings-view.test.tsx @@ -794,6 +794,7 @@ describe("account workspace", () => { checkbox.props.onChange(); row.props.onDoubleClick(); actionButton.props.onClick({ stopPropagation: () => {}, currentTarget: { getBoundingClientRect: () => ({ right: 20, bottom: 30 }) } }); + actionButton.props.onDoubleClick({ stopPropagation: () => calls.push("action-double-click-stopped") }); expect(calls).toEqual([ `select:${rowId}:false`, @@ -801,10 +802,21 @@ describe("account workspace", () => { `select:${rowId}:false`, `toggle:${rowId}`, `edit:${rowId}`, - `context:${rowId}` + `context:${rowId}`, + "action-double-click-stopped" ]); }); + it("formats the account action heading as hoster and access type without a dangling marker", () => { + const api = settingsModel as typeof settingsModel & { + formatAccountContextHeading?: (hoster: string, mode: string) => string; + }; + + expect(api.formatAccountContextHeading).toBeTypeOf("function"); + expect(api.formatAccountContextHeading?.("Debrid-Link", "API")).toBe("Debrid-Link | API"); + expect(api.formatAccountContextHeading?.("Mega-Debrid", "Web-Login")).toBe("Mega-Debrid | Web-Login"); + }); + it("shows the selected account count", () => { const model = workspaceModel(); const tree = AccountWorkspace({