useGetLock

This Enterprise Edition hook gets the lock status for a record. It calls dataProvider.getLock() on mount.

Usage

import { useGetLock } from '@react-admin/ra-realtime';

const { data, isLoading } = useGetLock(resource, { id });

Here is a custom form Toolbar that displays the lock status of the current record:

import {
    Toolbar,
    SaveButton,
    useGetIdentity,
    useResourceContext,
    useRecordContext,
} from 'react-admin';
import { useGetLock } from '@react-admin/ra-enterprise';

const CustomToolbar = () => {
    const resource = useResourceContext();
    const record = useRecordContext();
    const { isLoading: identityLoading, identity } = useGetIdentity();
    const { isLoading: lockLoading, data: lock } = useGetLock(resource, {
        id: record.id,
    });

    if (identityLoading || lockLoading) {
        return null;
    }

    const isLockedByOtherUser = lock?.identity !== identity.id;

    return (
        <Toolbar>
            <SaveButton disabled={isLockedByOtherUser} />
            {isLockedByOtherUser && (
                <LockMessage>
                    {`This record is locked by another user: ${lock?.dentity}.`}
                </LockMessage>
            )}
        </Toolbar>
    );
};

Parameters

  • resource: the resource name (e.g. 'posts')
  • params: an object with the following properties:
    • id: the record id (e.g. 123)
    • meta: Optional. an object that will be forwarded to the dataProvider

Live Version

To get the list of locks update in real time based on the lock/[resource] topic, use the useGetLockLive hook instead.