diff --git a/packages/approval-controller/src/ApprovalController.test.ts b/packages/approval-controller/src/ApprovalController.test.ts index 1967f46a3b..0e1be2cebf 100644 --- a/packages/approval-controller/src/ApprovalController.test.ts +++ b/packages/approval-controller/src/ApprovalController.test.ts @@ -1220,6 +1220,23 @@ describe('approval controller', () => { ).toStrictEqual(expectedFlow); }, ); + + it('does not call showApprovalRequest if show is false', () => { + const result = approvalController.startFlow({ show: false }); + + const expectedFlow = { + id: expect.any(String), + loadingText: null, + }; + expect(result).toStrictEqual(expectedFlow); + expect(showApprovalRequest).toHaveBeenCalledTimes(0); + expect(approvalController.state[APPROVAL_FLOWS_STORE_KEY]).toHaveLength( + 1, + ); + expect( + approvalController.state[APPROVAL_FLOWS_STORE_KEY][0], + ).toStrictEqual(expectedFlow); + }); }); describe('endFlow', () => { diff --git a/packages/approval-controller/src/ApprovalController.ts b/packages/approval-controller/src/ApprovalController.ts index ac53772619..90994575b1 100644 --- a/packages/approval-controller/src/ApprovalController.ts +++ b/packages/approval-controller/src/ApprovalController.ts @@ -180,7 +180,7 @@ export type AcceptOptions = { export type StartFlowOptions = OptionalField< ApprovalFlow, 'id' | 'loadingText' ->; +> & { show?: boolean }; export type EndFlowOptions = Pick; @@ -758,6 +758,7 @@ export class ApprovalController extends BaseControllerV2< * @param opts - Options bag. * @param opts.id - The id of the approval flow. * @param opts.loadingText - The loading text that will be associated to the approval flow. + * @param opts.show - A flag to determine whether the approval should show to the user. * @returns The object containing the approval flow id. */ startFlow(opts: StartFlowOptions = {}): ApprovalFlowStartResult { @@ -768,7 +769,10 @@ export class ApprovalController extends BaseControllerV2< draftState.approvalFlows.push({ id, loadingText }); }); - this.#showApprovalRequest(); + // By default, if nothing else is specified, we always show the approval. + if (opts.show !== false) { + this.#showApprovalRequest(); + } return { id, loadingText }; }