| 
									
										
										
										
											2020-10-22 16:43:51 +02:00
										 |  |  | '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); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-13 18:46:36 +02:00
										 |  |  | module.exports = ({ strapi }) => ({ | 
					
						
							| 
									
										
										
										
											2020-10-22 16:43:51 +02:00
										 |  |  |   findAllComponents() { | 
					
						
							|  |  |  |     const { toContentManagerModel } = getService('data-mapper'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return Object.values(strapi.components).map(toContentManagerModel); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   findComponent(uid) { | 
					
						
							|  |  |  |     const { toContentManagerModel } = getService('data-mapper'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const component = strapi.components[uid]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return isNil(component) ? component : toContentManagerModel(component); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // configuration
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async findConfiguration(component) { | 
					
						
							|  |  |  |     const configuration = await configurationService.getConfiguration(component.uid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       uid: component.uid, | 
					
						
							| 
									
										
										
										
											2023-03-01 12:08:52 +00:00
										 |  |  |       category: component.category, | 
					
						
							| 
									
										
										
										
											2020-10-22 16:43:51 +02:00
										 |  |  |       ...configuration, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async updateConfiguration(component, newConfiguration) { | 
					
						
							|  |  |  |     await configurationService.setConfiguration(component.uid, newConfiguration); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return this.findConfiguration(component); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async findComponentsConfigurations(model) { | 
					
						
							|  |  |  |     const componentsMap = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     const getComponentConfigurations = async (uid) => { | 
					
						
							| 
									
										
										
										
											2020-10-22 16:43:51 +02:00
										 |  |  |       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, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-05 16:20:47 +02:00
										 |  |  |     for (const key of Object.keys(model.attributes)) { | 
					
						
							| 
									
										
										
										
											2020-10-22 16:43:51 +02:00
										 |  |  |       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(); | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-07-13 18:46:36 +02:00
										 |  |  | }); |