@cubicweb/data-provider
Version:
CubicWeb data provider implementation
183 lines (158 loc) • 4.04 kB
text/typescript
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* data types
*/
export type Identifier = string | number;
export interface RaRecord {
id: Identifier;
[key: string]: any;
}
export interface SortPayload {
field: string;
order: string;
}
export interface FilterPayload {
[k: string]: any;
}
export interface PaginationPayload {
page: number;
perPage: number;
}
/* dataProvider types
*/
export type DataProvider<ResourceType extends string = string> = {
getList: (
resource: ResourceType,
params: GetListParams
) => Promise<GetListResult<RaRecord>>;
getOne: (
resource: ResourceType,
params: GetOneParams
) => Promise<GetOneResult<RaRecord>>;
getMany: (
resource: ResourceType,
params: GetManyParams
) => Promise<GetManyResult<RaRecord>>;
getManyReference: (
resource: ResourceType,
params: GetManyReferenceParams
) => Promise<GetManyReferenceResult<RaRecord>>;
update: (
resource: ResourceType,
params: UpdateParams
) => Promise<UpdateResult<RaRecord>>;
updateMany: (
resource: ResourceType,
params: UpdateManyParams
) => Promise<UpdateManyResult<RaRecord>>;
create: (
resource: ResourceType,
params: CreateParams
) => Promise<CreateResult<RaRecord>>;
delete: (
resource: ResourceType,
params: DeleteParams<RaRecord>
) => Promise<DeleteResult<RaRecord>>;
deleteMany: (
resource: ResourceType,
params: DeleteManyParams<RaRecord>
) => Promise<DeleteManyResult<RaRecord>>;
[key: string]: any;
};
export interface GetListParams {
pagination: PaginationPayload;
sort: SortPayload;
filter: unknown;
meta?: any;
}
export interface GetListResult<RecordType extends RaRecord = any> {
data: RecordType[];
total?: number;
pageInfo?: {
hasNextPage?: boolean;
hasPreviousPage?: boolean;
};
}
export interface GetInfiniteListResult<RecordType extends RaRecord = any>
extends GetListResult<RecordType> {
pageParam?: number;
}
export interface GetOneParams<RecordType extends RaRecord = any> {
id: RecordType["id"];
meta?: any;
}
export interface GetOneResult<RecordType extends RaRecord = any> {
data: RecordType;
}
export interface GetManyParams {
ids: Identifier[];
meta?: any;
}
export interface GetManyResult<RecordType extends RaRecord = any> {
data: RecordType[];
}
export interface GetManyReferenceParams {
target: string;
id: Identifier;
pagination: PaginationPayload;
sort: SortPayload;
filter: any;
meta?: any;
}
export interface GetManyReferenceResult<RecordType extends RaRecord = any> {
data: RecordType[];
total?: number;
pageInfo?: {
hasNextPage?: boolean;
hasPreviousPage?: boolean;
};
}
export interface UpdateParams<T = any> {
id: Identifier;
data: Partial<T>;
previousData: T;
meta?: any;
}
export interface UpdateResult<RecordType extends RaRecord = any> {
data: RecordType;
}
export interface UpdateManyParams<T = any> {
ids: Identifier[];
data: T;
meta?: any;
}
export interface UpdateManyResult<RecordType extends RaRecord = any> {
data?: RecordType["id"][];
}
export interface CreateParams<T = any> {
data: T;
meta?: any;
}
export interface CreateResult<RecordType extends RaRecord = any> {
data: RecordType;
}
export interface DeleteParams<RecordType extends RaRecord = any> {
id: RecordType["id"];
previousData?: RecordType;
meta?: any;
}
export interface DeleteResult<RecordType extends RaRecord = any> {
data: RecordType;
}
export interface DeleteManyParams<RecordType extends RaRecord = any> {
ids: RecordType["id"][];
meta?: any;
}
export interface DeleteManyResult<RecordType extends RaRecord = any> {
data?: RecordType["id"][];
}
export type DataProviderResult<RecordType extends RaRecord = any> =
| CreateResult<RecordType>
| DeleteResult<RecordType>
| DeleteManyResult
| GetListResult<RecordType>
| GetManyResult<RecordType>
| GetManyReferenceResult<RecordType>
| GetOneResult<RecordType>
| UpdateResult<RecordType>
| UpdateManyResult;