From 11d51c99e93c3211b5fd41eb4442cc6d8822ea1e Mon Sep 17 00:00:00 2001 From: cyril lopez Date: Thu, 31 Aug 2017 11:01:59 +0200 Subject: [PATCH] Format model data to match inputs requirements --- .../src/components/AttributeRow/index.js | 2 +- .../admin/src/components/PopUpForm/index.js | 4 +-- .../admin/src/containers/Form/actions.js | 2 +- .../admin/src/containers/ModelPage/actions.js | 16 ++++++++-- .../admin/src/containers/ModelPage/sagas.js | 32 ++++++++----------- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js index 6babaf2f96..e8bde872be 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js @@ -44,7 +44,7 @@ class AttributeRow extends React.Component { // eslint-disable-line react/prefer this.setState({ showWarning: false }); } - toggleModalWarning = (e) => { + toggleModalWarning = () => { // e.preventDefault(); // e.stopPropagation() this.setState({ showWarning: !this.state.showWarning }); diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js index f6626701cf..6f34e45d28 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js @@ -6,7 +6,7 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; -import { map, includes, split } from 'lodash'; +import { map, includes, split, isEmpty } from 'lodash'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import Input from 'components/Input'; import PopUpHeaderNavLink from 'components/PopUpHeaderNavLink'; @@ -20,7 +20,7 @@ class PopUpForm extends React.Component { // eslint-disable-line react/prefer-st const shouldOverrideRendering = this.props.overrideRenderInputCondition ? this.props.overrideRenderInputCondition(item) : false; - const value = this.props.values[item.target] && includes(item.target, '.') ? this.props.values[split(item.target, '.')[0]][split(item.target, '.')[1]] : this.props.values[item.target]; + const value = !isEmpty(this.props.values) && includes(item.target, '.') ? this.props.values[split(item.target, '.')[0]][split(item.target, '.')[1]] : this.props.values[item.target]; if (shouldOverrideRendering) { return this.props.overrideRenderInput(item, key); diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js index 24d2c87835..ce594db9d5 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js @@ -131,7 +131,7 @@ export function setAttributeForm(hash) { type: formType, required: true, // TODO remove with correct value - // minLength: true, + minLength: true, // minLengthValue: 0, }), }); diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js index eb21280b81..be05b4e2ed 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js @@ -3,7 +3,7 @@ * ModelPage actions * */ -import { get } from 'lodash'; +import { forEach, get, includes, map, set } from 'lodash'; import { storeData } from '../../utils/storeData'; import { @@ -62,7 +62,19 @@ export function modelFetch(modelName) { }; } -export function modelFetchSucceeded(model) { +export function modelFetchSucceeded(data) { + const model = data; + const defaultKeys = ['required', 'unique', 'type']; + + forEach(model.model.attributes, (attribute, index) => { + map(attribute.params, (value, key) => { + if (!includes(defaultKeys, key) && value) { + set(model.model.attributes[index].params, `${key}Value`, value); + set(model.model.attributes[index].params, key, true); + } + }); + }); + return { type: MODEL_FETCH_SUCCEEDED, model, diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js index a894ced987..5b3fd02072 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js @@ -1,5 +1,5 @@ import { LOCATION_CHANGE } from 'react-router-redux'; -import { get } from 'lodash'; +import { forEach, get, includes, map, replace, set, unset } from 'lodash'; import { takeLatest } from 'redux-saga'; import { call, take, put, fork, cancel, select } from 'redux-saga/effects'; @@ -13,24 +13,6 @@ import { MODEL_FETCH, SUBMIT } from './constants'; import { modelFetchSucceeded, postContentTypeSucceeded } from './actions'; import { makeSelectModel } from './selectors'; -// Individual exports for testing -// export function* attributeDelete(action) { -// try { -// if (action.sendRequest) { -// const body = yield select(makeSelectModel()); -// const requestUrl = `/content-type-builder/models/${action.modelName}`; -// const opts = { -// method: 'PUT', -// body, -// }; -// -// yield call(request, requestUrl, opts); -// } -// } catch(error) { -// window.Strapi.notification.error('An error occured'); -// } -// } - export function* fetchModel(action) { try { const requestUrl = `/content-type-builder/models/${action.modelName}`; @@ -49,6 +31,18 @@ export function* submitChanges() { const modelName = get(storeData.getContentType(), 'name'); const body = yield select(makeSelectModel()); + map(body.attributes, (attribute, index) => { + forEach(attribute.params, (value, key) => { + if (includes(key, 'Value')) { + set(body.attributes[index].params, replace(key, 'Value', ''), value); + unset(body.attributes[index].params, key); + } + + if (!value) { + unset(body.attributes[index].params, key); + } + }); + }) const method = modelName === body.name ? 'POST' : 'PUT'; const baseUrl = '/content-type-builder/models/';