- {currentContentTypeLayoutData.layouts.editRelations.map(relationName => {
- const relation = get(
- currentContentTypeLayoutData,
- ['schema', 'attributes', relationName],
- {}
- );
- const relationMetas = get(
- currentContentTypeLayoutData,
- ['metadatas', relationName, 'edit'],
- {}
- );
-
- return (
-
- );
- })}
+ {currentContentTypeLayoutData.layouts.editRelations.map(
+ ({ name, fieldSchema, metadatas }) => {
+ return (
+
+ );
+ }
+ )}
)}
@@ -187,7 +175,6 @@ const EditView = ({ components, currentEnvironment, models, plugins, slug }) =>
id: 'app.links.configure-view',
}}
icon="layout"
- key={`${pluginId}.link`}
url="ctm-configurations/edit-settings/content-types"
onClick={() => {
// emitEvent('willEditContentTypeLayoutFromEditView');
@@ -221,9 +208,7 @@ EditView.defaultProps = {
EditView.propTypes = {
components: PropTypes.array.isRequired,
currentEnvironment: PropTypes.string,
- deleteLayout: PropTypes.func.isRequired,
emitEvent: PropTypes.func,
- layouts: PropTypes.object.isRequired,
models: PropTypes.array.isRequired,
plugins: PropTypes.object,
slug: PropTypes.string.isRequired,
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SingleTypeEditView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/SingleTypeEditView/index.js
index d483d500e7..ab369416d2 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/SingleTypeEditView/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/SingleTypeEditView/index.js
@@ -1,62 +1,44 @@
-import React, { memo, useCallback, useMemo, useEffect } from 'react';
+import React, { memo, useCallback, useMemo } from 'react';
import PropTypes from 'prop-types';
import { get } from 'lodash';
import { useHistory, useLocation } from 'react-router-dom';
-import { BackHeader, LiLink, CheckPermissions, useUserPermissions } from 'strapi-helper-plugin';
+import {
+ BackHeader,
+ LiLink,
+ CheckPermissions,
+ LoadingIndicatorPage,
+ useUserPermissions,
+} from 'strapi-helper-plugin';
import { Padded } from '@buffetjs/core';
-
-import pluginId from '../../pluginId';
import pluginPermissions from '../../permissions';
-import { generatePermissionsObject } from '../../utils';
+import { generatePermissionsObject, getInjectedComponents } from '../../utils';
import Container from '../../components/Container';
import DynamicZone from '../../components/DynamicZone';
import FormWrapper from '../../components/FormWrapper';
import FieldComponent from '../../components/FieldComponent';
import Inputs from '../../components/Inputs';
import SelectWrapper from '../../components/SelectWrapper';
-import getInjectedComponents from '../../utils/getComponents';
+import { useFetchContentTypeLayout } from '../../hooks';
import EditViewDataManagerProvider from '../SingleTypeEditViewDataManagerProvider';
import EditViewProvider from '../EditViewProvider';
import Header from './Header';
-import { createAttributesLayout, formatLayoutWithMetas } from './utils';
+import { createAttributesLayout } from './utils';
import { LinkWrapper, SubWrapper } from './components';
-
import DeleteLink from './DeleteLink';
import InformationCard from './InformationCard';
/* eslint-disable react/no-array-index-key */
-const EditView = ({
- components,
- currentEnvironment,
- deleteLayout,
- layouts,
- models,
- plugins,
- slug,
-}) => {
+const EditView = ({ components, currentEnvironment, models, plugins, slug }) => {
// TODO REFACTO THIS CONTAINER SINCE IT IS VERY SIMILAR TO THE CT ONE
-
+ const { isLoading, layout } = useFetchContentTypeLayout(slug);
const { goBack } = useHistory();
// DIFF WITH CT
const { pathname } = useLocation();
const viewPermissions = useMemo(() => generatePermissionsObject(slug), [slug]);
const { allowedActions } = useUserPermissions(viewPermissions);
- const allLayoutData = useMemo(() => get(layouts, [slug], {}), [layouts, slug]);
-
- const currentContentTypeLayoutData = useMemo(() => get(allLayoutData, ['contentType'], {}), [
- allLayoutData,
- ]);
-
- const currentContentTypeLayoutRelations = useMemo(
- () => get(currentContentTypeLayoutData, ['layouts', 'editRelations'], []),
- [currentContentTypeLayoutData]
- );
- const currentContentTypeSchema = useMemo(
- () => get(currentContentTypeLayoutData, ['schema'], {}),
- [currentContentTypeLayoutData]
- );
+ const currentContentTypeLayoutData = useMemo(() => get(layout, ['contentType'], {}), [layout]);
// Check if a block is a dynamic zone
const isDynamicZone = useCallback(block => {
@@ -65,27 +47,32 @@ const EditView = ({
});
}, []);
- useEffect(() => {
- return () => deleteLayout(slug);
- }, [deleteLayout, slug]);
-
const formattedContentTypeLayout = useMemo(() => {
- const enhancedLayout = formatLayoutWithMetas(currentContentTypeLayoutData);
+ if (!currentContentTypeLayoutData.layouts) {
+ return [];
+ }
- return createAttributesLayout(enhancedLayout, currentContentTypeSchema.attributes);
- }, [currentContentTypeLayoutData, currentContentTypeSchema.attributes]);
+ return createAttributesLayout(
+ currentContentTypeLayoutData.layouts.edit,
+ currentContentTypeLayoutData.schema.attributes
+ );
+ }, [currentContentTypeLayoutData]);
+
+ if (isLoading) {
+ return