UNPKG

marshall-y-slate

Version:
67 lines 6.48 kB
import { useCallback, useEffect, useState } from 'react'; import { Path, Range, Text } from 'slate'; import { relativePositionToAbsolutePosition } from '../cursor/utils'; export const useCursors = (editor) => { const [cursors, setCursorData] = useState([]); useEffect(() => { editor.awareness.on('update', () => { const newCursorData = Array.from(editor.awareness.getStates()) .filter(([clientId]) => { var _a; return clientId !== ((_a = editor.sharedType.doc) === null || _a === void 0 ? void 0 : _a.clientID); }) .map(([, awareness]) => { let anchor = null; let focus = null; if (awareness.anchor) { anchor = relativePositionToAbsolutePosition(editor.sharedType, awareness.anchor); } if (awareness.focus) { focus = relativePositionToAbsolutePosition(editor.sharedType, awareness.focus); } return { anchor, focus, data: awareness }; }) .filter((cursor) => cursor.anchor && cursor.focus); setCursorData(newCursorData); }); }, [editor]); const decorate = useCallback(([node, path]) => { const ranges = []; if (Text.isText(node) && (cursors === null || cursors === void 0 ? void 0 : cursors.length)) { cursors.forEach((cursor) => { if (Range.includes(cursor, path)) { const { focus, anchor, data } = cursor; const isFocusNode = Path.equals(focus.path, path); const isAnchorNode = Path.equals(anchor.path, path); const isForward = Range.isForward({ anchor, focus }); ranges.push({ data, isForward, originAnchorPath: anchor.path, originFocusPath: focus.path, isCaret: isFocusNode, anchor: { path, // eslint-disable-next-line no-nested-ternary offset: isAnchorNode ? anchor.offset : isForward ? 0 : node.text.length, }, focus: { path, // eslint-disable-next-line no-nested-ternary offset: isFocusNode ? focus.offset : isForward ? node.text.length : 0, }, }); } }); } return ranges; }, [cursors]); return { decorate, cursors }; }; export default useCursors; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWN1cnNvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2luL3VzZS1jdXJzb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6RCxPQUFPLEVBQWEsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFckQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHckUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQ3RCLE1BQW9CLEVBSXRCLEVBQUU7SUFDQSxNQUFNLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBVyxFQUFFLENBQUMsQ0FBQztJQUV4RCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUMvQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ3pELE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFDLE9BQUEsUUFBUSxNQUFLLE1BQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLDBDQUFFLFFBQVEsQ0FBQSxDQUFBLEVBQUEsQ0FBQztpQkFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRyxrQ0FBa0MsQ0FDdkMsTUFBTSxDQUFDLFVBQVUsRUFDakIsU0FBUyxD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