diff --git a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/overview/page-client.tsx b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/overview/page-client.tsx index 3d3d782389d..e326fa5f29a 100644 --- a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/overview/page-client.tsx +++ b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/overview/page-client.tsx @@ -47,10 +47,11 @@ export function PageClient() { domain, logo, programType, - rewardful, type, amount, + rewardful, tolt, + partnerstack, } = data; if (!name || !url || !domain || !logo) { @@ -61,7 +62,7 @@ export function PageClient() { return false; } - if (programType === "import" && !rewardful && !tolt) { + if (programType === "import" && !rewardful && !tolt && !partnerstack) { return false; } diff --git a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/form.tsx b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/form.tsx index 53ea26b61f4..553b393b806 100644 --- a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/form.tsx +++ b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/form.tsx @@ -152,6 +152,8 @@ export function Form() { case "partnerstack": return ( onSubmit(getValues())} isPending={isPendingAction} /> diff --git a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/import-partnerstack-form.tsx b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/import-partnerstack-form.tsx index b34cdec2adf..b38199581bc 100644 --- a/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/import-partnerstack-form.tsx +++ b/apps/web/app/(ee)/app.dub.co/(new-program)/[slug]/program/new/rewards/import-partnerstack-form.tsx @@ -2,16 +2,22 @@ import { setPartnerStackTokenAction } from "@/lib/actions/partners/set-partnerstack-token"; import useWorkspace from "@/lib/swr/use-workspace"; +import { ProgramData } from "@/lib/types"; import { Button, Input } from "@dub/ui"; import { useAction } from "next-safe-action/hooks"; import Link from "next/link"; import { useState } from "react"; +import { UseFormSetValue, UseFormWatch } from "react-hook-form"; import { toast } from "sonner"; export const ImportPartnerStackForm = ({ + watch, + setValue, onSuccess, isPending, }: { + watch: UseFormWatch; + setValue: UseFormSetValue; onSuccess: () => void; isPending: boolean; }) => { @@ -19,10 +25,16 @@ export const ImportPartnerStackForm = ({ const [publicKey, setPublicKey] = useState(""); const [secretKey, setSecretKey] = useState(""); + const partnerStack = watch("partnerstack"); + const { executeAsync, isPending: isSettingPartnerStackToken } = useAction( setPartnerStackTokenAction, { - onSuccess: () => { + onSuccess: ({ data }) => { + setValue("partnerstack", { + publicKey: data?.publicKey, + maskedSecretKey: data?.maskedSecretKey, + }); onSuccess(); toast.success("PartnerStack credentials saved successfully!"); }, @@ -55,7 +67,7 @@ export const ImportPartnerStackForm = ({ type="password" placeholder="Public key" className="mt-2 max-w-full" - value={publicKey} + value={publicKey || partnerStack?.publicKey || ""} onChange={(e) => setPublicKey(e.target.value)} />
@@ -79,7 +91,7 @@ export const ImportPartnerStackForm = ({ type="password" placeholder="Secret key" className="mt-2 max-w-full" - value={secretKey} + value={secretKey || partnerStack?.maskedSecretKey || ""} onChange={(e) => setSecretKey(e.target.value)} />
diff --git a/apps/web/lib/actions/partners/set-partnerstack-token.ts b/apps/web/lib/actions/partners/set-partnerstack-token.ts index 56999faae6d..d05f54568bb 100644 --- a/apps/web/lib/actions/partners/set-partnerstack-token.ts +++ b/apps/web/lib/actions/partners/set-partnerstack-token.ts @@ -27,4 +27,9 @@ export const setPartnerStackTokenAction = authActionClient publicKey, secretKey, }); + + return { + publicKey, + maskedSecretKey: secretKey.slice(0, 3) + "*".repeat(secretKey.length - 3), + }; }); diff --git a/apps/web/lib/zod/schemas/program-onboarding.ts b/apps/web/lib/zod/schemas/program-onboarding.ts index 3c968ecd8d5..35202a1ac09 100644 --- a/apps/web/lib/zod/schemas/program-onboarding.ts +++ b/apps/web/lib/zod/schemas/program-onboarding.ts @@ -35,6 +35,12 @@ export const programRewardSchema = z id: z.string(), affiliates: z.number(), }).nullish(), + partnerstack: z + .object({ + publicKey: z.string().nullish(), + maskedSecretKey: z.string().nullish(), + }) + .nullish(), }) .merge( z.object({