UNPKG

set-state-compare

Version:

setState for React that compares with the current state and only sets the state if changed.

56 lines 6.61 kB
if (!globalThis.setStateCompareData) { globalThis.setStateCompareData = { rendering: 0, renderingCallbacks: [], afterPaintCallbacks: [], afterPaintHandle: undefined }; } const shared = globalThis.setStateCompareData; if (!shared.afterPaintCallbacks) { shared.afterPaintCallbacks = []; } if (!("afterPaintHandle" in shared)) { shared.afterPaintHandle = undefined; } if (!shared.renderingCallbacks) { shared.renderingCallbacks = []; } if (!shared.scheduleAfterPaint) { shared.scheduleAfterPaint = (callback) => { shared.afterPaintCallbacks.push(callback); if (shared.afterPaintHandle !== undefined) { return shared.afterPaintHandle; } const schedule = globalThis.requestAnimationFrame || ((next) => setTimeout(next, 0)); shared.afterPaintHandle = schedule(() => { const callbacks = shared.afterPaintCallbacks; shared.afterPaintHandle = undefined; shared.afterPaintCallbacks = []; for (const queuedCallback of callbacks) { queuedCallback(); } }); return shared.afterPaintHandle; }; } if (!shared.flushRenderingCallbacks) { shared.flushRenderingCallbacks = () => { if (shared.renderingCallbacks.length === 0) { return; } const callbacks = shared.renderingCallbacks; shared.renderingCallbacks = []; for (const queuedCallback of callbacks) { queuedCallback(); } }; } if (!shared.enqueueRenderCallback) { shared.enqueueRenderCallback = (callback) => { shared.renderingCallbacks.push(callback); shared.scheduleAfterPaint(shared.flushRenderingCallbacks); }; } export default shared; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsVUFBVSxDQUFDLG1CQUFtQixHQUFHO1FBQy9CLFNBQVMsRUFBRSxDQUFDO1FBQ1osa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCLGdCQUFnQixFQUFFLFNBQVM7S0FDNUIsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUE7QUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7QUFDakMsQ0FBQztBQUVELElBQUksQ0FBQyxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDcEMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7QUFDaEMsQ0FBQztBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMvQixNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUN2QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpDLElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFBO1FBQ2hDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FDWixVQUFVLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQTtZQUU1QyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFBO1lBQ25DLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7WUFFL0IsS0FBSyxNQUFNLGNBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsY0FBYyxFQUFFLENBQUE7WUFDbEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUE7SUFDaEMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNwQyxNQUFNLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxFQUFFO1FBQ3BDLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQTtRQUUzQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFBO1FBRTlCLEtBQUssTUFBTSxjQUFjLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdkMsY0FBYyxFQUFFLENBQUE7UUFDbEIsQ0FBQztJQUNILENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDbEMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFDM0QsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWUsTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKCFnbG9iYWxUaGlzLnNldFN0YXRlQ29tcGFyZURhdGEpIHtcbiAgZ2xvYmFsVGhpcy5zZXRTdGF0ZUNvbXBhcmVEYXRhID0ge1xuICAgIHJlbmRlcmluZzogMCxcbiAgICByZW5kZXJpbmdDYWxsYmFja3M6IFtdLFxuICAgIGFmdGVyUGFpbnRDYWxsYmFja3M6IFtdLFxuICAgIGFmdGVyUGFpbnRIYW5kbGU6IHVuZGVmaW5lZFxuICB9XG59XG5cbmNvbnN0IHNoYXJlZCA9IGdsb2JhbFRoaXMuc2V0U3RhdGVDb21wYXJlRGF0YVxuXG5pZiAoIXNoYXJlZC5hZnRlclBhaW50Q2FsbGJhY2tzKSB7XG4gIHNoYXJlZC5hZnRlclBhaW50Q2FsbGJhY2tzID0gW11cbn1cblxuaWYgKCEoXCJhZnRlclBhaW50SGFuZGxlXCIgaW4gc2hhcmVkKSkge1xuICBzaGFyZWQuYWZ0ZXJQYWludEhhbmRsZSA9IHVuZGVmaW5lZFxufVxuXG5pZiAoIXNoYXJlZC5yZW5kZXJpbmdDYWxsYmFja3MpIHtcbiAgc2hhcmVkLnJlbmRlcmluZ0NhbGxiYWNrcyA9IFtdXG59XG5cbmlmICghc2hhcmVkLnNjaGVkdWxlQWZ0ZXJQYWludCkge1xuICBzaGFyZWQuc2NoZWR1bGVBZnRlclBhaW50ID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgc2hhcmVkLmFmdGVyUGFpbnRDYWxsYmFja3MucHVzaChjYWxsYmFjaylcblxuICAgIGlmIChzaGFyZWQuYWZ0ZXJQYWludEhhbmRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gc2hhcmVkLmFmdGVyUGFpbnRIYW5kbGVcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlZHVsZSA9XG4gICAgICBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCAoKG5leHQpID0+IHNldFRpbWVvdXQobmV4dCwgMCkpXG5cbiAgICBzaGFyZWQuYWZ0ZXJQYWludEhhbmRsZSA9IHNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHNoYXJlZC5hZnRlclBhaW50Q2FsbGJhY2tzXG5cbiAgICAgIHNoYXJlZC5hZnRlclBhaW50SGFuZGxlID0gdW5kZWZpbmVkXG4gICAgICBzaGFyZWQuYWZ0ZXJQYWludENhbGxiYWNrcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgcXVldWVkQ2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgIHF1ZXVlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHNoYXJlZC5hZnRlclBhaW50SGFuZGxlXG4gIH1cbn1cblxuaWYgKCFzaGFyZWQuZmx1c2hSZW5kZXJpbmdDYWxsYmFja3MpIHtcbiAgc2hhcmVkLmZsdXNoUmVuZGVyaW5nQ2FsbGJhY2tzID0gKCkgPT4ge1xuICAgIGlmIChzaGFyZWQucmVuZGVyaW5nQ2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2FsbGJhY2tzID0gc2hhcmVkLnJlbmRlcmluZ0NhbGxiYWNrc1xuXG4gICAgc2hhcmVkLnJlbmRlcmluZ0NhbGxiYWNrcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHF1ZXVlZENhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgcXVldWVkQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxufVxuXG5pZiAoIXNoYXJlZC5lbnF1ZXVlUmVuZGVyQ2FsbGJhY2spIHtcbiAgc2hhcmVkLmVucXVldWVSZW5kZXJDYWxsYmFjayA9IChjYWxsYmFjaykgPT4ge1xuICAgIHNoYXJlZC5yZW5kZXJpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICBzaGFyZWQuc2NoZWR1bGVBZnRlclBhaW50KHNoYXJlZC5mbHVzaFJlbmRlcmluZ0NhbGxiYWNrcylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzaGFyZWRcbiJdfQ==