getList: (resource: any, params: any) => {
const primaryKey = getPrimaryKey(resource, primaryKeys);
const { pageIndex, pageSize } = params.pagination;
const { field, order } = { field: 'id', order: 'desc' }
const obj: any = {}
for (let key in params.filter) {
if (params.filter[key]) {
obj[`${key}@like`] = `${params.filter[key]}`
}
}
const parsedFilter = parseFilters(Object.assign({ is_delete: 0 }, obj), defaultListOp);
const query = {
...parsedFilter,
limit: String(pageSize),
offset: String((pageIndex - 1) * pageSize),
order: getOrderBy(field, order, primaryKey),
// append filters
};
// add header that Content-Range is in returned header
const options = {
headers: new Headers({
Accept: 'application/json',
Prefer: 'count=exact'
})
};
const url = `${PostgrestUrl}/${resource}?${new URLSearchParams(query)}`;
return httpClient(url, options).then(({ headers, json }) => {
if (!headers.has('content-range')) {
throw new Error(
`The Content-Range header is missing in the HTTP Response. The postgREST data provider expects
responses for lists of resources to contain this header with the total number of results to build
the pagination. If you are using CORS, did you declare Content-Range in the Access-Control-Expose-Headers header?`
);
}
const obj: any = headers
const numTotal: any = parseInt(
obj
.get('content-range')
.split('/')
.pop(),
)
return {
data: json.map((obj: any) => dataWithId(obj, primaryKey)),
total: numTotal,
page: parseInt(query.offset),
size: parseInt(query.limit),
pages: Math.round(numTotal - 1 / query.limit),
};
}).catch((err) => {
return err
})
},