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 new file mode 100644 index 0000000000000..1d0e3933e37fe --- /dev/null +++ b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/hooks/useFreeConnectorProgram.ts @@ -0,0 +1,27 @@ +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/api"; + +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).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 }; + } + ) + ); +}; diff --git a/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/lib/api.ts b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/lib/api.ts new file mode 100644 index 0000000000000..7979a83bb592f --- /dev/null +++ b/airbyte-webapp/src/packages/cloud/components/experiments/FreeConnectorProgram/lib/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; +}