mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 03:43:34 +00:00 
			
		
		
		
	Fix conflicts
Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
		
						commit
						e105592943
					
				@ -2,12 +2,7 @@ import React, { useState } from 'react';
 | 
			
		||||
import { useParams, useRouteMatch } from 'react-router-dom';
 | 
			
		||||
import { Header as PluginHeader } from '@buffetjs/custom';
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
  PopUpWarning,
 | 
			
		||||
  request,
 | 
			
		||||
  templateObject,
 | 
			
		||||
  useGlobalContext,
 | 
			
		||||
} from 'strapi-helper-plugin';
 | 
			
		||||
import { PopUpWarning, request, templateObject, useGlobalContext } from 'strapi-helper-plugin';
 | 
			
		||||
import { get } from 'lodash';
 | 
			
		||||
import pluginId from '../../pluginId';
 | 
			
		||||
import useDataManager from '../../hooks/useDataManager';
 | 
			
		||||
@ -30,15 +25,13 @@ const Header = () => {
 | 
			
		||||
    slug,
 | 
			
		||||
    clearData,
 | 
			
		||||
  } = useDataManager();
 | 
			
		||||
  const isSingleType = useRouteMatch('/plugins/content-manager/singleType');
 | 
			
		||||
  const {
 | 
			
		||||
    params: { contentType },
 | 
			
		||||
  } = useRouteMatch('/plugins/content-manager/:contentType');
 | 
			
		||||
  const isSingleType = contentType === 'singleType';
 | 
			
		||||
 | 
			
		||||
  const currentContentTypeMainField = get(
 | 
			
		||||
    layout,
 | 
			
		||||
    ['settings', 'mainField'],
 | 
			
		||||
    'id'
 | 
			
		||||
  );
 | 
			
		||||
  const currentContentTypeMainField = get(layout, ['settings', 'mainField'], 'id');
 | 
			
		||||
  const currentContentTypeName = get(layout, ['schema', 'info', 'name']);
 | 
			
		||||
  const apiId = layout.uid.split('.')[1];
 | 
			
		||||
  const isCreatingEntry = id === 'create';
 | 
			
		||||
 | 
			
		||||
  /* eslint-disable indent */
 | 
			
		||||
