Skip to content

Commit e02a235

Browse files
feat(OUT-3617): hide bank-deposit settings UI when the AB gate is off
Read bankDepositEnabled from the settings GET, thread it through the accordion into InvoiceDetail to hide the checkbox + bank-account dropdown, and skip the bank-account fetch entirely for gated-off portals. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 0ff0907 commit e02a235

3 files changed

Lines changed: 51 additions & 38 deletions

File tree

src/components/dashboard/settings/SettingAccordion.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export default function SettingAccordion({
4444
isLoading,
4545
changeSettings,
4646
showButton: showInvoiceButton,
47+
bankDepositEnabled,
4748
bankAccountOptions,
4849
bankAccountsError,
4950
canSave,
@@ -93,6 +94,7 @@ export default function SettingAccordion({
9394
settingState={settingState}
9495
changeSettings={changeSettings}
9596
isLoading={isLoading}
97+
bankDepositEnabled={bankDepositEnabled}
9698
bankAccountOptions={bankAccountOptions}
9799
bankAccountsError={bankAccountsError}
98100
/>

src/components/dashboard/settings/sections/invoice/InvoiceDetail.tsx

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type InvoiceDetailProps = {
1111
value: InvoiceSettingType[K],
1212
) => void
1313
isLoading: boolean
14+
bankDepositEnabled: boolean
1415
bankAccountOptions: AccountOption[] | undefined
1516
bankAccountsError: unknown
1617
}
@@ -19,6 +20,7 @@ export default function InvoiceDetail({
1920
settingState,
2021
changeSettings,
2122
isLoading,
23+
bankDepositEnabled,
2224
bankAccountOptions,
2325
bankAccountsError,
2426
}: InvoiceDetailProps) {
@@ -41,44 +43,49 @@ export default function InvoiceDetail({
4143
}
4244
/>
4345
</div>
44-
<div className="mb-5">
45-
<Checkbox
46-
label="Create bank deposits for automatic bank reconciliation"
47-
description="When Stripe pays out, create a QuickBooks bank deposit that matches the net amount deposited to your bank (after fees), so the bank transaction matches automatically."
48-
checked={settingState.bankDepositFeeFlag}
49-
onChange={() =>
50-
changeSettings(
51-
'bankDepositFeeFlag',
52-
!settingState.bankDepositFeeFlag,
53-
)
54-
}
55-
/>
56-
</div>
57-
{settingState.bankDepositFeeFlag && (
58-
<div className="mb-5 ml-6">
59-
{bankAccountsError ? (
60-
<p className="text-xs text-red-600">
61-
Could not load bank accounts. Reload to retry.
62-
</p>
63-
) : (
64-
<>
65-
<AccountSelect
66-
label="Deposit bank account"
67-
description="The bank account Stripe payouts are deposited into. Used to create the matching QuickBooks bank deposit."
68-
value={settingState.bankAccountRef ?? ''}
69-
options={bankAccountOptions}
70-
placeholder="Select a deposit bank account"
71-
onChange={(id) => changeSettings('bankAccountRef', id)}
72-
/>
73-
{bankAccountOptions !== undefined &&
74-
!settingState.bankAccountRef && (
75-
<p className="text-xs text-red-600">
76-
Select a deposit bank account to enable bank deposits.
77-
</p>
78-
)}
79-
</>
46+
{/* Bank deposit UI is gated behind the AB rollout allowlist. */}
47+
{bankDepositEnabled && (
48+
<>
49+
<div className="mb-5">
50+
<Checkbox
51+
label="Create bank deposits for automatic bank reconciliation"
52+
description="When Stripe pays out, create a QuickBooks bank deposit that matches the net amount deposited to your bank (after fees), so the bank transaction matches automatically."
53+
checked={settingState.bankDepositFeeFlag}
54+
onChange={() =>
55+
changeSettings(
56+
'bankDepositFeeFlag',
57+
!settingState.bankDepositFeeFlag,
58+
)
59+
}
60+
/>
61+
</div>
62+
{settingState.bankDepositFeeFlag && (
63+
<div className="mb-5 ml-6">
64+
{bankAccountsError ? (
65+
<p className="text-xs text-red-600">
66+
Could not load bank accounts. Reload to retry.
67+
</p>
68+
) : (
69+
<>
70+
<AccountSelect
71+
label="Deposit bank account"
72+
description="The bank account Stripe payouts are deposited into. Used to create the matching QuickBooks bank deposit."
73+
value={settingState.bankAccountRef ?? ''}
74+
options={bankAccountOptions}
75+
placeholder="Select a deposit bank account"
76+
onChange={(id) => changeSettings('bankAccountRef', id)}
77+
/>
78+
{bankAccountOptions !== undefined &&
79+
!settingState.bankAccountRef && (
80+
<p className="text-xs text-red-600">
81+
Select a deposit bank account to enable bank deposits.
82+
</p>
83+
)}
84+
</>
85+
)}
86+
</div>
8087
)}
81-
</div>
88+
</>
8289
)}
8390
<div className="mb-6">
8491
<Checkbox

src/hook/useSettings.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,10 +452,13 @@ export const useInvoiceDetailSettings = () => {
452452
isLoading,
453453
} = useSwrHelper(`/api/quickbooks/setting?type=invoice&token=${token}`)
454454

455+
// AB gate from the settings GET; hides the bank deposit UI when off.
456+
const bankDepositEnabled = setting?.bankDepositEnabled ?? false
457+
455458
const { data: bankAccountsData, error: bankAccountsError } = useSwrHelper<{
456459
accounts: { Id: string; Name: string }[]
457460
}>(
458-
isDisconnected
461+
isDisconnected || !bankDepositEnabled
459462
? null
460463
: `/api/quickbooks/setting/bank-account?token=${token}`,
461464
{ suspense: false, revalidateOnMount: true },
@@ -550,6 +553,7 @@ export const useInvoiceDetailSettings = () => {
550553
error,
551554
isLoading,
552555
showButton,
556+
bankDepositEnabled,
553557
bankAccountOptions,
554558
bankAccountsError,
555559
canSave,

0 commit comments

Comments
 (0)