diff --git a/frontend/src/stores/editorStore.ts b/frontend/src/stores/editorStore.ts index ec6ec7a..1562ef4 100644 --- a/frontend/src/stores/editorStore.ts +++ b/frontend/src/stores/editorStore.ts @@ -202,6 +202,9 @@ function cloneSubtrees( } export const useEditorStore = create((set, get) => { + /** Regroupe les notifications de mesure d'un meme lot en un seul rendu. */ + let sizeBumpScheduled = false; + /** * Applique une transformation sur la carte. * `history: false` regroupe les micro-modifications (glisser-deposer) pour @@ -1004,9 +1007,19 @@ export const useEditorStore = create((set, get) => { if (known && known.width === size.width && known.height === size.height) return; state.measuredSizes.set(id, size); - // React Flow a besoin des dimensions sur les noeuds controles (minimap, - // cadrage). On ne redessine que lorsqu'une taille a reellement change. - set({ sizeVersion: state.sizeVersion + 1 }); + + /* + * React Flow a besoin des dimensions sur les noeuds controles (minimap, + * cadrage, redimensionnement). On ne redessine que lorsqu'une taille a + * reellement change, et une seule fois par lot : sans cela, appliquer un + * reglage a cent noeuds declencherait cent rendus successifs. + */ + if (sizeBumpScheduled) return; + sizeBumpScheduled = true; + queueMicrotask(() => { + sizeBumpScheduled = false; + set({ sizeVersion: get().sizeVersion + 1 }); + }); }, }; });