@ -46,8 +39,7 @@ const Header = () => {
 | 
			
		||||
    ? formatMessage({
 | 
			
		||||
        id: `${pluginId}.containers.Edit.pluginHeader.title.new`,
 | 
			
		||||
      })
 | 
			
		||||
    : templateObject({ mainField: currentContentTypeMainField }, initialData)
 | 
			
		||||
        .mainField;
 | 
			
		||||
    : templateObject({ mainField: currentContentTypeMainField }, initialData).mainField;
 | 
			
		||||
  /* eslint-enable indent */
 | 
			
		||||
  const headerTitle = isSingleType ? currentContentTypeName : entryHeaderTitle;
 | 
			
		||||
 | 
			
		||||
@ -106,9 +98,7 @@ const Header = () => {
 | 
			
		||||
    title: {
 | 
			
		||||
      label: headerTitle && headerTitle.toString(),
 | 
			
		||||
    },
 | 
			
		||||
    content: isSingleType
 | 
			
		||||
      ? `${formatMessage({ id: `${pluginId}.api.id` })} : ${apiId}`
 | 
			
		||||
      : '',
 | 
			
		||||
    content: isSingleType ? `${formatMessage({ id: `${pluginId}.api.id` })} : ${layout.apiID}` : '',
 | 
			
		||||
    actions: getHeaderActions(),
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,4 @@
 | 
			
		||||
import React, {
 | 
			
		||||
  memo,
 | 
			
		||||
  useCallback,
 | 
			
		||||
  useMemo,
 | 
			
		||||
  useEffect,
 | 
			
		||||
  useReducer,
 | 
			
		||||
  useRef,
 | 
			
		||||
} from 'react';
 | 
			
		||||
import React, { memo, useCallback, useMemo, useEffect, useReducer, useRef } from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import { get } from 'lodash';
 | 
			
		||||
import { useHistory, useLocation, useRouteMatch } from 'react-router-dom';
 | 
			
		||||
@ -28,31 +21,22 @@ import reducer, { initialState } from './reducer';
 | 
			
		||||
 | 
			
		||||
/* eslint-disable  react/no-array-index-key */
 | 
			
		||||
 | 
			
		||||
const EditView = ({
 | 
			
		||||
  components,
 | 
			
		||||
  currentEnvironment,
 | 
			
		||||
  layouts,
 | 
			
		||||
  plugins,
 | 
			
		||||
  slug,
 | 
			
		||||
}) => {
 | 
			
		||||
const EditView = ({ components, currentEnvironment, layouts, plugins, slug }) => {
 | 
			
		||||
  const formatLayoutRef = useRef();
 | 
			
		||||
  formatLayoutRef.current = createAttributesLayout;
 | 
			
		||||
  // Retrieve push to programmatically navigate between views
 | 
			
		||||
  const { push } = useHistory();
 | 
			
		||||
  // Retrieve the search and the pathname
 | 
			
		||||
  const { search, pathname } = useLocation();
 | 
			
		||||
  const isSingleType = useRouteMatch('/plugins/content-manager/singleType');
 | 
			
		||||
  const [reducerState, dispatch] = useReducer(reducer, initialState, () =>
 | 
			
		||||
    init(initialState)
 | 
			
		||||
  );
 | 
			
		||||
  const allLayoutData = useMemo(() => get(layouts, [slug], {}), [
 | 
			
		||||
    layouts,
 | 
			
		||||
    slug,
 | 
			
		||||
  const {
 | 
			
		||||
    params: { contentType },
 | 
			
		||||
  } = useRouteMatch('/plugins/content-manager/:contentType');
 | 
			
		||||
  const isSingleType = contentType === 'singleType';
 | 
			
		||||
  const [reducerState, dispatch] = useReducer(reducer, initialState, () => init(initialState));
 | 
			
		||||
  const allLayoutData = useMemo(() => get(layouts, [slug], {}), [layouts, slug]);
 | 
			
		||||
  const currentContentTypeLayoutData = useMemo(() => get(allLayoutData, ['contentType'], {}), [
 | 
			
		||||
    allLayoutData,
 | 
			
		||||
  ]);
 | 
			
		||||
  const currentContentTypeLayoutData = useMemo(
 | 
			
		||||
    () => get(allLayoutData, ['contentType'], {}),
 | 
			
		||||
    [allLayoutData]
 | 
			
		||||
  );
 | 
			
		||||
  const currentContentTypeLayout = useMemo(
 | 
			
		||||
    () => get(currentContentTypeLayoutData, ['layouts', 'edit'], []),
 | 
			
		||||
    [currentContentTypeLayoutData]
 | 
			
		||||
@ -68,11 +52,7 @@ const EditView = ({
 | 
			
		||||
 | 
			
		||||
  const getFieldMetas = useCallback(
 | 
			
		||||
    fieldName => {
 | 
			
		||||
      return get(
 | 
			
		||||
        currentContentTypeLayoutData,
 | 
			
		||||
        ['metadatas', fieldName, 'edit'],
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
      return get(currentContentTypeLayoutData, ['metadatas', fieldName, 'edit'], {});
 | 
			
		||||
    },
 | 
			
		||||
    [currentContentTypeLayoutData]
 | 
			
		||||
  );
 | 
			
		||||
@ -117,10 +97,7 @@ const EditView = ({
 | 
			
		||||
    });
 | 
			
		||||
  }, [currentContentTypeLayout, currentContentTypeSchema.attributes]);
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
    formattedContentTypeLayout,
 | 
			
		||||
    isDraggingComponent,
 | 
			
		||||
  } = reducerState.toJS();
 | 
			
		||||
  const { formattedContentTypeLayout, isDraggingComponent } = reducerState.toJS();
 | 
			
		||||
 | 
			
		||||
  // We can't use the getQueryParameters helper here because the search
 | 
			
		||||
  // can contain 'redirectUrl' several times since we can navigate between documents
 | 
			
		||||
@ -166,14 +143,7 @@ const EditView = ({
 | 
			
		||||
                  } = block;
 | 
			
		||||
                  const { max, min } = getField(name);
 | 
			
		||||
 | 
			
		||||
                  return (
 | 
			
		||||
                    <DynamicZone
 | 
			
		||||
                      key={blockIndex}
 | 
			
		||||
                      name={name}
 | 
			
		||||
                      max={max}
 | 
			
		||||
                      min={min}
 | 
			
		||||
                    />
 | 
			
		||||
                  );
 | 
			
		||||
                  return <DynamicZone key={blockIndex} name={name} max={max} min={min} />;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return (
 | 
			
		||||
@ -182,23 +152,14 @@ const EditView = ({
 | 
			
		||||
                      return (
 | 
			
		||||
                        <div className="row" key={fieldsBlockIndex}>
 | 
			
		||||
                          {fieldsBlock.map(({ name, size }, fieldIndex) => {
 | 
			
		||||
                            const isComponent =
 | 
			
		||||
                              getFieldType(name) === 'component';
 | 
			
		||||
                            const isComponent = getFieldType(name) === 'component';
 | 
			
		||||
 | 
			
		||||
                            if (isComponent) {
 | 
			
		||||
                              const componentUid = getFieldComponentUid(name);
 | 
			
		||||
                              const isRepeatable = get(
 | 
			
		||||
                                getField(name),
 | 
			
		||||
                                'repeatable',
 | 
			
		||||
                                false
 | 
			
		||||
                              );
 | 
			
		||||
                              const isRepeatable = get(getField(name), 'repeatable', false);
 | 
			
		||||
                              const { max, min } = getField(name);
 | 
			
		||||
 | 
			
		||||
                              const label = get(
 | 
			
		||||
                                getFieldMetas(name),
 | 
			
		||||
                                'label',
 | 
			
		||||
                                componentUid
 | 
			
		||||
                              );
 | 
			
		||||
                              const label = get(getFieldMetas(name), 'label', componentUid);
 | 
			
		||||
 | 
			
		||||
                              return (
 | 
			
		||||
                                <FieldComponent
 | 
			
		||||
@ -217,9 +178,7 @@ const EditView = ({
 | 
			
		||||
                              <div className={`col-${size}`} key={name}>
 | 
			
		||||
                                <Inputs
 | 
			
		||||
                                  autoFocus={
 | 
			
		||||
                                    blockIndex === 0 &&
 | 
			
		||||
                                    fieldsBlockIndex === 0 &&
 | 
			
		||||
                                    fieldIndex === 0
 | 
			
		||||
                                    blockIndex === 0 && fieldsBlockIndex === 0 && fieldIndex === 0
 | 
			
		||||
                                  }
 | 
			
		||||
                                  keys={name}
 | 
			
		||||
                                  layout={currentContentTypeLayoutData}
 | 
			
		||||
@ -239,9 +198,7 @@ const EditView = ({
 | 
			
		||||
 | 
			
		||||
            <div className="col-md-12 col-lg-3">
 | 
			
		||||
              {currentContentTypeLayoutRelations.length > 0 && (
 | 
			
		||||
                <SubWrapper
 | 
			
		||||
                  style={{ padding: '0 20px 1px', marginBottom: '25px' }}
 | 
			
		||||
                >
 | 
			
		||||
                <SubWrapper style={{ padding: '0 20px 1px', marginBottom: '25px' }}>
 | 
			
		||||
                  <div style={{ paddingTop: '22px' }}>
 | 
			
		||||
                    {currentContentTypeLayoutRelations.map(relationName => {
 | 
			
		||||
                      const relation = get(
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,7 @@ import { cloneDeep, get, isEmpty, isEqual, set } from 'lodash';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import React, { useEffect, useReducer, useState } from 'react';
 | 
			
		||||
import { Prompt, useParams, useRouteMatch } from 'react-router-dom';
 | 
			
		||||
import {
 | 
			
		||||
  LoadingIndicatorPage,
 | 
			
		||||
  request,
 | 
			
		||||
  useGlobalContext,
 | 
			
		||||
} from 'strapi-helper-plugin';
 | 
			
		||||
import { LoadingIndicatorPage, request, useGlobalContext } from 'strapi-helper-plugin';
 | 
			
		||||
import EditViewDataManagerContext from '../../contexts/EditViewDataManager';
 | 
			
		||||
import pluginId from '../../pluginId';
 | 
			
		||||
import init from './init';
 | 
			
		||||
@ -21,12 +17,7 @@ import {
 | 
			
		||||
 | 
			
		||||
const getRequestUrl = path => `/${pluginId}/explorer/${path}`;
 | 
			
		||||
 | 
			
		||||
const EditViewDataManagerProvider = ({
 | 
			
		||||
  allLayoutData,
 | 
			
		||||
  children,
 | 
			
		||||
  redirectToPreviousPage,
 | 
			
		||||
  slug,
 | 
			
		||||
}) => {
 | 
			
		||||
const EditViewDataManagerProvider = ({ allLayoutData, children, redirectToPreviousPage, slug }) => {
 | 
			
		||||
  const { id } = useParams();
 | 
			
		||||
  // Retrieve the search
 | 
			
		||||
  const [reducerState, dispatch] = useReducer(reducer, initialState, init);
 | 
			
		||||
@ -44,7 +35,10 @@ const EditViewDataManagerProvider = ({
 | 
			
		||||
  const abortController = new AbortController();
 | 
			
		||||
  const { signal } = abortController;
 | 
			
		||||
  const { emitEvent, formatMessage } = useGlobalContext();
 | 
			
		||||
  const isSingleType = useRouteMatch('/plugins/content-manager/singleType');
 | 
			
		||||
  const {
 | 
			
		||||
    params: { contentType },
 | 
			
		||||
  } = useRouteMatch('/plugins/content-manager/:contentType');
 | 
			
		||||
  const isSingleType = contentType === 'singleType';
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    if (!isLoading) {
 | 
			
		||||
@ -75,9 +69,7 @@ const EditViewDataManagerProvider = ({
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const componentsDataStructure = Object.keys(
 | 
			
		||||
      allLayoutData.components
 | 
			
		||||
    ).reduce((acc, current) => {
 | 
			
		||||
    const componentsDataStructure = Object.keys(allLayoutData.components).reduce((acc, current) => {
 | 
			
		||||
      acc[current] = createDefaultForm(
 | 
			
		||||
        get(allLayoutData, ['components', current, 'schema', 'attributes'], {}),
 | 
			
		||||
        allLayoutData.components
 | 
			
		||||
@ -114,11 +106,7 @@ const EditViewDataManagerProvider = ({
 | 
			
		||||
    // eslint-disable-next-line react-hooks/exhaustive-deps
 | 
			
		||||
  }, [id, slug, isCreatingEntry]);
 | 
			
		||||
 | 
			
		||||
  const addComponentToDynamicZone = (
 | 
			
		||||
    keys,
 | 
			
		||||
    componentUid,
 | 
			
		||||
    shouldCheckErrors = false
 | 
			
		||||
  ) => {
 | 
			
		||||
  const addComponentToDynamicZone = (keys, componentUid, shouldCheckErrors = false) => {
 | 
			
		||||
    emitEvent('addComponentToDynamicZone');
 | 
			
		||||
    dispatch({
 | 
			
		||||
      type: 'ADD_COMPONENT_TO_DYNAMIC_ZONE',
 | 
			
		||||
@ -144,11 +132,7 @@ const EditViewDataManagerProvider = ({
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const addRepeatableComponentToField = (
 | 
			
		||||
    keys,
 | 
			
		||||
    componentUid,
 | 
			
		||||
    shouldCheckErrors = false
 | 
			
		||||
  ) => {
 | 
			
		||||
  const addRepeatableComponentToField = (keys, componentUid, shouldCheckErrors = false) => {
 | 
			
		||||
    dispatch({
 | 
			
		||||
      type: 'ADD_REPEATABLE_COMPONENT_TO_FIELD',
 | 
			
		||||
      keys: keys.split('.'),
 | 
			
		||||
@ -358,9 +342,7 @@ const EditViewDataManagerProvider = ({
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const shouldCheckDZErrors = dzName => {
 | 
			
		||||
    const doesDZHaveError = Object.keys(formErrors).some(
 | 
			
		||||
      key => key.split('.')[0] === dzName
 | 
			
		||||
    );
 | 
			
		||||
    const doesDZHaveError = Object.keys(formErrors).some(key => key.split('.')[0] === dzName);
 | 
			
		||||
    const shouldCheckErrors = !isEmpty(formErrors) && doesDZHaveError;
 | 
			
		||||
 | 
			
		||||
    return shouldCheckErrors;
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,8 @@ import React, { Suspense, lazy, useEffect, useRef } from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import { connect } from 'react-redux';
 | 
			
		||||
import { bindActionCreators, compose } from 'redux';
 | 
			
		||||
import { Switch, Route } from 'react-router-dom';
 | 
			
		||||
import {
 | 
			
		||||
  LoadingIndicatorPage,
 | 
			
		||||
  useGlobalContext,
 | 
			
		||||
  request,
 | 
			
		||||
} from 'strapi-helper-plugin';
 | 
			
		||||
import { Switch, Route, useRouteMatch } from 'react-router-dom';
 | 
			
		||||
import { LoadingIndicatorPage, useGlobalContext, request } from 'strapi-helper-plugin';
 | 
			
		||||
import { DndProvider } from 'react-dnd';
 | 
			
		||||
import HTML5Backend from 'react-dnd-html5-backend';
 | 
			
		||||
import pluginId from '../../pluginId';
 | 
			
		||||
@ -25,12 +21,8 @@ import reducer from './reducer';
 | 
			
		||||
import makeSelectMain from './selectors';
 | 
			
		||||
 | 
			
		||||
const EditSettingsView = lazy(() => import('../EditSettingsView'));
 | 
			
		||||
const CollectionTypeRecursivePath = lazy(() =>
 | 
			
		||||
  import('../CollectionTypeRecursivePath')
 | 
			
		||||
);
 | 
			
		||||
const SingleTypeRecursivePath = lazy(() =>
 | 
			
		||||
  import('../SingleTypeRecursivePath')
 | 
			
		||||
);
 | 
			
		||||
const CollectionTypeRecursivePath = lazy(() => import('../CollectionTypeRecursivePath'));
 | 
			
		||||
const SingleTypeRecursivePath = lazy(() => import('../SingleTypeRecursivePath'));
 | 
			
		||||
 | 
			
		||||
function Main({
 | 
			
		||||
  deleteLayout,
 | 
			
		||||
@ -50,7 +42,9 @@ function Main({
 | 
			
		||||
  strapi.useInjectReducer({ key: 'main', reducer, pluginId });
 | 
			
		||||
 | 
			
		||||
  const { emitEvent } = useGlobalContext();
 | 
			
		||||
  const slug = pathname.split('/')[4];
 | 
			
		||||
  const {
 | 
			
		||||
    params: { slug },
 | 
			
		||||
  } = useRouteMatch('/plugins/content-manager/:contentType/:slug');
 | 
			
		||||
  const getDataRef = useRef();
 | 
			
		||||
  const getLayoutRef = useRef();
 | 
			
		||||
  const resetPropsRef = useRef();
 | 
			
		||||
@ -74,10 +68,9 @@ function Main({
 | 
			
		||||
 | 
			
		||||
  getLayoutRef.current = async uid => {
 | 
			
		||||
    try {
 | 
			
		||||
      const { data: layout } = await request(
 | 
			
		||||
        getRequestUrl(`content-types/${uid}`),
 | 
			
		||||
        { method: 'GET' }
 | 
			
		||||
      );
 | 
			
		||||
      const { data: layout } = await request(getRequestUrl(`content-types/${uid}`), {
 | 
			
		||||
        method: 'GET',
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      getLayoutSucceeded(layout, uid);
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
@ -86,8 +79,7 @@ function Main({
 | 
			
		||||
  };
 | 
			
		||||
  resetPropsRef.current = resetProps;
 | 
			
		||||
 | 
			
		||||
  const shouldShowLoader =
 | 
			
		||||
    !pathname.includes('ctm-configurations/') && layouts[slug] === undefined;
 | 
			
		||||
  const shouldShowLoader = !pathname.includes('ctm-configurations/') && layouts[slug] === undefined;
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    getDataRef.current();
 | 
			
		||||
@ -114,9 +106,7 @@ function Main({
 | 
			
		||||
      deleteLayouts={deleteLayouts}
 | 
			
		||||
      emitEvent={emitEvent}
 | 
			
		||||
      components={components}
 | 
			
		||||
      componentsAndModelsMainPossibleMainFields={
 | 
			
		||||
        componentsAndModelsMainPossibleMainFields
 | 
			
		||||
      }
 | 
			
		||||
      componentsAndModelsMainPossibleMainFields={componentsAndModelsMainPossibleMainFields}
 | 
			
		||||
      layouts={layouts}
 | 
			
		||||
      models={models}
 | 
			
		||||
      plugins={plugins}
 | 
			
		||||
 | 
			
		||||
@ -2,10 +2,7 @@
 | 
			
		||||
 | 
			
		||||
const _ = require('lodash');
 | 
			
		||||
 | 
			
		||||
const {
 | 
			
		||||
  createModelConfigurationSchema,
 | 
			
		||||
  validateKind,
 | 
			
		||||
} = require('./validation');
 | 
			
		||||
const { createModelConfigurationSchema, validateKind } = require('./validation');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  /**
 | 
			
		||||
@ -27,10 +24,7 @@ module.exports = {
 | 
			
		||||
        if (uid.startsWith('strapi::')) return false;
 | 
			
		||||
        if (uid === 'plugins::upload.file') return false;
 | 
			
		||||
 | 
			
		||||
        if (
 | 
			
		||||
          kind &&
 | 
			
		||||
          _.get(strapi.contentTypes[uid], 'kind', 'collectionType') !== kind
 | 
			
		||||
        ) {
 | 
			
		||||
        if (kind && _.get(strapi.contentTypes[uid], 'kind', 'collectionType') !== kind) {
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -63,14 +57,14 @@ module.exports = {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const service = strapi.plugins['content-manager'].services.contenttypes;
 | 
			
		||||
    const componentService =
 | 
			
		||||
      strapi.plugins['content-manager'].services.components;
 | 
			
		||||
    const componentService = strapi.plugins['content-manager'].services.components;
 | 
			
		||||
 | 
			
		||||
    const contentTypeConfigurations = await service.getConfiguration(uid);
 | 
			
		||||
 | 
			
		||||
    const data = {
 | 
			
		||||
      contentType: {
 | 
			
		||||
        uid,
 | 
			
		||||
        apiID: contentType.modelName,
 | 
			
		||||
        schema: service.formatContentTypeSchema(contentType),
 | 
			
		||||
        ...contentTypeConfigurations,
 | 
			
		||||
      },
 | 
			
		||||
@ -104,10 +98,7 @@ module.exports = {
 | 
			
		||||
 | 
			
		||||
    let input;
 | 
			
		||||
    try {
 | 
			
		||||
      input = await createModelConfigurationSchema(
 | 
			
		||||
        contentType,
 | 
			
		||||
        schema
 | 
			
		||||
      ).validate(body, {
 | 
			
		||||
      input = await createModelConfigurationSchema(contentType, schema).validate(body, {
 | 
			
		||||
        abortEarly: false,
 | 
			
		||||
        stripUnknown: true,
 | 
			
		||||
        strict: true,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user