From c6f2adc4d9ef4313ee16f223e7e4145eecaa4102 Mon Sep 17 00:00:00 2001 From: Alex Birdsall Date: Thu, 12 Jan 2023 13:29:12 -0800 Subject: [PATCH 1/3] Add client fn for cloud free connector info API --- .../lib/domain/freeConnectorProgram/api.ts | 36 +++++++++++++++++++ .../cloud/services/freeConnectorProgram.ts | 19 ++++++++++ 2 files changed, 55 insertions(+) create mode 100644 airbyte-webapp/src/packages/cloud/lib/domain/freeConnectorProgram/api.ts create mode 100644 airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts diff --git a/airbyte-webapp/src/packages/cloud/lib/domain/freeConnectorProgram/api.ts b/airbyte-webapp/src/packages/cloud/lib/domain/freeConnectorProgram/api.ts new file mode 100644 index 0000000000000..7979a83bb592f --- /dev/null +++ b/airbyte-webapp/src/packages/cloud/lib/domain/freeConnectorProgram/api.ts @@ -0,0 +1,36 @@ +import { WorkspaceId } from "core/request/AirbyteClient"; +import { apiOverride } from "core/request/apiOverride"; + +export type WebBackendGetFreeConnectorProgramInfoForWorkspaceResult = NonNullable< + Awaited> +>; + +export interface WorkspaceIdRequestBody { + workspaceId: WorkspaceId; +} + +// eslint-disable-next-line +type SecondParameter any> = T extends (config: any, args: infer P) => any ? P : never; + +/** + * @summary Return a summary of Free Connector Program info for the indicated Cloud Workspace + */ +export const webBackendGetFreeConnectorProgramInfoForWorkspace = ( + workspaceIdRequestBody: WorkspaceIdRequestBody, + options?: SecondParameter +) => { + return apiOverride( + { + url: `/v1/web_backend/cloud_workspaces/free_connector_program_info`, + method: "post", + headers: { "Content-Type": "application/json" }, + data: workspaceIdRequestBody, + }, + options + ); +}; + +export interface WorkspaceFreeConnectorProgramInfoResponse { + hasEligibleConnector: boolean; + hasPaymentAccountSaved: boolean; +} diff --git a/airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts b/airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts new file mode 100644 index 0000000000000..a0a6e9c3e63ca --- /dev/null +++ b/airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts @@ -0,0 +1,19 @@ +import { useQuery } from "react-query"; + +import { useDefaultRequestMiddlewares } from "services/useDefaultRequestMiddlewares"; +import { useCurrentWorkspaceId } from "services/workspaces/WorkspacesService"; + +import { webBackendGetFreeConnectorProgramInfoForWorkspace } from "../lib/domain/freeConnectorProgram/api"; +import { useConfig } from "./config"; + +export const useFreeConnectorProgramInfo = () => { + const workspaceId = useCurrentWorkspaceId(); + const { cloudApiUrl } = useConfig(); + const config = { apiUrl: cloudApiUrl }; + const middlewares = useDefaultRequestMiddlewares(); + const requestOptions = { config, middlewares }; + + return useQuery(["freeConnectorProgramInfo", workspaceId], () => + webBackendGetFreeConnectorProgramInfoForWorkspace({ workspaceId }, requestOptions) + ); +}; From 541a5710a9a9147221457daa535e9afa0e9be412 Mon Sep 17 00:00:00 2001 From: Alex Birdsall Date: Mon, 16 Jan 2023 17:19:09 -0800 Subject: [PATCH 2/3] move files --- .../FreeConnectorProgram/hooks/useFreeConnectorProgram.ts} | 4 ++-- .../experiments/FreeConnectorProgram/lib}/api.ts | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename airbyte-webapp/src/packages/cloud/{services/freeConnectorProgram.ts => components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts} (89%) rename airbyte-webapp/src/packages/cloud/{lib/domain/freeConnectorProgram => components/experiments/FreeConnectorProgram/lib}/api.ts (100%) diff --git a/airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts similarity index 89% rename from airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts rename to airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts index a0a6e9c3e63ca..e854625176d0d 100644 --- a/airbyte-webapp/src/packages/cloud/services/freeConnectorProgram.ts +++ b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts @@ -1,10 +1,10 @@ import { useQuery } from "react-query"; +import { useConfig } from "packages/cloud/services/config"; import { useDefaultRequestMiddlewares } from "services/useDefaultRequestMiddlewares"; import { useCurrentWorkspaceId } from "services/workspaces/WorkspacesService"; -import { webBackendGetFreeConnectorProgramInfoForWorkspace } from "../lib/domain/freeConnectorProgram/api"; -import { useConfig } from "./config"; +import { webBackendGetFreeConnectorProgramInfoForWorkspace } from "../lib/api"; export const useFreeConnectorProgramInfo = () => { const workspaceId = useCurrentWorkspaceId(); diff --git a/airbyte-webapp/src/packages/cloud/lib/domain/freeConnectorProgram/api.ts b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/lib/api.ts similarity index 100% rename from airbyte-webapp/src/packages/cloud/lib/domain/freeConnectorProgram/api.ts rename to airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/lib/api.ts From 56e4a961a2c717e7e875459fa32a5014b1294c56 Mon Sep 17 00:00:00 2001 From: Alex Birdsall Date: Tue, 17 Jan 2023 10:03:41 -0800 Subject: [PATCH 3/3] Encapsulate showEnrollmentUi in hook, add stub needsEmailVerification --- .../hooks/useFreeConnectorProgram.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts index e854625176d0d..1d0e3933e37fe 100644 --- a/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts +++ b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts @@ -14,6 +14,14 @@ export const useFreeConnectorProgramInfo = () => { const requestOptions = { config, middlewares }; return useQuery(["freeConnectorProgramInfo", workspaceId], () => - webBackendGetFreeConnectorProgramInfoForWorkspace({ workspaceId }, requestOptions) + webBackendGetFreeConnectorProgramInfoForWorkspace({ workspaceId }, requestOptions).then( + ({ hasEligibleConnector, hasPaymentAccountSaved }) => { + const showEnrollmentUi = !hasPaymentAccountSaved && hasEligibleConnector; + // TODO hardcoding this value to allow testing while data source gets sorted out + const needsEmailVerification = false; + + return { showEnrollmentUi, needsEmailVerification }; + } + ) ); };