Skip to content

Commit 3101b8a

Browse files
author
JF
committed
filters : working state
1 parent 8e90ea1 commit 3101b8a

File tree

8 files changed

+405
-201
lines changed

8 files changed

+405
-201
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/Filter.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// @flow
2+
3+
/**
4+
* @property {string} name - The name of this field
5+
*/
6+
export default class Filter {
7+
property: string;
8+
filter: string;
9+
10+
/**
11+
* @param {string} property
12+
* @param {string} filter
13+
*/
14+
constructor(property: string, filter: string) {
15+
this.property = property;
16+
this.filter = filter;
17+
}
18+
}

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+
type: string;
9+
required: boolean;
10+
description: string;
11+
12+
/**
13+
* @param {string} variable
14+
* @param {string} type
15+
* @param {boolean} required
16+
* @param {string} description
17+
*/
18+
constructor(
19+
variable: string,
20+
type: string,
21+
required: boolean,
22+
description: string
23+
) {
24+
this.variable = variable;
25+
this.type = type;
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: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
let promise = fetchResource(resource.url).then(response => {
9+
if (!response.parameters) {
10+
return [];
11+
}
12+
13+
const resourceParameters = [];
14+
15+
response.parameters.forEach(parameter => {
16+
const property = parameter.property;
17+
18+
if (property === null) {
19+
return;
20+
}
21+
22+
resourceParameters.push(
23+
new Parameter(parameter.variable, "", parameter.required, "")
24+
);
25+
});
26+
27+
return resourceParameters;
28+
});
29+
30+
promises.push(promise);
31+
}
32+
33+
return Promise.all(promises).then(values => {
34+
api.resources.map((resource, index) => {
35+
resource.parameters = values[index];
36+
});
37+
38+
return api;
39+
});
40+
};

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)