@wordpress/block-editor
Version:
43 lines (40 loc) • 1.23 kB
JavaScript
/**
* WordPress dependencies
*/
import { useLayoutEffect, useRef } from '@wordpress/element';
import { useDispatch } from '@wordpress/data';
/**
* Internal dependencies
*/
import { store as blockEditorStore } from '../../store';
export function useMarkPersistent({
html,
value
}) {
const previousTextRef = useRef();
const hasActiveFormats = !!value.activeFormats?.length;
const {
__unstableMarkLastChangeAsPersistent
} = useDispatch(blockEditorStore);
// Must be set synchronously to make sure it applies to the last change.
useLayoutEffect(() => {
// Ignore mount.
if (!previousTextRef.current) {
previousTextRef.current = value.text;
return;
}
// Text input, so don't create an undo level for every character.
// Create an undo level after 1 second of no input.
if (previousTextRef.current !== value.text) {
const timeout = window.setTimeout(() => {
__unstableMarkLastChangeAsPersistent();
}, 1000);
previousTextRef.current = value.text;
return () => {
window.clearTimeout(timeout);
};
}
__unstableMarkLastChangeAsPersistent();
}, [html, hasActiveFormats]);
}
//# sourceMappingURL=use-mark-persistent.js.map