import { BaseRecord, MetaDataQuery } from "../../interfaces"; export interface Pagination { current?: number; pageSize?: number; } export interface Search { field?: string; value?: string; } // Filters are used as a suffix of a field name: // | Filter | Description | // | ------------------- | ------------------------------ | // | `eq` | Equal | // | ne | Not equal | // | lt | Less than | // | gt | Greater than | // | lte | Less than or equal to | // | gte | Greater than or equal to | // | in | Included in an array | // | nin | Not included in an array | // | contains | Contains | // | ncontains | Doesn't contain | // | containss | Contains, case sensitive | // | ncontainss | Doesn't contain, case sensitive| // | null | Is null or not null | export type CrudOperators = | "eq" | "ne" | "lt" | "gt" | "lte" | "gte" | "in" | "nin" | "contains" | "ncontains" | "containss" | "ncontainss" | "null"; export type CrudFilter = { field: string; operator: CrudOperators; value: any; }; export type CrudSort = { field: string; order: "asc" | "desc"; }; export type CrudFilters = CrudFilter[]; export type CrudSorting = CrudSort[]; export interface CustomResponse { data: TData; } export interface GetListResponse { data: TData[]; total: number; } export interface CreateResponse { data: TData; } export interface CreateManyResponse { data: TData[]; } export interface UpdateResponse { data: TData; } export interface UpdateManyResponse { data: TData[]; } export interface GetOneResponse { data: TData; } export interface GetManyResponse { data: TData[]; } export interface DeleteOneResponse { data: TData; } export interface DeleteManyResponse { data: TData[]; } export interface IDataContext { getList: (params: { resource: string; pagination?: Pagination; sort?: CrudSorting; filters?: CrudFilters; metaData?: MetaDataQuery; }) => Promise>; getMany: (params: { resource: string; ids: string[]; metaData?: MetaDataQuery; }) => Promise>; getOne: (params: { resource: string; id: string; metaData?: MetaDataQuery; }) => Promise>; create: (params: { resource: string; variables: TVariables; metaData?: MetaDataQuery; }) => Promise>; createMany: < TData extends BaseRecord = BaseRecord, TVariables = {}, >(params: { resource: string; variables: TVariables[]; metaData?: MetaDataQuery; }) => Promise>; update: (params: { resource: string; id: string; variables: TVariables; metaData?: MetaDataQuery; }) => Promise>; updateMany: < TData extends BaseRecord = BaseRecord, TVariables = {}, >(params: { resource: string; ids: string[]; variables: TVariables; metaData?: MetaDataQuery; }) => Promise>; deleteOne: (params: { resource: string; id: string; metaData?: MetaDataQuery; }) => Promise>; deleteMany: (params: { resource: string; ids: string[]; metaData?: MetaDataQuery; }) => Promise>; getApiUrl: () => string; custom: (params: { url: string; method: | "get" | "delete" | "head" | "options" | "post" | "put" | "patch"; sort?: CrudSorting; filters?: CrudFilter[]; payload?: {}; query?: {}; headers?: {}; metaData?: MetaDataQuery; }) => Promise>; } export interface IDataContextProvider { getList: (params: { resource: string; pagination?: Pagination; sort?: CrudSorting; filters?: CrudFilters; metaData?: MetaDataQuery; }) => Promise>; getMany: (params: { resource: string; ids: string[]; metaData?: MetaDataQuery; }) => Promise>; getOne: (params: { resource: string; id: string; metaData?: MetaDataQuery; }) => Promise>; create: (params: { resource: string; variables: TVariables; metaData?: MetaDataQuery; }) => Promise>; createMany: < TData extends BaseRecord = BaseRecord, TVariables = {}, >(params: { resource: string; variables: TVariables[]; metaData?: MetaDataQuery; }) => Promise>; update: (params: { resource: string; id: string; variables: TVariables; metaData?: MetaDataQuery; }) => Promise>; updateMany: < TData extends BaseRecord = BaseRecord, TVariables = {}, >(params: { resource: string; ids: string[]; variables: TVariables; metaData?: MetaDataQuery; }) => Promise>; deleteOne: (params: { resource: string; id: string; metaData?: MetaDataQuery; }) => Promise>; deleteMany: (params: { resource: string; ids: string[]; metaData?: MetaDataQuery; }) => Promise>; getApiUrl: () => string; // TODO: Should be optional custom?: (params: { url: string; method: | "get" | "delete" | "head" | "options" | "post" | "put" | "patch"; sort?: CrudSorting; filters?: CrudFilter[]; payload?: {}; query?: {}; headers?: {}; metaData?: MetaDataQuery; }) => Promise>; }