From 67a503d9ccf31337a89266f98b28d28db7d157b9 Mon Sep 17 00:00:00 2001 From: Bassel Kanso Date: Tue, 19 Mar 2024 16:23:27 +0200 Subject: [PATCH] fix(ctb): refetch data after save or update (#19844) --- .../components/DataManagerProvider/DataManagerProvider.tsx | 7 ++++++- .../admin/src/components/DataManagerProvider/constants.ts | 1 + .../admin/src/components/DataManagerProvider/reducer.ts | 5 +++++ .../admin/src/contexts/DataManagerContext.ts | 2 +- .../admin/src/pages/ListView/ListView.tsx | 2 +- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/DataManagerProvider.tsx b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/DataManagerProvider.tsx index 97e066211f..14b9cac08b 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/DataManagerProvider.tsx +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/DataManagerProvider.tsx @@ -42,6 +42,7 @@ import { REMOVE_FIELD_FROM_DISPLAYED_COMPONENT, SET_MODIFIED_DATA, UPDATE_SCHEMA, + UPDATE_INITIAL_STATE, } from './constants'; import { makeSelectDataManagerProvider } from './selectors'; import { formatMainDataType, getComponentsToPost, sortContentType } from './utils/cleanData'; @@ -552,7 +553,7 @@ const DataManagerProvider = ({ children }: DataManagerProviderProps) => { await serverRestartWatcher(true); // Unlock the app - await unlockAppWithAutoreload?.(); + unlockAppWithAutoreload?.(); if ( isCreating && @@ -576,6 +577,10 @@ const DataManagerProvider = ({ children }: DataManagerProviderProps) => { trackUsage('didSaveComponent'); } + // refetch and update initial state after the data has been saved + await getDataRef.current(); + dispatch({ type: UPDATE_INITIAL_STATE }); + // Update the app's permissions await updatePermissions(); } catch (err: any) { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/constants.ts b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/constants.ts index 8ef9bd6b24..58fad2b1fa 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/constants.ts +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/constants.ts @@ -21,3 +21,4 @@ export const REMOVE_COMPONENT_FROM_DYNAMIC_ZONE = export const REMOVE_FIELD = 'ContentTypeBuilder/DataManagerProvider/REMOVE_FIELD'; export const SET_MODIFIED_DATA = 'ContentTypeBuilder/DataManagerProvider/SET_MODIFIED_DATA'; export const UPDATE_SCHEMA = 'ContentTypeBuilder/DataManagerProvider/UPDATE_SCHEMA'; +export const UPDATE_INITIAL_STATE = 'ContentTypeBuilder/DataManagerProvider/UPDATE_INITIAL_STATE'; diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.ts b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.ts index e26979e98a..3b29a16c9a 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.ts +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.ts @@ -545,6 +545,11 @@ const reducer = (state = initialState, action: Action) => break; } + case actions.UPDATE_INITIAL_STATE: { + draftState.initialData = draftState.modifiedData; + + break; + } case actions.DELETE_NOT_SAVED_TYPE: { // Doing so will also reset the modified and the initial data draftState.contentTypes = state.initialContentTypes; diff --git a/packages/core/content-type-builder/admin/src/contexts/DataManagerContext.ts b/packages/core/content-type-builder/admin/src/contexts/DataManagerContext.ts index acd9b640f3..9884e11d19 100644 --- a/packages/core/content-type-builder/admin/src/contexts/DataManagerContext.ts +++ b/packages/core/content-type-builder/admin/src/contexts/DataManagerContext.ts @@ -41,7 +41,7 @@ export interface DataManagerContextValue { removeComponentFromDynamicZone: (dzName: string, componentToRemoveIndex: number) => void; setModifiedData: () => void; sortedContentTypesList: any[]; // Define the actual type - submitData: (additionalContentTypeData?: Record) => void; + submitData: (additionalContentTypeData?: Record) => Promise; updateSchema: (data: Record, schemaType: SchemaType, componentUID: UID.Any) => void; components: Record; componentsGroupedByCategory: Record; diff --git a/packages/core/content-type-builder/admin/src/pages/ListView/ListView.tsx b/packages/core/content-type-builder/admin/src/pages/ListView/ListView.tsx index 02c6c40b39..eb8b5e3d71 100644 --- a/packages/core/content-type-builder/admin/src/pages/ListView/ListView.tsx +++ b/packages/core/content-type-builder/admin/src/pages/ListView/ListView.tsx @@ -139,7 +139,7 @@ const ListView = () => { )}