Files
coolify/resources/js/livewire-update-dedupe.js
T
Andras Bacsai 76d3386a4d refactor(forms): unify searchable and multi-select listboxes
Replace datalist and searchable-listbox components with the shared listbox and migrate form fields.

Deduplicate superseded Livewire updates to prevent repeated array update hooks, with regression coverage.
2026-10-07 15:37:03 +02:00

27 lines
805 B
JavaScript

/**
* Livewire 3 sends a nested diff (`ids.0`) next to a queued whole-property
* update (`ids`) when an array changes through `.live` entangle or `$set`,
* so `updatedIds()` runs once per key. Livewire 4 drops the superseded nested
* keys in `mergeQueuedUpdates`; this backports that fix.
*
* @param {Record<string, unknown>} updates
* @returns {Record<string, unknown>}
*/
export function removeSupersededUpdates(updates) {
const keys = Object.keys(updates);
keys.forEach((key) => {
if (keys.some((parent) => key.startsWith(`${parent}.`))) {
delete updates[key];
}
});
return updates;
}
export function registerLivewireUpdateDedupe(Livewire) {
Livewire.hook('commit', ({ commit }) => {
removeSupersededUpdates(commit.updates);
});
}