diff --git a/packages/next/src/views/Edit/index.client.tsx b/packages/next/src/views/Edit/index.client.tsx index 159e90f72..1fcaec44e 100644 --- a/packages/next/src/views/Edit/index.client.tsx +++ b/packages/next/src/views/Edit/index.client.tsx @@ -13,7 +13,7 @@ import React, { Fragment, useEffect } from 'react' import { useCallback } from 'react' export const EditViewClient: React.FC = () => { - const { collectionSlug, getDocPermissions, getVersions, globalSlug, isEditing, setDocumentInfo } = + const { collectionSlug, getDocPermissions, getVersions, globalSlug, isEditing, setOnSave } = useDocumentInfo() const { @@ -58,10 +58,8 @@ export const EditViewClient: React.FC = () => { ) useEffect(() => { - setDocumentInfo({ - onSave, - }) - }, [setDocumentInfo, onSave]) + setOnSave(onSave) + }, [setOnSave, onSave]) // Allow the `DocumentInfoProvider` to hydrate if (!Edit || (!collectionSlug && !globalSlug)) { diff --git a/packages/ui/src/elements/Localizer/index.tsx b/packages/ui/src/elements/Localizer/index.tsx index fe4b06095..ff019f476 100644 --- a/packages/ui/src/elements/Localizer/index.tsx +++ b/packages/ui/src/elements/Localizer/index.tsx @@ -50,6 +50,7 @@ const Localizer: React.FC<{ }, }), ) + router.refresh() close() }} > diff --git a/packages/ui/src/elements/PublishMany/index.tsx b/packages/ui/src/elements/PublishMany/index.tsx index 77a063b4e..a8e4a8b08 100644 --- a/packages/ui/src/elements/PublishMany/index.tsx +++ b/packages/ui/src/elements/PublishMany/index.tsx @@ -98,6 +98,8 @@ export const PublishMany: React.FC = (props) => { slug, t, toggleModal, + router, + stringifyParams, ]) if (!versions?.drafts || selectAll === SelectAllStatus.None || !hasPermission) { diff --git a/packages/ui/src/elements/UnpublishMany/index.tsx b/packages/ui/src/elements/UnpublishMany/index.tsx index ca834aaf7..652455e33 100644 --- a/packages/ui/src/elements/UnpublishMany/index.tsx +++ b/packages/ui/src/elements/UnpublishMany/index.tsx @@ -94,6 +94,8 @@ export const UnpublishMany: React.FC = (props) => { slug, t, toggleModal, + router, + stringifyParams, ]) if (!versions?.drafts || selectAll === SelectAllStatus.None || !hasPermission) { diff --git a/packages/ui/src/providers/DocumentInfo/index.tsx b/packages/ui/src/providers/DocumentInfo/index.tsx index eac35e4e4..a0901e0a1 100644 --- a/packages/ui/src/providers/DocumentInfo/index.tsx +++ b/packages/ui/src/providers/DocumentInfo/index.tsx @@ -20,7 +20,6 @@ import { useConfig } from '../Config/index.js' import { useLocale } from '../Locale/index.js' import { usePreferences } from '../Preferences/index.js' import { useTranslation } from '../Translation/index.js' -import { documentInfoReducer } from './reducer.js' const Context = createContext({} as DocumentInfoContext) @@ -32,20 +31,11 @@ export const DocumentInfoProvider: React.FC< DocumentInfoProps & { children: React.ReactNode } -> = ({ children, ...rest }) => { - const [documentInfo, dispatchDocumentInfo] = useReducer(documentInfoReducer, rest) +> = ({ children, ...props }) => { + const [documentTitle, setDocumentTitle] = useState(props.title) + const [onSave, setOnSave] = useState(() => props.onSave) - const setDocumentInfo = useCallback( - (newInfo: DocumentInfo) => { - dispatchDocumentInfo({ - type: 'SET_DOC_INFO', - payload: newInfo, - }) - }, - [dispatchDocumentInfo], - ) - - const { id, collectionSlug, globalSlug } = documentInfo + const { id, collectionSlug, globalSlug } = props const { collections, @@ -69,13 +59,6 @@ export const DocumentInfoProvider: React.FC< const [unpublishedVersions, setUnpublishedVersions] = useState>>(null) - const setDocumentTitle = useCallback((title: string) => { - dispatchDocumentInfo({ - type: 'SET_DOC_TITLE', - payload: title, - }) - }, []) - const baseURL = `${serverURL}${api}` let slug: string let pluralType: 'collections' | 'globals' @@ -285,9 +268,13 @@ export const DocumentInfoProvider: React.FC< void getVersions() }, [getVersions]) + useEffect(() => { + setDocumentTitle(props.title) + }, [props.title]) + useEffect(() => { const loadDocPermissions = async () => { - const docPermissions: DocumentPermissions = rest.docPermissions + const docPermissions: DocumentPermissions = props.docPermissions if (!docPermissions) await getDocPermissions() else setDocPermissions(docPermissions) } @@ -295,37 +282,21 @@ export const DocumentInfoProvider: React.FC< if (collectionSlug || globalSlug) { void loadDocPermissions() } - }, [getDocPermissions, rest.docPermissions, setDocPermissions, collectionSlug, globalSlug]) - - useEffect(() => { - const loadDocPreferences = async () => { - let docPreferences: DocumentPreferences = rest.docPreferences - if (!docPreferences) docPreferences = await getDocPreferences() - - dispatchDocumentInfo({ - type: 'SET_DOC_INFO', - payload: { - docPreferences, - }, - }) - } - - if (id) { - void loadDocPreferences() - } - }, [getDocPreferences, preferencesKey, rest.docPreferences, id]) + }, [getDocPermissions, props.docPermissions, setDocPermissions, collectionSlug, globalSlug]) const value: DocumentInfoContext = { - ...documentInfo, + ...props, docConfig, docPermissions, getDocPermissions, getDocPreferences, getVersions, + onSave, publishedDoc, setDocFieldPreferences, - setDocumentInfo, setDocumentTitle, + setOnSave, + title: documentTitle, unpublishedVersions, versions, } diff --git a/packages/ui/src/providers/DocumentInfo/reducer.ts b/packages/ui/src/providers/DocumentInfo/reducer.ts deleted file mode 100644 index 001ef9e61..000000000 --- a/packages/ui/src/providers/DocumentInfo/reducer.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { DocumentInfo } from './index.js' - -type SET = { - payload: Partial - type: 'SET_DOC_INFO' -} - -type SET_TITLE = { - payload: string - type: 'SET_DOC_TITLE' -} - -type RESET = { - payload: DocumentInfo - type: 'RESET_DOC_INFO' -} - -type Action = RESET | SET | SET_TITLE - -export const documentInfoReducer = (state: DocumentInfo, action: Action): DocumentInfo => { - switch (action.type) { - case 'SET_DOC_INFO': - return { - ...state, - ...action.payload, - } - case 'SET_DOC_TITLE': - return { - ...state, - title: action.payload, - } - case 'RESET_DOC_INFO': - return { - ...action.payload, - } - default: - return state - } -} diff --git a/packages/ui/src/providers/DocumentInfo/types.ts b/packages/ui/src/providers/DocumentInfo/types.ts index add6c0f2b..ba54723cc 100644 --- a/packages/ui/src/providers/DocumentInfo/types.ts +++ b/packages/ui/src/providers/DocumentInfo/types.ts @@ -48,6 +48,6 @@ export type DocumentInfoContext = Omit & { getDocPreferences: () => Promise<{ [key: string]: unknown }> getVersions: () => Promise setDocFieldPreferences: (field: string, fieldPreferences: { [key: string]: unknown }) => void - setDocumentInfo?: React.Dispatch>> setDocumentTitle: (title: string) => void + setOnSave: (data: Data) => Promise | void } diff --git a/test/_community/config.ts b/test/_community/config.ts index 9caac4a1c..f335261ee 100644 --- a/test/_community/config.ts +++ b/test/_community/config.ts @@ -19,7 +19,6 @@ export default buildConfigWithDefaults({ }, onInit: async (payload) => { - console.log('onInit') await payload.create({ collection: 'users', data: {