UNPKG

@wordpress/components

Version:
69 lines (68 loc) 1.71 kB
// packages/components/src/input-control/utils.ts import { useEffect, useLayoutEffect, useRef, useState } from "@wordpress/element"; function getDragCursor(dragDirection) { let dragCursor = "ns-resize"; switch (dragDirection) { case "n": case "s": dragCursor = "ns-resize"; break; case "e": case "w": dragCursor = "ew-resize"; break; } return dragCursor; } function useDragCursor(isDragging, dragDirection) { const dragCursor = getDragCursor(dragDirection); useEffect(() => { if (isDragging) { document.documentElement.style.cursor = dragCursor; } else { document.documentElement.style.cursor = null; } }, [isDragging, dragCursor]); return dragCursor; } function useDraft(props) { const previousValueRef = useRef(props.value); const [draft, setDraft] = useState({}); const value = draft.value !== void 0 ? draft.value : props.value; useLayoutEffect(() => { const { current: previousValue } = previousValueRef; previousValueRef.current = props.value; if (draft.value !== void 0 && !draft.isStale) { setDraft({ ...draft, isStale: true }); } else if (draft.isStale && props.value !== previousValue) { setDraft({}); } }, [props.value, draft]); const onChange = (nextValue, extra) => { setDraft((current) => Object.assign(current, { value: nextValue, isStale: false })); props.onChange(nextValue, extra); }; const onBlur = (event) => { setDraft({}); props.onBlur?.(event); }; return { value, onBlur, onChange }; } export { getDragCursor, useDraft, useDragCursor }; //# sourceMappingURL=utils.js.map