Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const aggregations = {
},
} as const;

// GET /api/applications/analytics
// GET /api/partners/applications/analytics
export const GET = withWorkspace(async ({ workspace, searchParams }) => {
const programId = getDefaultProgramIdOrThrow(workspace);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { parseFilterValue } from "@dub/utils";
import { NextResponse } from "next/server";
import * as z from "zod/v4";

// GET /api/applications/events – list application events
// GET /api/partners/applications/events – list application events
export const GET = withWorkspace(async ({ workspace, searchParams }) => {
const programId = getDefaultProgramIdOrThrow(workspace);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { ReferrerIcon } from "@/ui/analytics/referrer-icon";
import { Globe, Shop } from "@dub/ui/icons";

export function ApplicationReferralSourceIcon({
referralSource,
}: {
referralSource: string;
}) {
switch (referralSource) {
case "marketplace":
return <Shop />;
case "direct":
return <Globe />;
default:
return <ReferrerIcon display={referralSource} />;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,16 @@ import {
import { ApplicationEventStages } from "@/lib/types";
import { AnalyticsLoadingSpinner } from "@/ui/analytics/analytics-loading-spinner";
import { BarList } from "@/ui/analytics/bar-list";
import { ReferrerIcon } from "@/ui/analytics/referrer-icon";
import { Modal, TabSelect, useRouterStuff } from "@dub/ui";
import {
CircleCheck,
CircleDotted,
CircleHalfDottedClock,
FlagWavy,
Globe,
Shop,
} from "@dub/ui/icons";
import { cn, COUNTRIES, parseFilterValue } from "@dub/utils";
import { ReactNode, useCallback, useMemo, useState } from "react";
import { ApplicationReferralSourceIcon } from "./application-referral-source-icon";
import { useApplicationsAnalytics } from "./use-applications-analytics";

type AnalyticsTab = "referralSource" | "country";
Expand Down Expand Up @@ -255,14 +253,7 @@ export function ApplicationsAnalyticsCards({
const source = row.referralSource as string;
const value = (row?.[stageKey] as number | undefined) ?? 0;
return {
icon:
source === "marketplace" ? (
<Shop />
) : source === "direct" ? (
<Globe />
) : (
<ReferrerIcon display={source} />
),
icon: <ApplicationReferralSourceIcon referralSource={source} />,
title: getReferralSourceDisplayValue(source),
filterValue: source,
value,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export function useApplicationEvents(filters: ApplicationEventsQuery) {
);

const { data, error, isLoading } = useSWR<ApplicationEvent[]>(
workspaceId ? `/api/applications/events${queryString}` : null,
workspaceId ? `/api/partners/applications/events${queryString}` : null,
fetcher,
{
keepPreviousData: true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"use client";

import { getReferralSourceDisplayValue } from "@/lib/application-events/utils";
import useWorkspace from "@/lib/swr/use-workspace";
import { PartnerAvatar } from "@/ui/partners/partner-avatar";
import { useRouterStuff } from "@dub/ui";
Expand All @@ -11,12 +12,13 @@ import {
parseFilterValue,
} from "@dub/utils";
import { useCallback, useMemo } from "react";
import { ApplicationReferralSourceIcon } from "./application-referral-source-icon";
import { useApplicationsAnalytics } from "./use-applications-analytics";
import { useApplicationsAnalyticsQuery } from "./use-applications-analytics-query";

const FILTER_KEYS = ["partnerId", "country", "referralSource"] as const;

export function useApplicationEventsFilters() {
export function useApplicationAnalyticsFilters() {
const { slug } = useWorkspace();
const { stage } = useApplicationsAnalyticsQuery();
const { searchParamsObj, queryParams } = useRouterStuff();
Expand Down Expand Up @@ -76,7 +78,12 @@ export function useApplicationEventsFilters() {
?.filter((row) => row[stageMetricKey] > 0)
.map((row) => ({
value: row.referralSource,
label: row.referralSource,
label: getReferralSourceDisplayValue(row.referralSource),
icon: (
<ApplicationReferralSourceIcon
referralSource={row.referralSource}
/>
),
right: nFormatter(row[stageMetricKey]),
})) ?? [],
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@ interface UseApplicationsAnalyticsProps<
> extends ApplicationEventAnalyticsQuery {
groupBy: TGroupBy;
exclude?: ApplicationAnalyticsFilterKey[];
enabled?: boolean;
}

export function useApplicationsAnalytics<
TGroupBy extends keyof ApplicationAnalyticsByGroup,
>({ exclude, ...filters }: UseApplicationsAnalyticsProps<TGroupBy>) {
>({
exclude,
enabled = true,
...filters
}: UseApplicationsAnalyticsProps<TGroupBy>) {
const { id: workspaceId } = useWorkspace();
const { getQueryString } = useRouterStuff();

Expand All @@ -46,9 +51,15 @@ export function useApplicationsAnalytics<

const { data, error, isLoading } = useSWR<
ApplicationAnalyticsByGroup[TGroupBy][]
>(workspaceId ? `/api/applications/analytics${queryString}` : null, fetcher, {
keepPreviousData: true,
});
>(
workspaceId && enabled
? `/api/partners/applications/analytics${queryString}`
: null,
fetcher,
{
keepPreviousData: true,
},
);

return {
data,
Expand Down Expand Up @@ -84,9 +95,13 @@ export function useApplicationsAnalyticsCount(

const { data, error, isLoading } = useSWR<
ApplicationAnalyticsByGroup["count"]
>(workspaceId ? `/api/applications/analytics${queryString}` : null, fetcher, {
keepPreviousData: true,
});
>(
workspaceId ? `/api/partners/applications/analytics${queryString}` : null,
fetcher,
{
keepPreviousData: true,
},
);

return {
data,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { useParams } from "next/navigation";
import { ContextType, ReactNode, useMemo } from "react";
import useSWR from "swr";
import { ApplicationsAnalyticsCards } from "./applications/applications-analytics-cards";
import { useApplicationEventsFilters } from "./applications/use-applications-analytics-filters";
import { useApplicationAnalyticsFilters } from "./applications/use-applications-analytics-filters";
import { useApplicationsAnalyticsQuery } from "./applications/use-applications-analytics-query";
import { CommissionsAnalyticsCards } from "./commissions-analytics-cards";
import {
Expand Down Expand Up @@ -132,7 +132,7 @@ export function ProgramAnalyticsShell({ children }: { children: ReactNode }) {
onRemoveAll: applicationsOnRemoveAll,
onOpenFilter: applicationsOnOpenFilter,
onToggleOperator: applicationsOnToggleOperator,
} = useApplicationEventsFilters();
} = useApplicationAnalyticsFilters();

const filterSelect =
pageTab === "commissions" ? (
Expand Down
Loading
Loading