diff --git a/package/src/libraries/backend/routes/productRoutes.ts b/package/src/libraries/backend/routes/productRoutes.ts index 47610775..e5d1ec3d 100644 --- a/package/src/libraries/backend/routes/productRoutes.ts +++ b/package/src/libraries/backend/routes/productRoutes.ts @@ -8,12 +8,17 @@ const listProductsHandler = (options?: RouterOptions) => withAuth({ fn: async ({ autumn, customer_id, + searchParams, }: { autumn: Autumn; customer_id: string; + searchParams?: Record; }) => { + const group = searchParams?.group || undefined; + return await autumn.products.list({ customer_id, + group, }); }, requireCustomer: false, diff --git a/package/src/libraries/react/client/clientProdMethods.ts b/package/src/libraries/react/client/clientProdMethods.ts index 68e1cde9..30fa6b36 100644 --- a/package/src/libraries/react/client/clientProdMethods.ts +++ b/package/src/libraries/react/client/clientProdMethods.ts @@ -1,10 +1,13 @@ import type { AutumnPromise } from "@sdk/response"; import type { Product } from "@sdk/products/prodTypes"; import type { AutumnClient } from "./ReactAutumnClient"; +import { ListProductsParams } from "./types/clientProdTypes"; +import { buildPathWithQuery } from "@sdk/utils"; -export async function listProductsMethod(this: AutumnClient): AutumnPromise<{ +export async function listProductsMethod(this: AutumnClient, params?: ListProductsParams): AutumnPromise<{ list: Product[]; }> { - const res = await this.get(`${this.prefix}/products`); + const path = buildPathWithQuery(`${this.prefix}/products`, params); + const res = await this.get(path); return res; } diff --git a/package/src/libraries/react/client/types/clientProdTypes.ts b/package/src/libraries/react/client/types/clientProdTypes.ts index de003808..29b95957 100644 --- a/package/src/libraries/react/client/types/clientProdTypes.ts +++ b/package/src/libraries/react/client/types/clientProdTypes.ts @@ -1,3 +1,4 @@ export interface ListProductsParams { customerId?: string; + group?: string; } diff --git a/package/src/libraries/react/hooks/usePricingTable.tsx b/package/src/libraries/react/hooks/usePricingTable.tsx index f3bcac40..23fbf45b 100644 --- a/package/src/libraries/react/hooks/usePricingTable.tsx +++ b/package/src/libraries/react/hooks/usePricingTable.tsx @@ -4,6 +4,7 @@ import { AutumnContext, useAutumnContext } from "@/AutumnContext"; export const usePricingTable = (params?: { productDetails?: ProductDetails[]; + group?: string; }) => { const context = useAutumnContext({ AutumnContext, diff --git a/package/src/libraries/react/hooks/usePricingTableBase.tsx b/package/src/libraries/react/hooks/usePricingTableBase.tsx index c3915ce4..efe39518 100644 --- a/package/src/libraries/react/hooks/usePricingTableBase.tsx +++ b/package/src/libraries/react/hooks/usePricingTableBase.tsx @@ -195,11 +195,14 @@ export const usePricingTableBase = ({ client: AutumnClient | ConvexAutumnClient; params?: { productDetails?: ProductDetails[]; + group?: string; }; }): { products: Product[] | null; isLoading: boolean; error: AutumnError | undefined; refetch: () => void } => { const fetcher = async () => { try { - const { data, error } = await client.products.list(); + const { data, error } = await client.products.list({ + group: params?.group, + }); if (error) throw error; return data?.list || []; @@ -212,7 +215,7 @@ export const usePricingTableBase = ({ }; const { data, error, mutate } = useSWR( - ["pricing-table", client.backendUrl], + ["pricing-table", params?.group, client.backendUrl], fetcher, { ...defaultSWRConfig } ); diff --git a/package/src/libraries/react/hooks/useProductsBase.tsx b/package/src/libraries/react/hooks/useProductsBase.tsx index b0457f6c..dfc825a7 100644 --- a/package/src/libraries/react/hooks/useProductsBase.tsx +++ b/package/src/libraries/react/hooks/useProductsBase.tsx @@ -2,14 +2,14 @@ import { AutumnClient } from "@/client/ReactAutumnClient"; import { AutumnContext, useAutumnContext } from "../AutumnContext"; import useSWR from "swr"; -export const useProductsBase = ({ client }: { client: AutumnClient }) => { +export const useProductsBase = ({ client, group }: { client: AutumnClient, group?: string }) => { const fetcher = async () => { - const { data, error } = await client.products.list(); + const { data, error } = await client.products.list({ group }); if (error) throw error; return data?.list || []; }; - const queryKey = [`products`]; + const queryKey = [`products`, group]; const { data, error, isLoading } = useSWR(queryKey, fetcher, { refreshInterval: 0, diff --git a/package/src/sdk/products/prodTypes.ts b/package/src/sdk/products/prodTypes.ts index df497c55..a287f9f0 100644 --- a/package/src/sdk/products/prodTypes.ts +++ b/package/src/sdk/products/prodTypes.ts @@ -117,6 +117,7 @@ export interface CreateProductParams { export interface ListProductsParams { customer_id?: string; + group?: string; } export interface DeleteProductParams {