mirror of
https://github.com/strapi/strapi.git
synced 2025-07-25 18:05:07 +00:00
42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
const { unionType } = require('nexus');
|
|
const { prop } = require('lodash/fp');
|
|
|
|
module.exports = ({ strapi, registry }) => {
|
|
const { naming } = strapi.plugin('graphql').service('utils');
|
|
const { KINDS, GENERIC_MORPH_TYPENAME } = strapi.plugin('graphql').service('constants');
|
|
|
|
return {
|
|
buildGenericMorphDefinition() {
|
|
return unionType({
|
|
name: GENERIC_MORPH_TYPENAME,
|
|
|
|
resolveType(obj) {
|
|
const contentType = strapi.getModel(obj.__type);
|
|
|
|
if (!contentType) {
|
|
return null;
|
|
}
|
|
|
|
if (contentType.modelType === 'component') {
|
|
return naming.getComponentName(contentType);
|
|
}
|
|
|
|
return naming.getTypeName(contentType);
|
|
},
|
|
|
|
definition(t) {
|
|
const members = registry
|
|
// Resolve every content-type or component
|
|
.where(({ config }) => [KINDS.type, KINDS.component].includes(config.kind))
|
|
// Only keep their name (the type's id)
|
|
.map(prop('name'));
|
|
|
|
t.members(...members);
|
|
},
|
|
});
|
|
},
|
|
};
|
|
};
|