quintodrome/ui/src/dataProvider/wrapperDataProvider.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

80 lines
2.3 KiB
JavaScript
Raw Normal View History

2020-05-11 17:27:00 -08:00
import jsonServerProvider from 'ra-data-json-server'
import httpClient from './httpClient'
2020-08-22 09:19:14 -08:00
import { REST_URL } from '../consts'
2020-05-11 17:27:00 -08:00
2020-08-22 09:19:14 -08:00
const dataProvider = jsonServerProvider(REST_URL, httpClient)
2020-05-11 17:27:00 -08:00
const mapResource = (resource, params) => {
switch (resource) {
case 'playlistTrack':
// /api/playlistTrack?playlist_id=123 => /api/playlist/123/tracks
let plsId = '0'
if (params.filter) {
plsId = params.filter.playlist_id
}
return [`playlist/${plsId}/tracks`, params]
default:
return [resource, params]
}
}
2021-10-26 10:05:28 -08:00
const callDeleteMany = (resource, params) => {
const ids = params.ids.map((id) => `id=${id}`)
const idsParam = ids.join('&')
return httpClient(`${REST_URL}/${resource}?${idsParam}`, {
method: 'DELETE',
}).then((response) => ({ data: response.json.ids || [] }))
}
2020-05-11 17:27:00 -08:00
const wrapperDataProvider = {
...dataProvider,
getList: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.getList(r, p)
},
getOne: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.getOne(r, p)
},
getMany: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.getMany(r, p)
},
getManyReference: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.getManyReference(r, p)
},
update: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.update(r, p)
},
updateMany: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.updateMany(r, p)
},
create: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.create(r, p)
},
delete: (resource, params) => {
const [r, p] = mapResource(resource, params)
return dataProvider.delete(r, p)
},
deleteMany: (resource, params) => {
const [r, p] = mapResource(resource, params)
2021-10-26 10:05:28 -08:00
if (r.endsWith('/tracks')) {
return callDeleteMany(r, p)
}
2020-05-11 17:27:00 -08:00
return dataProvider.deleteMany(r, p)
},
addToPlaylist: (playlistId, data) => {
return httpClient(`${REST_URL}/playlist/${playlistId}/tracks`, {
method: 'POST',
body: JSON.stringify(data),
}).then(({ json }) => ({ data: json }))
},
2020-05-11 17:27:00 -08:00
}
export default wrapperDataProvider