(elementId: string)
| 55 | // In order minimize re-renders, we subscribe to both separately, but only re-render unnecessarily when opening or closing a toggle, |
| 56 | // which is less frequent than changing the editor's children. |
| 57 | export const useIsVisible = (elementId: string) => { |
| 58 | const openIds = usePluginOption(TogglePlugin, 'openIds')!; |
| 59 | const isVisibleAtom = useMemo( |
| 60 | () => |
| 61 | atom((get) => { |
| 62 | const toggleIndex = get(toggleIndexAtom); |
| 63 | const enclosedInToggleIds = toggleIndex.get(elementId) || []; |
| 64 | |
| 65 | return enclosedInToggleIds.every((enclosedId) => |
| 66 | openIds.has(enclosedId) |
| 67 | ); |
| 68 | }), |
| 69 | [elementId, openIds] |
| 70 | ); |
| 71 | |
| 72 | return useStoreAtomValue(usePlateStore(), isVisibleAtom); |
| 73 | }; |
| 74 | |
| 75 | export const toggleIndexAtom: Atom<Map<string, string[]>> = atom((get) => |
| 76 | buildToggleIndex(get(editorAtom).editor.children as TIndentElement[]) |
no test coverage detected
searching dependent graphs…