Skip to content

Commit da3131b

Browse files
jfthuillierdunglas
authored andcommitted
Filters implementation (#33)
* Filters implementation * Fix CS
1 parent 41f9442 commit da3131b

7 files changed

+338
-202
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"eslint-plugin-import": "^2.2.0",
3030
"eslint-plugin-prettier": "^2.6.0",
3131
"flow-bin": "^0.42.0",
32-
"jest": "^20.0.0",
32+
"jest": "^23.0.0",
3333
"jest-fetch-mock": "^1.0.8",
3434
"prettier": "^1.12.1"
3535
},

src/Parameter.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// @flow
2+
3+
/**
4+
* @property {string} variable - The variable of this field
5+
*/
6+
export default class Parameter {
7+
variable: string;
8+
range: string;
9+
required: boolean;
10+
description: string;
11+
12+
/**
13+
* @param {string} variable
14+
* @param {string} range
15+
* @param {boolean} required
16+
* @param {string} description
17+
*/
18+
constructor(
19+
variable: string,
20+
range: string,
21+
required: boolean,
22+
description: string
23+
) {
24+
this.variable = variable;
25+
this.range = range;
26+
this.required = required;
27+
this.description = description;
28+
}
29+
}

src/Resource.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
import Field from "./Field";
44
import Operation from "./Operation";
5+
import Parameter from "./Parameter";
56

67
type ResourceOptions = {
78
id?: string,
89
title?: string,
910
deprecated?: boolean,
1011
readableFields?: Field[],
1112
writableFields?: Field[],
13+
parameters?: Parameter[],
1214
operations?: Operation[]
1315
};
1416

src/hydra/addParameters.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import Parameter from "../Parameter";
2+
import fetchResource from "./fetchResource";
3+
4+
export default api => {
5+
const promises = [];
6+
7+
for (const resource of api.resources) {
8+
const promise = fetchResource(resource.url).then(({ parameters = {} }) => {
9+
const resourceParameters = [];
10+
parameters.forEach(({ property = null, required, variable }) => {
11+
if (null === property) {
12+
return;
13+
}
14+
15+
const { range = null } =
16+
resource.fields.find(({ name }) => property === name) || {};
17+
18+
resourceParameters.push(new Parameter(variable, range, required, ""));
19+
});
20+
21+
return resourceParameters;
22+
});
23+
24+
promises.push(promise);
25+
}
26+
27+
return Promise.all(promises).then(values => {
28+
api.resources.map((resource, index) => {
29+
resource.parameters = values[index];
30+
});
31+
32+
return api;
33+
});
34+
};

src/hydra/fetchResource.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import fetchJsonLd from "./fetchJsonLd";
2+
import get from "lodash.get";
3+
4+
export default async resourceUrl => {
5+
return await fetchJsonLd(resourceUrl, { itemsPerPage: 0 }).then(
6+
d => ({
7+
parameters: get(d, "body.hydra:search.hydra:mapping")
8+
}),
9+
() => {
10+
throw new Error("Unreachable resource");
11+
}
12+
);
13+
};

0 commit comments

Comments
 (0)