91 lines
2.4 KiB
TypeScript
91 lines
2.4 KiB
TypeScript
import { DataProvider } from "react-admin";
|
|
import axios from 'axios';
|
|
|
|
const apiUrl = 'http://localhost:3000/api/graphql';
|
|
|
|
export const dataProvider: DataProvider = {
|
|
// Fetch data for post listing
|
|
getList: (resource, params) => {
|
|
// Paginator status
|
|
const { page, perPage } = params.pagination;
|
|
// Sorter status
|
|
const { field, order } = params.sort;
|
|
|
|
// POST request to GraphQL endpoint
|
|
return axios.post(apiUrl, {
|
|
query: `
|
|
query {
|
|
notes (
|
|
orderBy: { ${field}: ${order} },
|
|
pagination: { page: { limit: ${perPage}, page: ${page - 1} }}
|
|
) {
|
|
nodes {
|
|
id
|
|
title
|
|
createdAt
|
|
updatedAt
|
|
}
|
|
paginationInfo {
|
|
pages
|
|
current
|
|
offset
|
|
total
|
|
}
|
|
}
|
|
}
|
|
`
|
|
})
|
|
.then((response) => {
|
|
// Unwrap the response
|
|
const { nodes, paginationInfo } = response.data.data.notes;
|
|
// Return the data array and total number of pages
|
|
return {
|
|
data: nodes,
|
|
total: paginationInfo.total,
|
|
};
|
|
});
|
|
},
|
|
|
|
// Fetch data for a single post
|
|
getOne: (resource, params) => {
|
|
// POST request to GraphQL endpoint
|
|
return axios.post(apiUrl, {
|
|
query: `
|
|
query {
|
|
notes(filters: {id: {eq: ${params.id}}}) {
|
|
nodes {
|
|
id
|
|
title
|
|
content
|
|
createdAt
|
|
updatedAt
|
|
}
|
|
}
|
|
}
|
|
`
|
|
})
|
|
.then((response) => {
|
|
// Unwrap the response
|
|
const { nodes } = response.data.data.notes;
|
|
// Return the one and only data
|
|
return {
|
|
data: nodes[0],
|
|
};
|
|
});
|
|
},
|
|
|
|
getMany: (resource, params) => { },
|
|
|
|
getManyReference: (resource, params) => { },
|
|
|
|
update: (resource, params) => { },
|
|
|
|
updateMany: (resource, params) => { },
|
|
|
|
create: (resource, params) => { },
|
|
|
|
delete: (resource, params) => { },
|
|
|
|
deleteMany: (resource, params) => { },
|
|
};
|