import { ajax } from 'lib/shopify/ajax'; import { Config } from 'lib/shopify/payload-types'; import qs from 'qs'; type Collection = keyof Config['collections']; const OPERATORS = [ 'equals', 'contains', 'not_equals', 'in', 'all', 'not_in', 'exists', 'greater_than', 'greater_than_equal', 'less_than', 'less_than_equal', 'like', 'within', 'intersects', 'near' ] as const; type Operator = (typeof OPERATORS)[number]; type WhereField = { [key in Operator]?: unknown; }; export type Where = { [key: string]: Where[] | WhereField; and?: Where[]; or?: Where[]; }; export type PaginatedDocs = { docs: T[]; hasNextPage: boolean; hasPrevPage: boolean; limit: number; nextPage?: null | number; page?: number; pagingCounter: number; prevPage?: null | number; totalDocs: number; totalPages: number; }; type FindParams = { where?: Where; depth?: number; sort?: string; page?: number; limit?: number; }; export const find = (collection: string, params: FindParams) => { const query = qs.stringify(params, { addQueryPrefix: true }); const url = `${process.env.CMS_URL}/api/${collection}${query}`; return ajax>('GET', url); }; export const findByID = (collection: string, id: string) => { const url = `${process.env.CMS_URL}/api/${collection}/${id}`; return ajax('GET', url); }; export const create = (collection: string, body: Partial) => { const url = `${process.env.CMS_URL}/api/${collection}`; return ajax('POST', url, body); };