-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
96 lines (81 loc) · 2.4 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
86
87
88
89
90
91
92
93
94
95
96
var ladda = require('ladda-cache');
// 1. Mock backend
getProject.operation = 'READ';
function getProject(id) {
console.log('getProject(' + id + ') request sent');
return Promise.resolve({
id: 1,
name: 'Docs',
description: 'Write Ladda Docs'
});
}
updateProject.operation = 'UPDATE';
function updateProject(newObject) {
console.log('updateProject request sent');
return Promise.resolve();
}
getProjectPreviews.operation = 'READ';
getProjectPreviews.plural = true;
function getProjectPreviews() {
console.log('getProjectPreviews request sent');
return Promise.resolve([
{
id: 1,
name: 'Docs',
},
{
id: 2,
name: 'Mini example',
}
]);
}
// 2. Define APIs (objects with methods that return promises)
const apiProject = {
getProject: getProject,
updateProject: updateProject,
};
const apiProjectPreview = {
getProjectPreviews: getProjectPreviews
};
// 3. Configure Ladda
const config = {
project: {
ttl: 300,
api: apiProject
},
projectPreview: {
ttl: 300,
api: apiProjectPreview,
viewOf: ['project']
}
};
// 4. Build API client
const api = ladda.build(config);
// 5. Excute example
Promise.resolve()
.then(api.projectPreview.getProjectPreviews)
.then(printResult)
.then(api.project.getProject.bind(null, 1))
.then(printResult)
.then(api.project.updateProject.bind(null, { id: 1, name: 'new name', description: 'new desc'}))
.then(api.projectPreview.getProjectPreviews)
.then(printResult);
function printResult(res) {
console.log(res);
}
/* 6. Conclusion
We get the following output:
>> getProjectPreviews request sent
>> [Object, Object]
>> getProject(1) request sent
>> {id: 1, name: "Docs", description: "Write Ladda Docs"}
>> updateProject request sent
>> [{id: 1, name: "new name"},
{id: 2, name: "mini example"}]
Note that after updating our projects we are getting the project previews.
No request is sent. However, we still get the latest update even though it was made
to Project and not ProjectPreview. This is thanks to the "viewOf" declaration.
Note that the updated version do in fact contain "description".
Ladda only guarantees that the fields in the view are available, not that
ONLY the fields in the view are available when a super type is updated.
*/