Skip to content

Commit 0f10499

Browse files
committed
Improve markApplicationEventSubmitted
1 parent 8c854a4 commit 0f10499

5 files changed

Lines changed: 59 additions & 32 deletions

File tree

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/page-client.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { useBulkRejectPartnersModal } from "@/ui/modals/bulk-reject-partners-mod
1313
import { useRejectPartnerApplicationModal } from "@/ui/modals/reject-partner-application-modal";
1414
import { GroupColorCircle } from "@/ui/partners/groups/group-color-circle";
1515
import { PartnerApplicationSheet } from "@/ui/partners/partner-application-sheet";
16+
import { PartnerApplicationSource } from "@/ui/partners/partner-application-source";
1617
import { PartnerRowItem } from "@/ui/partners/partner-row-item";
1718
import { PartnerSocialColumn } from "@/ui/partners/partner-social-column";
1819
import { AnimatedEmptyState } from "@/ui/shared/animated-empty-state";
@@ -196,17 +197,16 @@ export function ProgramPartnersApplicationsPageClient() {
196197
header: "Applied",
197198
accessorFn: (d) => formatDate(d.createdAt, { month: "short" }),
198199
},
199-
// TODO: add source column back once we fix application source display
200-
// {
201-
// id: "source",
202-
// header: "Source",
203-
// minSize: 170,
204-
// cell: ({ row }) => (
205-
// <PartnerApplicationSource
206-
// referralSource={row.original.applicationEvent?.referralSource}
207-
// />
208-
// ),
209-
// },
200+
{
201+
id: "source",
202+
header: "Source",
203+
minSize: 170,
204+
cell: ({ row }) => (
205+
<PartnerApplicationSource
206+
referralSource={row.original.applicationEvent?.referralSource}
207+
/>
208+
),
209+
},
210210
{
211211
id: "group",
212212
header: "Group",

apps/web/lib/actions/partners/create-program-application.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,9 @@ async function createApplicationAndEnrollment({
381381
},
382382
}),
383383

384-
markApplicationEventSubmitted(programEnrollment),
384+
markApplicationEventSubmitted(programEnrollment, {
385+
partnerNetworkStatus: partner.networkStatus,
386+
}),
385387
]);
386388
})(),
387389
);

apps/web/lib/application-events/update-application-event.ts

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { prisma } from "@dub/prisma";
2-
import { Prisma } from "@dub/prisma/client";
2+
import { PartnerNetworkStatus, Prisma } from "@dub/prisma/client";
33
import { cookies } from "next/headers";
44
import { getApplicationEventCookieName } from "./utils";
55

66
// Application events visited as a guest have partnerId: null — look up the
77
// event via the browser cookie and backfill partnerId + submittedAt.
88
// Fallback to the (programId, partnerId) lookup if no cookie is present (e.g. the
99
// partner visited while already logged in on a different browser).
10-
export async function markApplicationEventSubmitted({
11-
programId,
12-
partnerId,
13-
applicationId,
14-
}: Pick<
15-
Prisma.ProgramEnrollmentCreateManyInput,
16-
"programId" | "partnerId" | "applicationId"
17-
>) {
10+
export async function markApplicationEventSubmitted(
11+
programEnrollment: Pick<
12+
Prisma.ProgramEnrollmentCreateManyInput,
13+
"programId" | "partnerId" | "applicationId"
14+
>,
15+
{ partnerNetworkStatus }: { partnerNetworkStatus: PartnerNetworkStatus },
16+
) {
17+
const { programId, partnerId, applicationId } = programEnrollment;
1818
const cookieStore = await cookies();
1919
const cookieName = getApplicationEventCookieName(programId);
2020
const applicationEventId = cookieStore.get(cookieName)?.value;
@@ -25,21 +25,44 @@ export async function markApplicationEventSubmitted({
2525
return;
2626
}
2727

28+
const applicationEvent = await prisma.programApplicationEvent.findUnique({
29+
where: {
30+
...(applicationEventId
31+
? { id: applicationEventId }
32+
: { programId_partnerId: { programId, partnerId } }),
33+
},
34+
});
35+
36+
if (!applicationEvent) {
37+
console.error(
38+
"[markApplicationEventSubmitted]: No application event found, skipping...",
39+
);
40+
return;
41+
}
42+
2843
try {
29-
await prisma.programApplicationEvent.updateMany({
44+
await prisma.programApplicationEvent.update({
3045
where: {
31-
...(applicationEventId
32-
? { id: applicationEventId }
33-
: { programId, partnerId }),
34-
submittedAt: null,
46+
id: applicationEvent.id,
3547
},
3648
data: {
37-
partnerId,
3849
submittedAt: new Date(),
50+
partnerId,
3951
programApplicationId: applicationId,
52+
...(applicationEvent.referralSource === "marketplace" &&
53+
!["approved", "trusted"].includes(partnerNetworkStatus)
54+
? {
55+
referralSource: "direct",
56+
}
57+
: {}),
4058
},
4159
});
42-
} catch {}
60+
} catch (error) {
61+
console.error(
62+
"[markApplicationEventSubmitted]: Error updating application event:",
63+
error,
64+
);
65+
}
4366
}
4467

4568
export async function trackApplicationEvents({

apps/web/lib/partners/complete-program-applications.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,9 @@ export async function completeProgramApplications(userEmail: string) {
260260

261261
await Promise.allSettled(
262262
programEnrollments.map((programEnrollment) =>
263-
markApplicationEventSubmitted(programEnrollment),
263+
markApplicationEventSubmitted(programEnrollment, {
264+
partnerNetworkStatus: partner.networkStatus,
265+
}),
264266
),
265267
);
266268
} catch (error) {

apps/web/ui/partners/partner-info-cards.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import {
4545
PartnerFraudBanner,
4646
} from "./fraud-risks/partner-fraud-banner";
4747
import { PartnerFraudIndicator } from "./fraud-risks/partner-fraud-indicator";
48+
import { PartnerApplicationSource } from "./partner-application-source";
4849
import { PartnerAvatar } from "./partner-avatar";
4950
import { PartnerInfoGroup } from "./partner-info-group";
5051
import { PartnerStarButton } from "./partner-star-button";
@@ -175,16 +176,15 @@ export function PartnerInfoCards({
175176
>
176177
<span>Applied {formatDate(partner.createdAt)}</span>
177178
</TimestampTooltip>
178-
{/* TODO: add source column back once we fix application source display */}
179-
{/* {applicationReferralSource && (
179+
{applicationReferralSource && (
180180
<>
181181
<span>via</span>
182182
<PartnerApplicationSource
183183
referralSource={applicationReferralSource}
184184
variant="inline"
185185
/>
186186
</>
187-
)} */}
187+
)}
188188
</span>
189189
) : (
190190
`${isPendingApplication ? "Applied" : "Partner since"} ${formatDate(partner.createdAt)}`

0 commit comments

Comments
 (0)