diff --git a/packages/strapi-admin/admin/src/utils/ComponentApi.js b/packages/strapi-admin/admin/src/utils/ComponentApi.js new file mode 100644 index 0000000000..b8f54ada95 --- /dev/null +++ b/packages/strapi-admin/admin/src/utils/ComponentApi.js @@ -0,0 +1,36 @@ +import { cloneDeep } from 'lodash'; +import invariant from 'invariant'; + +class ComponentApi { + components = {}; + + getComponent = name => { + invariant(name, 'A name must be provided'); + + return cloneDeep(this.components[name]) || null; + }; + + getComponents = () => { + return cloneDeep(this.components); + }; + + registerComponent = component => { + const { name, Component } = component; + + invariant(Component, 'A Component must be provided'); + invariant(name, 'A name must be provided'); + invariant(this.components[name] === undefined, 'A similar field already exists'); + + this.components[name] = Component; + }; + + removeComponent = name => { + invariant(name, 'A name must be provided in order to remove a field'); + + delete this.components[name]; + }; +} + +export default () => { + return new ComponentApi(); +}; diff --git a/packages/strapi-admin/admin/src/utils/Strapi.js b/packages/strapi-admin/admin/src/utils/Strapi.js index 2193fbff8c..64f3b265a2 100644 --- a/packages/strapi-admin/admin/src/utils/Strapi.js +++ b/packages/strapi-admin/admin/src/utils/Strapi.js @@ -1,6 +1,9 @@ +import ComponentApi from './ComponentApi'; import FieldApi from './FieldApi'; class Strapi { + componentApi = ComponentApi(); + fieldApi = FieldApi(); }