Skip to content

Commit 902c31d

Browse files
refactor(OUT-3887): extract getTrigger helper in AccountSelect
Replace the let-based if/else chain for the trigger label and tone with a module-level pure helper using early returns, returning const bindings. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 47d44c6 commit 902c31d

2 files changed

Lines changed: 26 additions & 20 deletions

File tree

src/features/settings/components/AccountMapping/AccountSelect.tsx

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,23 @@ const TRIGGER_TONE_CLASS: Record<TriggerTone, string> = {
5252
muted: 'text-gray-500',
5353
}
5454

55+
// Trigger label + tone, in priority order.
56+
const getTrigger = (
57+
selectedAccount: ClientXeroAccount | undefined,
58+
hasStaleSelection: boolean,
59+
defaultIsArchived: boolean,
60+
defaultUsable: boolean,
61+
defaultDisplay: string,
62+
fieldLabel: string,
63+
): { label: string; tone: TriggerTone } => {
64+
if (selectedAccount) return { label: accountLabel(selectedAccount), tone: 'primary' }
65+
if (hasStaleSelection) return { label: 'Selected account unavailable', tone: 'danger' }
66+
if (defaultIsArchived)
67+
return { label: 'Default account unavailable — please select an account', tone: 'danger' }
68+
if (defaultUsable) return { label: `Use default account (${defaultDisplay})`, tone: 'muted' }
69+
return { label: `Please select ${fieldLabel.toLowerCase()}`, tone: 'muted' }
70+
}
71+
5572
export const AccountSelect = ({
5673
label,
5774
description,
@@ -89,25 +106,14 @@ export const AccountSelect = ({
89106
return true
90107
})
91108

92-
// Trigger label + tone, in priority order.
93-
let triggerLabel: string
94-
let triggerTone: TriggerTone
95-
if (selectedAccount) {
96-
triggerLabel = accountLabel(selectedAccount)
97-
triggerTone = 'primary'
98-
} else if (hasStaleSelection) {
99-
triggerLabel = 'Selected account unavailable'
100-
triggerTone = 'danger'
101-
} else if (defaultIsArchived) {
102-
triggerLabel = 'Default account unavailable — please select an account'
103-
triggerTone = 'danger'
104-
} else if (defaultUsable) {
105-
triggerLabel = `Use default account (${defaultDisplay})`
106-
triggerTone = 'muted'
107-
} else {
108-
triggerLabel = `Please select ${label.toLowerCase()}`
109-
triggerTone = 'muted'
110-
}
109+
const { label: triggerLabel, tone: triggerTone } = getTrigger(
110+
selectedAccount,
111+
hasStaleSelection,
112+
defaultIsArchived,
113+
defaultUsable,
114+
defaultDisplay,
115+
label,
116+
)
111117

112118
return (
113119
<div className="mb-6">

src/features/settings/components/AccountMapping/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const AccountMapping = () => {
2020

2121
// An archived default code can't be recreated, so force an explicit selection.
2222
const isDefaultArchived = (defaultCode: string | null): boolean =>
23-
defaultCode !== null && xeroAccounts.archivedAccountCodes.includes(defaultCode)
23+
!!defaultCode && xeroAccounts.archivedAccountCodes.includes(defaultCode)
2424

2525
const rows: {
2626
label: string

0 commit comments

Comments
 (0)