UNPKG

vuetify-admin

Version:

SPA admin framework for Vue.js running on top of REST APIs, built on Vuetify

98 lines (86 loc) 2.38 kB
import { GET_LIST, GET_MANY, GET_ONE, CREATE, UPDATE, UPDATE_MANY, DELETE, DELETE_MANY, } from "./actions"; import FetchJson from "../utils/fetchJson"; import qs from "qs"; export default (httpClient) => { if (typeof httpClient === "string") { httpClient = new FetchJson(httpClient); } const withInclude = (params) => { let query = {}; if (params.include) { let { embed, expand } = params.include; query = { _embed: embed, _expand: expand, }; } return query; }; return { [GET_LIST]: async (resource, params) => { const { pagination, sort, filter } = params; let query = { ...withInclude(params), ...filter, }; if (pagination) { let { page, perPage } = pagination; query = { ...query, _start: (page - 1) * perPage, _end: page * perPage, }; } if (sort && sort.length) { query = { ...query, _sort: sort.map((item) => item.by), _order: sort.map((item) => (item.desc ? "desc" : "asc")), }; } let { data, headers } = await httpClient.get( `${resource}?${qs.stringify(query, { arrayFormat: "repeat" })}` ); return { data, total: parseInt(headers["x-total-count"], 10), }; }, [GET_MANY]: (resource, params) => httpClient.get( `${resource}?${qs.stringify( { ...withInclude(params), id: params.ids, }, { arrayFormat: "repeat" } )}` ), [GET_ONE]: (resource, params) => httpClient.get( `${resource}/${params.id}?${qs.stringify(withInclude(params))}` ), [CREATE]: (resource, params) => httpClient.post(resource, params.data), [UPDATE]: (resource, params) => httpClient.put(`${resource}/${params.id}`, params.data), [UPDATE_MANY]: (resource, params) => Promise.all( params.ids.map((id) => httpClient.put(`${resource}/${id}`, params.data)) ).then(() => Promise.resolve()), [DELETE]: (resource, params) => httpClient.delete(`${resource}/${params.id}`), [DELETE_MANY]: (resource, params) => Promise.all( params.ids.map((id) => httpClient.delete(`${resource}/${id}`)) ).then(() => Promise.resolve()), }; };