From ef7bd5b848f2dbe54bf4e5bdc732bfb18475323b Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Fri, 1 May 2026 14:33:29 -0400 Subject: [PATCH] refactor(ext/popup): renderFormHeader takes options object Whole-branch review recommendation: switch renderFormHeader's signature from positional (titleText) to options ({ titleText }) so Phase 3 can add 'dirty' (and any future hooks like a save-keybinding hint) without touching all 7 call sites in lockstep with the unsaved-guard work. Co-Authored-By: Claude Opus 4.7 --- extension/src/popup/components/form-header.ts | 10 +++++++--- extension/src/popup/components/types/card.ts | 2 +- extension/src/popup/components/types/document.ts | 2 +- extension/src/popup/components/types/identity.ts | 2 +- extension/src/popup/components/types/key.ts | 2 +- extension/src/popup/components/types/login.ts | 2 +- extension/src/popup/components/types/secure-note.ts | 2 +- extension/src/popup/components/types/totp.ts | 2 +- 8 files changed, 14 insertions(+), 10 deletions(-) diff --git a/extension/src/popup/components/form-header.ts b/extension/src/popup/components/form-header.ts index 61e6f67..e3f92c2 100644 --- a/extension/src/popup/components/form-header.ts +++ b/extension/src/popup/components/form-header.ts @@ -1,17 +1,21 @@ /// Shared header chrome for typed form views (login, secure-note, identity, card, /// key, totp, document). Renders the title row plus a fullscreen-only "esc to /// cancel" subtitle. Use the existing `${...}` template-literal interpolation -/// at call sites: `${renderFormHeader('new login')}`. +/// at call sites: `${renderFormHeader({ titleText: 'new login' })}`. /// /// item-form.ts (the type-selection screen) uses a different header structure /// and does NOT consume this helper. import { isInTab } from '../../shared/state'; -export function renderFormHeader(titleText: string): string { +export interface FormHeaderOpts { + titleText: string; +} + +export function renderFormHeader(opts: FormHeaderOpts): string { return `
-
${titleText}
+
${opts.titleText}
${isInTab() ? '' : ''}
diff --git a/extension/src/popup/components/types/card.ts b/extension/src/popup/components/types/card.ts index 9f8d7c0..9413011 100644 --- a/extension/src/popup/components/types/card.ts +++ b/extension/src/popup/components/types/card.ts @@ -175,7 +175,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite app.innerHTML = `
- ${renderFormHeader(mode === 'add' ? 'new card' : 'edit card')} + ${renderFormHeader({ titleText: mode === 'add' ? 'new card' : 'edit card' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
diff --git a/extension/src/popup/components/types/document.ts b/extension/src/popup/components/types/document.ts index 3d9b850..ba4fdab 100644 --- a/extension/src/popup/components/types/document.ts +++ b/extension/src/popup/components/types/document.ts @@ -86,7 +86,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite app.innerHTML = `
- ${renderFormHeader(isEdit ? 'edit document' : 'new document')} + ${renderFormHeader({ titleText: isEdit ? 'edit document' : 'new document' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
diff --git a/extension/src/popup/components/types/identity.ts b/extension/src/popup/components/types/identity.ts index 76b3075..f9776c1 100644 --- a/extension/src/popup/components/types/identity.ts +++ b/extension/src/popup/components/types/identity.ts @@ -135,7 +135,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite app.innerHTML = `
- ${renderFormHeader(mode === 'add' ? 'new identity' : 'edit identity')} + ${renderFormHeader({ titleText: mode === 'add' ? 'new identity' : 'edit identity' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
diff --git a/extension/src/popup/components/types/key.ts b/extension/src/popup/components/types/key.ts index e5c3720..36cb3ba 100644 --- a/extension/src/popup/components/types/key.ts +++ b/extension/src/popup/components/types/key.ts @@ -124,7 +124,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite app.innerHTML = `
- ${renderFormHeader(mode === 'add' ? 'new key' : 'edit key')} + ${renderFormHeader({ titleText: mode === 'add' ? 'new key' : 'edit key' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
diff --git a/extension/src/popup/components/types/login.ts b/extension/src/popup/components/types/login.ts index 6fda287..16f2308 100644 --- a/extension/src/popup/components/types/login.ts +++ b/extension/src/popup/components/types/login.ts @@ -245,7 +245,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite app.innerHTML = `
- ${renderFormHeader(mode === 'add' ? 'new login' : 'edit login')} + ${renderFormHeader({ titleText: mode === 'add' ? 'new login' : 'edit login' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
diff --git a/extension/src/popup/components/types/secure-note.ts b/extension/src/popup/components/types/secure-note.ts index 90de1d8..ff33d4d 100644 --- a/extension/src/popup/components/types/secure-note.ts +++ b/extension/src/popup/components/types/secure-note.ts @@ -113,7 +113,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite app.innerHTML = `
- ${renderFormHeader(mode === 'add' ? 'new secure note' : 'edit secure note')} + ${renderFormHeader({ titleText: mode === 'add' ? 'new secure note' : 'edit secure note' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
diff --git a/extension/src/popup/components/types/totp.ts b/extension/src/popup/components/types/totp.ts index 531ef19..abfa6af 100644 --- a/extension/src/popup/components/types/totp.ts +++ b/extension/src/popup/components/types/totp.ts @@ -214,7 +214,7 @@ export function renderForm(app: HTMLElement, mode: 'add' | 'edit', existing: Ite const renderInner = (): string => `
- ${renderFormHeader(mode === 'add' ? 'new totp' : 'edit totp')} + ${renderFormHeader({ titleText: mode === 'add' ? 'new totp' : 'edit totp' })} ${state.error ? `
${escapeHtml(state.error)}
` : ''}