useAddRevisionAfterMutation
This hook registers a mutation middleware that automatically creates a revision after a successful create or update operation.
This middleware reads the revision metadata from a field named after the REVISION_FIELD constant, then removes it from the form data before saving the record.
The REVISION_FIELD constant can be imported from @react-admin/ra-core-ee.
This feature requires a valid is an Enterprise Edition subscription.
Below is an example showing how to override the SaveContext to provide the revision metadata when saving a form:
import React, { ReactNode, useMemo } from 'react';import { EditBase, SaveContextProvider, useSaveContext, type SaveContextValue,} from 'ra-core';import { SimpleForm, TextInput, DeleteButton } from 'my-react-admin-ui-library';import { useAddRevisionAfterMutation, useGenerateChangeMessage, REVISION_FIELD,} from '@react-admin/ra-core-ee';
export const ProductEdit = () => ( <EditBase> <CreateRevisionOnSave> <SimpleForm> <TextInput source="reference" /> <TextInput source="category" /> </SimpleForm> </CreateRevisionOnSave> </EditBase>);
const CreateRevisionOnSave = ({ children }: { children: ReactNode }) => { const originalSaveContext = useSaveContext(); useAddRevisionAfterMutation(); const generateChangeMessage = useGenerateChangeMessage();
// Wrap the original save function to add the revision data before saving const saveContext = useMemo<SaveContextValue>( () => ({ ...originalSaveContext, save: async (record, callbacks) => originalSaveContext.save!( { ...record, // Store the revision metadata in a special field that will be removed by the middleware [REVISION_FIELD]: { message: generateChangeMessage({ data: record }), description: '', authorId: 'john', }, }, callbacks ), }), [generateChangeMessage, originalSaveContext] );
return ( <SaveContextProvider value={saveContext}> {children} </SaveContextProvider> );};Tip: This example also leverages the useGenerateChangeMessage hook to automatically generate a revision message based on the changes made in the form.