diff --git a/src/admin/components/elements/DocumentDrawer/types.ts b/src/admin/components/elements/DocumentDrawer/types.ts index 6c88e4379c..9592b2a750 100644 --- a/src/admin/components/elements/DocumentDrawer/types.ts +++ b/src/admin/components/elements/DocumentDrawer/types.ts @@ -1,14 +1,10 @@ import React, { HTMLAttributes } from 'react'; -import { SanitizedCollectionConfig } from '../../../../collections/config/types'; +import { Props as EditViewProps } from '../../views/collections/Edit/types'; export type DocumentDrawerProps = { collectionSlug: string id?: string - onSave?: (json: { - doc: Record - message: string - collectionConfig: SanitizedCollectionConfig - }) => void + onSave?: EditViewProps['onSave'] customHeader?: React.ReactNode drawerSlug?: string } diff --git a/src/admin/components/forms/field-types/Relationship/AddNew/index.tsx b/src/admin/components/forms/field-types/Relationship/AddNew/index.tsx index d778373feb..95866014a4 100644 --- a/src/admin/components/forms/field-types/Relationship/AddNew/index.tsx +++ b/src/admin/components/forms/field-types/Relationship/AddNew/index.tsx @@ -11,6 +11,7 @@ import { getTranslation } from '../../../../../../utilities/getTranslation'; import Tooltip from '../../../../elements/Tooltip'; import { useDocumentDrawer } from '../../../../elements/DocumentDrawer'; import { useConfig } from '../../../../utilities/Config'; +import { Props as EditViewProps } from '../../../../views/collections/Edit/types'; import './index.scss'; @@ -36,7 +37,7 @@ export const AddNewRelation: React.FC = ({ path, hasMany, relationTo, val collectionSlug: collectionConfig?.slug, }); - const onSave = useCallback((json) => { + const onSave: EditViewProps['onSave'] = useCallback((json) => { const newValue = Array.isArray(relationTo) ? { relationTo: collectionConfig.slug, value: json.doc.id, diff --git a/src/admin/components/views/collections/Edit/Default.tsx b/src/admin/components/views/collections/Edit/Default.tsx index 2d7ed5d16e..8fe8bb15eb 100644 --- a/src/admin/components/views/collections/Edit/Default.tsx +++ b/src/admin/components/views/collections/Edit/Default.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useCallback } from 'react'; import { Link } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useConfig } from '../../../utilities/Config'; @@ -43,7 +43,7 @@ const DefaultEditView: React.FC = (props) => { collection, isEditing, data, - onSave, + onSave: onSaveFromProps, permissions, isLoading, internalState, @@ -78,6 +78,15 @@ const DefaultEditView: React.FC = (props) => { isEditing && `${baseClass}--is-editing`, ].filter(Boolean).join(' '); + const onSave = useCallback((json) => { + if (typeof onSaveFromProps === 'function') { + onSaveFromProps({ + ...json, + operation: id ? 'update' : 'create', + }); + } + }, [id, onSaveFromProps]); + const operation = isEditing ? 'update' : 'create'; return ( diff --git a/src/admin/components/views/collections/Edit/types.ts b/src/admin/components/views/collections/Edit/types.ts index 0560a0671b..1e250fc61a 100644 --- a/src/admin/components/views/collections/Edit/types.ts +++ b/src/admin/components/views/collections/Edit/types.ts @@ -11,7 +11,12 @@ export type IndexProps = { export type Props = IndexProps & { data: Document - onSave?: () => void + onSave?: (json: Record & { + doc: Record + message: string + collectionConfig: SanitizedCollectionConfig + operation: 'create' | 'update', + }) => void id?: string permissions: CollectionPermission isLoading: boolean