1
0
mirror of https://github.com/vercel/commerce.git synced 2025-05-15 22:16:58 +00:00
Kristian Duda b94e46d796 wip
2024-06-28 07:42:33 +02:00

62 lines
1.2 KiB
TypeScript

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;
};
type Where = {
[key: string]: Where[] | WhereField;
and?: Where[];
or?: Where[];
};
export type PaginatedDocs<T> = {
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 = <T>(collection: string, params: FindParams) => {
const query = qs.stringify(params, { addQueryPrefix: true });
const url = `${process.env.CMS_URL}/api/${collection}${query}`;
return ajax<PaginatedDocs<T>>('GET', url);
};