Newer
Older
import { AuthProvider, DataProvider } from "ra-core";
// import authProvider from './authProvider';
// see https://marmelab.com/react-admin/Authentication.html
export const authProvider: AuthProvider = {
// authentication
login: (_params) => Promise.resolve(),
checkError: (_error) => Promise.resolve(),
checkAuth: (_params) => Promise.resolve(),
logout: () => Promise.resolve(),
getIdentity: () => Promise.resolve({ id: 0 }),
// authorization
getPermissions: (_params) => Promise.resolve(),
};
interface Entity {
eid: string;
}
export function createDataProvider<S extends Schema>(
endpoint: string,
schema: S
): DataProvider {
const httpClient = new client.CwSimpleHttpClient(endpoint, true);
const rqlClient = new client.CwRqlClient(httpClient);
return {
getList: async (resource: ETypesNames<S>, { pagination }) => {
const attributesNames = ["eid", ...Object.keys(schema.etypes[resource])];
const selection: string[] = [];
const restrictions: string[] = [];
attributesNames.forEach((key, idx) => {
const variable = `X${idx}`;
selection.push(variable);
restrictions.push(`X ${key} ${variable}`);
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const total = await rqlClient
.queryRows(`Any Count(${selection[0]}) WHERE ${restrictions.join(",")}`)
.then((rows) => rows[0][0]);
return rqlClient
.queryRows(
`Any ${selection.join(", ")} LIMIT ${pagination.perPage} OFFSET ${
pagination.page * pagination.perPage
} WHERE ${restrictions.join(", ")}`,
{}
)
.then((rows) => {
return {
data: rows.map((row) =>
row.reduce(
(agg, attributeValue, idx) => ({
[attributesNames[idx]]: attributeValue,
...agg,
}),
{ id: row[0] }
)
),
total,
};
});
},
getOne: (resource: keyof S["etypes"], _params) => {
return fetch(
`${endpoint}/view?rql=Any+C+LIMIT+1+WHERE+C+is+${resource}+,+C+eid+${_params.id}&vid=ejsonexport`
)
.then((resp) => resp.json())
.then((json) => {
return {
data: json.map((entity: Entity) => ({
...entity,
id: entity.eid,
}))[0],
};
});
},
getMany: (_resource, _params) => Promise.reject("Not implemented"),
getManyReference: (_resource, _params) => Promise.reject("Not implemented"),
update: (_resource, _params) => Promise.reject("Not implemented"),
updateMany: (_resource, _params) => Promise.reject("Not implemented"),
create: (_resource, _params) => Promise.reject("Not implemented"),
delete: (_resource, _params) => Promise.reject("Not implemented"),
deleteMany: (_resource, _params) => Promise.reject("Not implemented"),
};
}