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({
}
>