diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/(index)/page-client.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/(index)/page-client.tsx index 556e56289b1..e907915704b 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/(index)/page-client.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/customers/(index)/page-client.tsx @@ -27,7 +27,6 @@ import { getApexDomain, getPrettyUrl, } from "@dub/utils"; -import Link from "next/link"; import { useParams, useRouter } from "next/navigation"; import { useMemo } from "react"; import { usePartnerCustomerFilters } from "./use-partner-customer-filters"; @@ -132,8 +131,9 @@ export function ProgramCustomersPageClient() { accessorKey: "activity.link", cell: ({ row }) => row.original.activity.link ? ( - {getPrettyUrl(row.original.activity.link.shortLink)} - + ) : ( "-" ), diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/links/partner-link-card.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/links/partner-link-card.tsx index 5fd5129ef14..aa2bcde4361 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/links/partner-link-card.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/(enrolled)/links/partner-link-card.tsx @@ -182,7 +182,7 @@ const StatsBadge = memo(({ link }: { link: PartnerProfileLinkProps }) => { const As = showDetailedAnalytics ? Link : "div"; return ( {[ @@ -291,8 +291,7 @@ const StatsCharts = memo(({ link }: { link: PartnerProfileLinkProps }) => { key={chart.key} href={`/programs/${programEnrollment?.program.slug}/analytics${getQueryString( { - domain: link.domain, - key: link.key, + linkId: link.id, event: chart.key === "saleAmount" ? "sales" : chart.key, }, )}`} diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/page-client.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/page-client.tsx index 9117a04468a..74d46c0edf0 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/page-client.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/page-client.tsx @@ -470,8 +470,8 @@ export function ProgramPartnersApplicationsPageClient() { onRemove={onRemove} /> diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/rejected/page-client.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/rejected/page-client.tsx index a966e7fd1f6..6453ac5d754 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/rejected/page-client.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/applications/rejected/page-client.tsx @@ -413,8 +413,8 @@ export function ProgramPartnersRejectedApplicationsPageClient() { onRemove={onRemove} /> diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/partners-table.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/partners-table.tsx index ceb5c7fe8d5..5939c541d48 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/partners-table.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/partners/partners-table.tsx @@ -576,8 +576,8 @@ export function PartnersTable() { onRemove={onRemove} /> diff --git a/apps/web/lib/api/partners/get-partners-count.ts b/apps/web/lib/api/partners/get-partners-count.ts index 8260481a9f6..85962d47318 100644 --- a/apps/web/lib/api/partners/get-partners-count.ts +++ b/apps/web/lib/api/partners/get-partners-count.ts @@ -30,6 +30,7 @@ export async function getPartnersCount( : { email: { search: sanitizeFullTextSearch(search) }, name: { search: sanitizeFullTextSearch(search) }, + companyName: { search: sanitizeFullTextSearch(search) }, } : {}), ...(partnerIds && { diff --git a/apps/web/lib/api/partners/get-partners.ts b/apps/web/lib/api/partners/get-partners.ts index 0d3156d4b59..af1bb8a97b7 100644 --- a/apps/web/lib/api/partners/get-partners.ts +++ b/apps/web/lib/api/partners/get-partners.ts @@ -45,6 +45,7 @@ export async function getPartners(filters: PartnerFilters) { : { email: { search: sanitizeFullTextSearch(search) }, name: { search: sanitizeFullTextSearch(search) }, + companyName: { search: sanitizeFullTextSearch(search) }, } : {}), }, diff --git a/apps/web/scripts/programs/delete-program-enrollments.ts b/apps/web/scripts/programs/delete-program-enrollments.ts new file mode 100644 index 00000000000..9fa63740d81 --- /dev/null +++ b/apps/web/scripts/programs/delete-program-enrollments.ts @@ -0,0 +1,62 @@ +import { prisma } from "@dub/prisma"; +import "dotenv-flow/config"; +import { bulkDeleteLinks } from "../../lib/api/links/bulk-delete-links"; + +const programId = "prog_xxx"; + +async function main() { + while (true) { + const programEnrollments = await prisma.programEnrollment.findMany({ + where: { + programId, + totalLeads: 0, + }, + take: 250, + include: { + links: true, + }, + }); + + if (programEnrollments.length === 0) { + console.log("No program enrollments found"); + break; + } + + const linksToDelete = programEnrollments.flatMap(({ links }) => links); + + // in case some of the links actually do have leads + if (linksToDelete.some(({ leads }) => leads > 0)) { + console.log( + `Found links with leads: ${linksToDelete + .filter(({ leads }) => leads > 0) + .map(({ shortLink }) => shortLink) + .join(", ")}`, + ); + break; + } + + await bulkDeleteLinks(linksToDelete); + + const deleteLinkPrisma = await prisma.link.deleteMany({ + where: { + id: { + in: linksToDelete.map(({ id }) => id), + }, + }, + }); + + console.log("deleteLinkPrisma", deleteLinkPrisma); + + const deleteProgramEnrollment = await prisma.programEnrollment.deleteMany({ + where: { + id: { + in: programEnrollments.map(({ id }) => id), + }, + }, + }); + + console.log("deleteProgramEnrollment", deleteProgramEnrollment); + } +} + +main(); diff --git a/apps/web/ui/colors.ts b/apps/web/ui/colors.ts index 39780dd0147..780f4da5ac1 100644 --- a/apps/web/ui/colors.ts +++ b/apps/web/ui/colors.ts @@ -31,6 +31,11 @@ export const RESOURCE_COLORS_DATA = [ tagVariants: "bg-brown-100 text-brown-600", groupVariants: "bg-brown-600", }, + { + color: "gray", + tagVariants: "bg-gray-100 text-gray-600", + groupVariants: "bg-gray-600", + }, ] as const; export const RESOURCE_COLORS = RESOURCE_COLORS_DATA.map( diff --git a/apps/web/ui/customers/customer-activity-list.tsx b/apps/web/ui/customers/customer-activity-list.tsx index 17ef1c5245f..7166f524e52 100644 --- a/apps/web/ui/customers/customer-activity-list.tsx +++ b/apps/web/ui/customers/customer-activity-list.tsx @@ -28,7 +28,7 @@ const activityData = { diff --git a/apps/web/ui/links/link-analytics-badge.tsx b/apps/web/ui/links/link-analytics-badge.tsx index e4f26044064..b6a265095cc 100644 --- a/apps/web/ui/links/link-analytics-badge.tsx +++ b/apps/web/ui/links/link-analytics-badge.tsx @@ -86,7 +86,7 @@ export function LinkAnalyticsBadge({ return isMobile ? ( @@ -147,7 +147,7 @@ export function LinkAnalyticsBadge({ } >