From d81b3ca8bcc55e016f8b554c794c278e0fe03ec7 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 23 Oct 2023 18:52:04 +0200 Subject: [PATCH 1/3] Add showOnFirstRequest option for startFlow --- .../src/ApprovalController.test.ts | 17 +++++++++++++++++ .../src/ApprovalController.ts | 6 ++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/approval-controller/src/ApprovalController.test.ts b/packages/approval-controller/src/ApprovalController.test.ts index 1967f46a3b..b88b2c867a 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 showOnFirstRequest is enabled', () => { + const result = approvalController.startFlow({ showOnFirstRequest: true }); + + 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..e73edd9060 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' ->; +> & { showOnFirstRequest?: boolean }; export type EndFlowOptions = Pick; @@ -768,7 +768,9 @@ export class ApprovalController extends BaseControllerV2< draftState.approvalFlows.push({ id, loadingText }); }); - this.#showApprovalRequest(); + if (!opts.showOnFirstRequest) { + this.#showApprovalRequest(); + } return { id, loadingText }; } From 269f69717682af877a9bcbaa9a18b33a7e7fb2c1 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 23 Oct 2023 19:15:41 +0200 Subject: [PATCH 2/3] Fix lint --- packages/approval-controller/src/ApprovalController.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/approval-controller/src/ApprovalController.test.ts b/packages/approval-controller/src/ApprovalController.test.ts index b88b2c867a..56e1533ee0 100644 --- a/packages/approval-controller/src/ApprovalController.test.ts +++ b/packages/approval-controller/src/ApprovalController.test.ts @@ -1236,7 +1236,7 @@ describe('approval controller', () => { expect( approvalController.state[APPROVAL_FLOWS_STORE_KEY][0], ).toStrictEqual(expectedFlow); - }) + }); }); describe('endFlow', () => { From 36141effa5db2b986ebf965275be90098643211d Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Tue, 24 Oct 2023 10:30:52 +0200 Subject: [PATCH 3/3] Rename option to show --- packages/approval-controller/src/ApprovalController.test.ts | 4 ++-- packages/approval-controller/src/ApprovalController.ts | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/approval-controller/src/ApprovalController.test.ts b/packages/approval-controller/src/ApprovalController.test.ts index 56e1533ee0..0e1be2cebf 100644 --- a/packages/approval-controller/src/ApprovalController.test.ts +++ b/packages/approval-controller/src/ApprovalController.test.ts @@ -1221,8 +1221,8 @@ describe('approval controller', () => { }, ); - it('does not call showApprovalRequest if showOnFirstRequest is enabled', () => { - const result = approvalController.startFlow({ showOnFirstRequest: true }); + it('does not call showApprovalRequest if show is false', () => { + const result = approvalController.startFlow({ show: false }); const expectedFlow = { id: expect.any(String), diff --git a/packages/approval-controller/src/ApprovalController.ts b/packages/approval-controller/src/ApprovalController.ts index e73edd9060..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' -> & { showOnFirstRequest?: boolean }; +> & { 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,8 @@ export class ApprovalController extends BaseControllerV2< draftState.approvalFlows.push({ id, loadingText }); }); - if (!opts.showOnFirstRequest) { + // By default, if nothing else is specified, we always show the approval. + if (opts.show !== false) { this.#showApprovalRequest(); }