Skip to content

Commit f245163

Browse files
committed
optimize useCommissionAnalyticsFilters, rename partnerTag → partnerTagId
1 parent b101954 commit f245163

12 files changed

Lines changed: 226 additions & 175 deletions

File tree

apps/web/app/(ee)/api/commissions/analytics/route.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ export const GET = withWorkspace(async ({ workspace, searchParams }) => {
155155
return byGroupId({ programId, parsed, startDate, endDate });
156156
}
157157

158-
if (groupBy === "partnerTag") {
159-
return byPartnerTag({ programId, parsed, startDate, endDate });
158+
if (groupBy === "partnerTagId") {
159+
return byPartnerTagIdId({ programId, parsed, startDate, endDate });
160160
}
161161

162162
if (groupBy === "partnerId") {
@@ -356,7 +356,7 @@ async function byGroupId({
356356
return NextResponse.json(commissionAnalyticsSchema.groupId.parse(result));
357357
}
358358

359-
async function byPartnerTag({
359+
async function byPartnerTagIdId({
360360
programId,
361361
parsed,
362362
startDate,
@@ -384,7 +384,7 @@ async function byPartnerTag({
384384
rawTypeFilter.values.length > 0 &&
385385
validTypeValues.length === 0
386386
) {
387-
return NextResponse.json(commissionAnalyticsSchema.partnerTag.parse([]));
387+
return NextResponse.json(commissionAnalyticsSchema.partnerTagId.parse([]));
388388
}
389389

390390
const typeFilter =
@@ -457,7 +457,9 @@ async function byPartnerTag({
457457
count: Number(row.count),
458458
}));
459459

460-
return NextResponse.json(commissionAnalyticsSchema.partnerTag.parse(result));
460+
return NextResponse.json(
461+
commissionAnalyticsSchema.partnerTagId.parse(result),
462+
);
461463
}
462464

463465
async function byPartnerId({

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/analytics/applications/use-applications-analytics-filters.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
nFormatter,
1212
parseFilterValue,
1313
} from "@dub/utils";
14+
import { useParams } from "next/navigation";
1415
import { useCallback, useMemo } from "react";
1516
import { ApplicationReferralSourceIcon } from "./application-referral-source-icon";
1617
import { useApplicationsAnalytics } from "./use-applications-analytics";
@@ -20,6 +21,7 @@ const FILTER_KEYS = ["partnerId", "country", "referralSource"] as const;
2021

2122
export function useApplicationAnalyticsFilters() {
2223
const { slug } = useWorkspace();
24+
const { tab } = useParams() as { tab?: string };
2325
const { stage } = useApplicationsAnalyticsQuery();
2426
const { searchParamsObj, queryParams } = useRouterStuff();
2527

@@ -35,16 +37,19 @@ export function useApplicationAnalyticsFilters() {
3537
const { data: partners } = useApplicationsAnalytics({
3638
groupBy: "partnerId",
3739
exclude: ["partnerId"],
40+
enabled: tab === "applications",
3841
});
3942

4043
const { data: referralSources } = useApplicationsAnalytics({
4144
groupBy: "referralSource",
4245
exclude: ["referralSource"],
46+
enabled: tab === "applications",
4347
});
4448

4549
const { data: countries } = useApplicationsAnalytics({
4650
groupBy: "country",
4751
exclude: ["country"],
52+
enabled: tab === "applications",
4853
});
4954

5055
const filters = useMemo(

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/analytics/commissions-analytics-cards.tsx

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
useState,
2626
} from "react";
2727
import { CommissionStatusFilter } from "./commissions-status-selector";
28+
import { useCommissionsAnalyticsQuery } from "./use-commissions-analytics-query";
2829

2930
const STATUS_LABELS: Record<string, string> = {
3031
pending: "Pending",
@@ -40,7 +41,7 @@ const STATUS_ICONS: Record<string, React.ElementType> = {
4041
all: CircleDotted,
4142
};
4243

43-
type CommissionsBarListTab = "type" | "groupId" | "partnerTag";
44+
type CommissionsBarListTab = "type" | "groupId" | "partnerTagId";
4445

4546
function mapCommissionBarRow(
4647
item: CommissionCategoryRow,
@@ -54,7 +55,7 @@ function mapCommissionBarRow(
5455
type={item.key as "sale" | "custom" | "lead" | "click"}
5556
/>
5657
);
57-
} else if (tab === "partnerTag") {
58+
} else if (tab === "partnerTagId") {
5859
icon = <Tag className="size-4 shrink-0 text-neutral-500" />;
5960
} else {
6061
icon = (
@@ -315,22 +316,18 @@ function CommissionBarPanel<T extends string>({
315316
}
316317

317318
const LEFT_TABS: {
318-
id: "groupId" | "partnerTag";
319+
id: "groupId" | "partnerTagId";
319320
label: string;
320321
icon: React.ElementType;
321322
}[] = [
322323
{ id: "groupId", label: "Partner Group", icon: Users6 },
323-
{ id: "partnerTag", label: "Partner Tag", icon: Tag },
324+
{ id: "partnerTagId", label: "Partner Tag", icon: Tag },
324325
];
325326

326-
export function CommissionsAnalyticsCards({
327-
status,
328-
queryString,
329-
}: {
330-
status: CommissionStatusFilter;
331-
queryString: string;
332-
}) {
333-
const [leftTab, setLeftTab] = useState<"groupId" | "partnerTag">("groupId");
327+
export function CommissionsAnalyticsCards() {
328+
const { status } = useCommissionsAnalyticsQuery();
329+
330+
const [leftTab, setLeftTab] = useState<"groupId" | "partnerTagId">("groupId");
334331

335332
const groupFilter = useUrlListFilter("groupId");
336333
const partnerTagFilter = useUrlListFilter("partnerTagId");
@@ -344,17 +341,14 @@ export function CommissionsAnalyticsCards({
344341
}, [groups]);
345342

346343
const { data: groupRows, isLoading: groupLoading } = useCommissionAnalytics({
347-
queryString,
348344
groupBy: "groupId",
349345
});
350346
const { data: partnerTagRows, isLoading: partnerTagLoading } =
351347
useCommissionAnalytics({
352-
queryString,
353-
groupBy: "partnerTag",
354-
enabled: leftTab === "partnerTag",
348+
groupBy: "partnerTagId",
349+
enabled: leftTab === "partnerTagId",
355350
});
356351
const { data: typeRows, isLoading: typeLoading } = useCommissionAnalytics({
357-
queryString,
358352
groupBy: "type",
359353
});
360354

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/analytics/commissions-analytics-chart.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
XAxis,
1010
YAxis,
1111
} from "@dub/ui/charts";
12-
import { LoadingSpinner } from "@dub/ui/icons";
12+
import { LoadingSpinner, useRouterStuff } from "@dub/ui";
1313
import { currencyFormatter, nFormatter } from "@dub/utils";
1414
import { LinearGradient } from "@visx/gradient";
1515
import { useId } from "react";
@@ -48,19 +48,18 @@ const STATUS_COLORS: Record<
4848
export function CommissionsAnalyticsChart({
4949
status,
5050
unit = "earnings",
51-
queryString,
5251
interval,
5352
start,
5453
end,
5554
}: {
5655
status: CommissionStatusFilter;
5756
unit?: "earnings" | "count";
58-
queryString: string;
5957
interval?: string;
6058
start?: Date;
6159
end?: Date;
6260
}) {
6361
const id = useId();
62+
const { searchParams } = useRouterStuff();
6463
const color = STATUS_COLORS[status ?? "all"];
6564

6665
const {
@@ -69,7 +68,6 @@ export function CommissionsAnalyticsChart({
6968
error,
7069
} = useCommissionAnalytics({
7170
groupBy: "timeseries",
72-
queryString,
7371
});
7472

7573
const chartData = data?.map((d) => ({
@@ -95,7 +93,7 @@ export function CommissionsAnalyticsChart({
9593

9694
return (
9795
<TimeSeriesChart
98-
key={`${status ?? "all"}-${unit}-${queryString}`}
96+
key={`${status ?? "all"}-${unit}-${searchParams.toString()}`}
9997
data={chartData ?? []}
10098
series={[
10199
{

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/analytics/commissions-partners-table.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@ import { PartnerAnalyticsFilterCell } from "./partner-analytics-filter-cell";
1818

1919
const PAGE_SIZE = 10;
2020

21-
export function CommissionsPartnersTable({
22-
queryString,
23-
}: {
24-
queryString: string;
25-
}) {
21+
export function CommissionsPartnersTable() {
2622
const { queryParams, searchParams } = useRouterStuff();
2723
const { pagination, setPagination } = usePagination(PAGE_SIZE);
2824

@@ -77,7 +73,6 @@ export function CommissionsPartnersTable({
7773
isLoading,
7874
error,
7975
} = useCommissionAnalytics({
80-
queryString,
8176
groupBy: "partnerId",
8277
});
8378

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/analytics/page.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,13 @@ function CommissionsTab() {
5959
<CommissionsAnalyticsChart
6060
status={commissionStatus}
6161
unit={commissionUnit}
62-
queryString={commissionsQueryString}
6362
interval={commissionsInterval}
6463
start={commissionsStart}
6564
end={commissionsEnd}
6665
/>
6766
</div>
6867
</div>
69-
<CommissionsPartnersTable queryString={commissionsQueryString} />
68+
<CommissionsPartnersTable />
7069
</>
7170
);
7271
}

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/program/analytics/program-analytics-shell.tsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import {
3535
ProgramAnalyticsTabId,
3636
} from "./program-analytics-nav";
3737
import { useCommissionsAnalyticsFilters } from "./use-commissions-analytics-filters";
38-
import { useCommissionsAnalyticsQuery } from "./use-commissions-analytics-query";
3938

4039
export function ProgramAnalyticsShell({ children }: { children: ReactNode }) {
4140
const { isMobile } = useMediaQuery();
@@ -49,11 +48,7 @@ export function ProgramAnalyticsShell({ children }: { children: ReactNode }) {
4948
? (tab as ProgramAnalyticsTabId)
5049
: "performance";
5150

52-
const { queryString: commissionsQueryString, status: commissionStatus } =
53-
useCommissionsAnalyticsQuery();
54-
55-
const { stage: applicationsStage, view: applicationsView } =
56-
useApplicationsAnalyticsQuery();
51+
const { stage: applicationsStage } = useApplicationsAnalyticsQuery();
5752

5853
const { start, end, interval, selectedTab, saleUnit, view } = useMemo(() => {
5954
const { event, ...rest } = searchParamsObj;
@@ -121,7 +116,7 @@ export function ProgramAnalyticsShell({ children }: { children: ReactNode }) {
121116
onToggleOperator: commOnToggleOperator,
122117
onOpenFilter: commOnOpenFilter,
123118
setSearch: commSetSearch,
124-
} = useCommissionsAnalyticsFilters(commissionsQueryString);
119+
} = useCommissionsAnalyticsFilters();
125120

126121
const {
127122
filters: applicationsFilters,
@@ -199,7 +194,7 @@ export function ProgramAnalyticsShell({ children }: { children: ReactNode }) {
199194
<Link
200195
href={
201196
pageTab === "commissions"
202-
? `/${slug}/program/commissions${getQueryString({}, { include: ["interval", "start", "end", "partnerId", "groupId", "type"] })}`
197+
? `/${slug}/program/commissions${getQueryString({}, { include: ["interval", "start", "end", "partnerId", "groupId", "partnerTagId", "type"] })}`
203198
: pageTab === "applications"
204199
? `/${slug}/program/partners/applications`
205200
: `/${slug}/events${getQueryString({ folderId: program?.defaultFolderId, event: selectedTab, interval })}`
@@ -279,10 +274,7 @@ export function ProgramAnalyticsShell({ children }: { children: ReactNode }) {
279274
</div>
280275

281276
{pageTab === "commissions" ? (
282-
<CommissionsAnalyticsCards
283-
status={commissionStatus}
284-
queryString={commissionsQueryString}
285-
/>
277+
<CommissionsAnalyticsCards />
286278
) : pageTab === "applications" ? (
287279
<ApplicationsAnalyticsCards stage={applicationsStage} />
288280
) : (

0 commit comments

Comments
 (0)