From e2bb3916a2373332d39b93432658a0b55021913d Mon Sep 17 00:00:00 2001 From: HichamELBSI Date: Mon, 4 May 2020 18:31:24 +0200 Subject: [PATCH] Fix default value for Date input in CTB Signed-off-by: HichamELBSI --- .../admin/src/containers/FormModal/reducer.js | 10 +++++ .../FormModal/tests/reducer.test.js | 43 +++++++++++++++++++ .../src/containers/FormModal/utils/forms.js | 5 ++- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/reducer.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/reducer.js index 1cb4c9fdab..27199ab792 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/reducer.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/reducer.js @@ -40,6 +40,16 @@ const reducer = (state, action) => { value, oneThatIsCreatingARelationWithAnother, } = action; + const hasDefaultValue = Boolean(obj.getIn(['default'])); + + // There is no need to remove the default key if the default value isn't defined + if (hasDefaultValue && keys.length === 1 && keys.includes('type')) { + const previousType = obj.getIn(['type']); + + if (previousType && ['date', 'datetime', 'time'].includes(previousType)) { + return obj.updateIn(keys, () => value).remove('default'); + } + } if (keys.length === 1 && keys.includes('nature')) { return obj diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/tests/reducer.test.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/tests/reducer.test.js index 1e9d69ddda..f64048daf3 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/tests/reducer.test.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/tests/reducer.test.js @@ -217,6 +217,49 @@ describe('CTB | containers | FormModal | reducer | actions', () => { expect(reducer(state, action)).toEqual(expected); }); + + it('should remove the default value if the type of date input type has been changed', () => { + const state = initialState.setIn( + ['modifiedData'], + fromJS({ + name: 'short_movie_time', + type: 'time', + default: '00:30:00', + }) + ); + const action = { + type: 'ON_CHANGE', + keys: ['type'], + value: 'datetime', + }; + const expected = state + .setIn(['modifiedData', 'name'], 'short_movie_time') + .setIn(['modifiedData', 'type'], 'datetime') + .removeIn(['modifiedData', 'default']); + + expect(reducer(state, action)).toEqual(expected); + }); + + it('should not remove the default value if the type of another input type has been changed', () => { + const state = initialState.setIn( + ['modifiedData'], + fromJS({ + name: 'number_of_movies', + type: 'integer', + default: '0', + }) + ); + const action = { + type: 'ON_CHANGE', + keys: ['type'], + value: 'biginteger', + }; + const expected = state + .setIn(['modifiedData', 'name'], 'number_of_movies') + .setIn(['modifiedData', 'type'], 'biginteger'); + + expect(reducer(state, action)).toEqual(expected); + }); }); describe('ON_CHANGE_ALLOWED_TYPE', () => { diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js index f4f25e6a0e..891c4af234 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/FormModal/utils/forms.js @@ -488,10 +488,11 @@ const forms = { items.splice(0, 1, [ { ...fields.default, - type: 'date', + type: data.type || 'date', value: null, withDefaultValue: false, - disabled: data.type !== 'date', + disabled: !data.type, + autoFocus: false, }, ]); } else if (type === 'richtext') {