diff --git a/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx index 9232d7be..19ac89db 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx @@ -11,7 +11,7 @@ export function RevenuePage({ websiteId }: { websiteId: string }) { return ( - + ); diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx index c7e6d679..043b51f9 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx @@ -19,7 +19,7 @@ export function CohortDeleteButton({ const { formatMessage, labels } = useMessages(); const { del, useMutation } = useApi(); const { mutate, isPending, error } = useMutation({ - mutationFn: () => del(`/websites/${websiteId}/cohorts/${cohortId}`), + mutationFn: () => del(`/websites/${websiteId}/segments/${cohortId}`), }); const { touch } = useModified(); diff --git a/src/app/api/websites/[websiteId]/segments/route.ts b/src/app/api/websites/[websiteId]/segments/route.ts index ed89e55f..75d99289 100644 --- a/src/app/api/websites/[websiteId]/segments/route.ts +++ b/src/app/api/websites/[websiteId]/segments/route.ts @@ -1,6 +1,6 @@ import { canUpdateWebsite, canViewWebsite } from '@/validations'; import { uuid } from '@/lib/crypto'; -import { parseRequest } from '@/lib/request'; +import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { segmentTypeParam, searchParams } from '@/lib/schema'; import { createSegment, getWebsiteSegments } from '@/queries'; @@ -28,7 +28,9 @@ export async function GET( return unauthorized(); } - const segments = await getWebsiteSegments(websiteId, type); + const filters = await getQueryFilters(query); + + const segments = await getWebsiteSegments(websiteId, type, filters); return json(segments); } diff --git a/src/components/hooks/queries/useWebsiteCohortsQuery.ts b/src/components/hooks/queries/useWebsiteCohortsQuery.ts index d20d4465..f769df23 100644 --- a/src/components/hooks/queries/useWebsiteCohortsQuery.ts +++ b/src/components/hooks/queries/useWebsiteCohortsQuery.ts @@ -16,7 +16,7 @@ export function useWebsiteCohortsQuery( return useQuery({ queryKey: ['website:cohorts', { websiteId, modified, ...filters, ...params }], queryFn: pageParams => { - return get(`/websites/${websiteId}/cohorts`, { ...pageParams, ...filters, ...params }); + return get(`/websites/${websiteId}/segments`, { ...pageParams, ...filters, ...params }); }, enabled: !!websiteId, placeholderData: keepPreviousData, diff --git a/src/components/hooks/queries/useWebsiteSegmentsQuery.ts b/src/components/hooks/queries/useWebsiteSegmentsQuery.ts index 6b4f2bc4..4a556822 100644 --- a/src/components/hooks/queries/useWebsiteSegmentsQuery.ts +++ b/src/components/hooks/queries/useWebsiteSegmentsQuery.ts @@ -15,7 +15,8 @@ export function useWebsiteSegmentsQuery( return useQuery({ queryKey: ['website:segments', { websiteId, modified, ...filters, ...params }], - queryFn: () => get(`/websites/${websiteId}/segments`, { ...filters, ...params }), + queryFn: pageParams => + get(`/websites/${websiteId}/segments`, { ...pageParams, ...filters, ...params }), enabled: !!websiteId, placeholderData: keepPreviousData, ...options, diff --git a/src/queries/prisma/segment.ts b/src/queries/prisma/segment.ts index f4e3b355..60c64b3a 100644 --- a/src/queries/prisma/segment.ts +++ b/src/queries/prisma/segment.ts @@ -1,5 +1,6 @@ import prisma from '@/lib/prisma'; import { Prisma, Segment } from '@/generated/prisma/client'; +import { PageResult, QueryFilters } from '@/lib/types'; async function findSegment(criteria: Prisma.SegmentFindUniqueArgs): Promise { return prisma.client.Segment.findUnique(criteria); @@ -13,16 +14,45 @@ export async function getSegment(segmentId: string): Promise { }); } +export async function getSegments( + criteria: Prisma.SegmentFindManyArgs, + filters: QueryFilters, +): Promise> { + const { search } = filters; + const { getSearchParameters, pagedQuery } = prisma; + + const where: Prisma.SegmentWhereInput = { + ...criteria.where, + ...getSearchParameters(search, [ + { + name: 'contains', + }, + ]), + }; + + return pagedQuery('segment', { ...criteria, where }, filters); +} + export async function getWebsiteSegment(websiteId: string, segmentId: string): Promise { return prisma.client.Segment.findFirst({ where: { id: segmentId, websiteId }, }); } -export async function getWebsiteSegments(websiteId: string, type: string): Promise { - return prisma.pagedQuery('segment', { - where: { websiteId, type }, - }); +export async function getWebsiteSegments( + websiteId: string, + type: string, + filters?: QueryFilters, +): Promise> { + return getSegments( + { + where: { + websiteId, + type, + }, + }, + filters, + ); } export async function createSegment(data: Prisma.SegmentUncheckedCreateInput): Promise {