mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-30 17:37:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const { pick, getOr } = require('lodash/fp');
 | |
| const { contentTypes: contentTypesUtils } = require('@strapi/utils');
 | |
| 
 | |
| const dtoFields = [
 | |
|   'uid',
 | |
|   'isDisplayed',
 | |
|   'apiID',
 | |
|   'kind',
 | |
|   'category',
 | |
|   'info',
 | |
|   'options',
 | |
|   'pluginOptions',
 | |
|   'attributes',
 | |
|   'pluginOptions',
 | |
| ];
 | |
| 
 | |
| module.exports = () => ({
 | |
|   toContentManagerModel(contentType) {
 | |
|     return {
 | |
|       ...contentType,
 | |
|       apiID: contentType.modelName,
 | |
|       isDisplayed: isVisible(contentType),
 | |
|       attributes: {
 | |
|         id: {
 | |
|           type: 'integer',
 | |
|         },
 | |
|         ...formatAttributes(contentType),
 | |
|       },
 | |
|     };
 | |
|   },
 | |
| 
 | |
|   toDto: pick(dtoFields),
 | |
| });
 | |
| 
 | |
| const formatAttributes = (contentType) => {
 | |
|   const { getVisibleAttributes, getTimestamps } = contentTypesUtils;
 | |
| 
 | |
|   // only get attributes that can be seen in the auto generated Edit view or List view
 | |
|   return getVisibleAttributes(contentType)
 | |
|     .concat(getTimestamps(contentType))
 | |
|     .reduce((acc, key) => {
 | |
|       const attribute = contentType.attributes[key];
 | |
| 
 | |
|       // ignore morph until they are handled in the front
 | |
|       if (attribute.type === 'relation' && attribute.relation.toLowerCase().includes('morph')) {
 | |
|         return acc;
 | |
|       }
 | |
| 
 | |
|       acc[key] = formatAttribute(key, attribute);
 | |
|       return acc;
 | |
|     }, {});
 | |
| };
 | |
| 
 | |
| // FIXME: not needed
 | |
| const formatAttribute = (key, attribute) => {
 | |
|   if (attribute.type === 'relation') {
 | |
|     return toRelation(attribute);
 | |
|   }
 | |
| 
 | |
|   return attribute;
 | |
| };
 | |
| 
 | |
| // FIXME: not needed
 | |
| const toRelation = (attribute) => {
 | |
|   return {
 | |
|     ...attribute,
 | |
|     type: 'relation',
 | |
|     targetModel: attribute.target,
 | |
|     relationType: attribute.relation,
 | |
|   };
 | |
| };
 | |
| 
 | |
| const isVisible = (model) => getOr(true, 'pluginOptions.content-manager.visible', model) === true;
 | 
