UNPKG

@sanity/visual-editing

Version:

[![npm stat](https://img.shields.io/npm/dm/@sanity/visual-editing.svg?style=flat-square)](https://npm-stat.com/charts.html?package=@sanity/visual-editing) [![npm version](https://img.shields.io/npm/v/@sanity/visual-editing.svg?style=flat-square)](https://

30 lines (25 loc) 673 B
import {useCallback, useMemo, useSyncExternalStore} from 'react' import { actor, emptyActor, isEmptyActor, listeners, type EmptyActor, type MutatorActor, } from '../optimistic/context' export function useOptimisticActor(): MutatorActor | EmptyActor { const subscribe = useCallback((listener: () => void) => { listeners.add(listener) return () => listeners.delete(listener) }, []) const actorRef = useSyncExternalStore( subscribe, () => actor, () => emptyActor, ) return actorRef } export function useOptimisticActorReady(): boolean { const actor = useOptimisticActor() return useMemo(() => !isEmptyActor(actor), [actor]) }