useGetLocks
This Enterprise Edition hook gets all the locks for a given resource. Calls
dataProvider.getLocks()
on mount.
Usage
import { useGetLocks } from '@react-admin/ra-realtime';
const { data } = useGetLocks('posts');
Here is how to use it in a custom <DataTable>
, to disable edit and delete buttons for locked records:
const MyPostGrid = () => {
const resource = useResourceContext();
const { data: locks } = useGetLocks(resource);
return (
<DataTable
bulkActionButtons={false}
>
<DataTable.Col label="Title">
<MyPostTitle locks={locks} />
</DataTable.Col>
<DataTable.Col label="Actions" align="right">
<MyPostActions locks={locks} />
</DataTable.Col>
</DataTable>
);
};
const MyPostTitle = ({ locks }: { locks: Lock[] }) => {
const record = useRecordContext();
const lock = locks.find(l => l.recordId === record.id);
return (
<>
<TextField source="title" />
{lock && (
<span style={{ color: 'red' }}>
{` (Locked by ${lock.identity})`}
</span>
)}
</>
);
};
const MyPostActions = ({ locks }: { locks: Lock[] }) => {
const record = useRecordContext();
const locked = locks.find(l => l.recordId === record.id);
return (
<>
<DeleteButton disabled={!!locked} />
<LockableEditButton disabled={!!locked} />
</>
);
};