-
-
Notifications
You must be signed in to change notification settings - Fork 7.6k
/
components.js
92 lines (67 loc) 路 2.41 KB
/
components.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
'use strict';
const { has, isNil, mapValues } = require('lodash/fp');
const { getService } = require('../utils');
const storeUtils = require('./utils/store');
const createConfigurationService = require('./configuration');
const STORE_KEY_PREFIX = 'components';
const configurationService = createConfigurationService({
storeUtils,
isComponent: true,
prefix: STORE_KEY_PREFIX,
getModels() {
const { toContentManagerModel } = getService('data-mapper');
return mapValues(toContentManagerModel, strapi.components);
},
});
module.exports = ({ strapi }) => ({
findAllComponents() {
const { toContentManagerModel } = getService('data-mapper');
return Object.values(strapi.components).map(toContentManagerModel);
},
findComponent(uid) {
const { toContentManagerModel } = getService('data-mapper');
const component = strapi.component(uid);
return isNil(component) ? component : toContentManagerModel(component);
},
// configuration
async findConfiguration(component) {
const configuration = await configurationService.getConfiguration(component.uid);
return {
uid: component.uid,
category: component.category,
...configuration,
};
},
async updateConfiguration(component, newConfiguration) {
await configurationService.setConfiguration(component.uid, newConfiguration);
return this.findConfiguration(component);
},
async findComponentsConfigurations(model) {
const componentsMap = {};
const getComponentConfigurations = async (uid) => {
const component = this.findComponent(uid);
if (has(uid, componentsMap)) return;
const componentConfiguration = await this.findConfiguration(component);
const componentsConfigurations = await this.findComponentsConfigurations(component);
Object.assign(componentsMap, {
[uid]: componentConfiguration,
...componentsConfigurations,
});
};
for (const key of Object.keys(model.attributes)) {
const attribute = model.attributes[key];
if (attribute.type === 'component') {
await getComponentConfigurations(attribute.component);
}
if (attribute.type === 'dynamiczone') {
for (const componentUid of attribute.components) {
await getComponentConfigurations(componentUid);
}
}
}
return componentsMap;
},
syncConfigurations() {
return configurationService.syncConfigurations();
},
});