diff --git a/examples/getstarted/api/rocketship/models/Rocketship.settings.json b/examples/getstarted/api/rocketship/models/Rocketship.settings.json index 60fdbd5149..3a5038aa4b 100644 --- a/examples/getstarted/api/rocketship/models/Rocketship.settings.json +++ b/examples/getstarted/api/rocketship/models/Rocketship.settings.json @@ -7,16 +7,25 @@ }, "options": { "increments": true, - "timestamps": true, + "timestamps": [ + "created_at", + "updated_at" + ], "comment": "" }, "attributes": { "name": { "type": "string" }, - "rocketshipmaker": { - "model": "rocketshipmaker", - "via": "rocketships" + "pic": { + "model": "file", + "via": "related", + "plugin": "upload" + }, + "pictures": { + "collection": "file", + "via": "related", + "plugin": "upload" } } } \ No newline at end of file diff --git a/examples/getstarted/api/rocketshipmaker/models/Rocketshipmaker.settings.json b/examples/getstarted/api/rocketshipmaker/models/Rocketshipmaker.settings.json index 89858fee2e..4d5183d619 100644 --- a/examples/getstarted/api/rocketshipmaker/models/Rocketshipmaker.settings.json +++ b/examples/getstarted/api/rocketshipmaker/models/Rocketshipmaker.settings.json @@ -13,10 +13,6 @@ "attributes": { "name": { "type": "string" - }, - "rocketships": { - "collection": "rocketship", - "via": "rocketshipmaker" } } } \ No newline at end of file diff --git a/examples/getstarted/exports/graphql/schema.graphql b/examples/getstarted/exports/graphql/schema.graphql index 23b5eab8a0..8dee9b2e79 100644 --- a/examples/getstarted/exports/graphql/schema.graphql +++ b/examples/getstarted/exports/graphql/schema.graphql @@ -210,12 +210,12 @@ input editRecipeInput { input editRocketshipInput { name: String - rocketshipmaker: ID + pic: ID + pictures: [ID] } input editRocketshipmakerInput { name: String - rocketships: [ID] } input editRoleInput { @@ -392,7 +392,8 @@ input RecipeInput { type Rocketship { name: String - rocketshipmaker: Rocketshipmaker + pic: UploadFile + pictures(sort: String, limit: Int, start: Int, where: JSON): [UploadFile] id: ID! created_at: DateTime! updated_at: DateTime! @@ -400,12 +401,12 @@ type Rocketship { input RocketshipInput { name: String - rocketshipmaker: ID + pic: ID + pictures: [ID] } type Rocketshipmaker { name: String - rocketships(sort: String, limit: Int, start: Int, where: JSON): [Rocketship] id: ID! created_at: DateTime! updated_at: DateTime! @@ -413,7 +414,6 @@ type Rocketshipmaker { input RocketshipmakerInput { name: String - rocketships: [ID] } input RoleInput { diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Main/actions.js b/packages/strapi-plugin-content-manager/admin/src/containers/Main/actions.js index 9bc85d877f..96625ee4b9 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/Main/actions.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/Main/actions.js @@ -7,6 +7,7 @@ import { GET_LAYOUT_SUCCEEDED, ON_CHANGE_LIST_LABELS, RESET_LIST_LABELS, + RESET_PROPS, } from './constants'; export function deleteLayout(uid) { @@ -67,3 +68,9 @@ export function resetListLabels(slug) { slug, }; } + +export function resetProps() { + return { + type: RESET_PROPS, + }; +} diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Main/constants.js b/packages/strapi-plugin-content-manager/admin/src/containers/Main/constants.js index 389b23a838..201ef178e0 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/Main/constants.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/Main/constants.js @@ -7,3 +7,4 @@ export const GET_LAYOUT_SUCCEEDED = 'ContentManager/Main/GET_LAYOUT_SUCCEEDED'; export const ON_CHANGE_LIST_LABELS = 'ContentManager/Main/ON_CHANGE_LIST_LABELS'; export const RESET_LIST_LABELS = 'ContentManager/Main/RESET_LIST_LABELS'; +export const RESET_PROPS = 'ContentManager/Main/RESET_PROPS'; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js index 1b525bfeea..8d0d21a304 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js @@ -16,7 +16,7 @@ import SettingViewModel from '../SettingViewModel'; import SettingViewGroup from '../SettingViewGroup'; import SettingsView from '../SettingsView'; -import { getData, getLayout } from './actions'; +import { getData, getLayout, resetProps } from './actions'; import reducer from './reducer'; import saga from './saga'; import makeSelectMain from './selectors'; @@ -33,6 +33,7 @@ function Main({ location: { pathname, search }, global: { plugins }, models, + resetProps, }) { strapi.useInjectReducer({ key: 'main', reducer, pluginId }); strapi.useInjectSaga({ key: 'main', saga, pluginId }); @@ -40,15 +41,21 @@ function Main({ const source = getQueryParameters(search, 'source'); const getDataRef = useRef(); const getLayoutRef = useRef(); + const resetPropsRef = useRef(); getDataRef.current = getData; getLayoutRef.current = getLayout; + resetPropsRef.current = resetProps; const shouldShowLoader = slug !== 'ctm-configurations' && layouts[slug] === undefined; useEffect(() => { getDataRef.current(); + + return () => { + resetPropsRef.current(); + }; }, [getDataRef]); useEffect(() => { if (shouldShowLoader) { @@ -118,6 +125,7 @@ Main.propTypes = { search: PropTypes.string, }), models: PropTypes.array.isRequired, + resetProps: PropTypes.func.isRequired, }; const mapStateToProps = makeSelectMain(); @@ -127,6 +135,7 @@ export function mapDispatchToProps(dispatch) { { getData, getLayout, + resetProps, }, dispatch ); diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Main/reducer.js b/packages/strapi-plugin-content-manager/admin/src/containers/Main/reducer.js index e433a504d9..8f3acac48a 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/Main/reducer.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/Main/reducer.js @@ -11,6 +11,7 @@ import { GET_LAYOUT_SUCCEEDED, ON_CHANGE_LIST_LABELS, RESET_LIST_LABELS, + RESET_PROPS, } from './constants'; export const initialState = fromJS({ @@ -58,6 +59,8 @@ function mainReducer(state = initialState, action) { return state.updateIn(['layouts', action.slug], () => state.getIn(['initialLayouts', action.slug]) ); + case RESET_PROPS: + return initialState; default: return state; } diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingViewModel/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingViewModel/index.js index 712eabd54b..1f53aa0324 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingViewModel/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingViewModel/index.js @@ -129,7 +129,6 @@ function SettingViewModel({ }, [modifiedData]); // Retrieve the metadatas for the field's form of the edit view - // Doesn't need to be a function const getSelectedItemMetas = useCallback(() => { return get(modifiedData, ['metadatas', itemNameToSelect, 'edit'], null); }, [modifiedData, itemNameToSelect]);