From d931b7ecc6a67e05f2891dff941156cc6e4ee47c Mon Sep 17 00:00:00 2001 From: Kavin Venkatachalam Date: Wed, 9 Jul 2025 12:22:28 +0530 Subject: [PATCH] fix: optimize component sorting logic to ensure recalculation on changes. Fixes the bug on showing the component from one subcontainer to another --- .../src/AppBuilder/_hooks/useSortedComponents.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/frontend/src/AppBuilder/_hooks/useSortedComponents.js b/frontend/src/AppBuilder/_hooks/useSortedComponents.js index 7687a8622d..f89328ead0 100644 --- a/frontend/src/AppBuilder/_hooks/useSortedComponents.js +++ b/frontend/src/AppBuilder/_hooks/useSortedComponents.js @@ -22,10 +22,10 @@ const useSortedComponents = (components, currentLayout, id, moduleId) => { const sortedComponents = useMemo(() => { const { triggerUpdate, shouldReorder } = reorderContainerChildren; - // If this container is not the target of the reorder, return cached order - if (!shouldReorder) { - return prevComponentsOrder.current; - } + // Always recalculate if components array has changed (new component added/removed) + const componentsChanged = + prevComponentsOrder.current.length !== components.length || + !components.every((comp) => prevComponentsOrder.current.includes(comp)); // If a forced update occurred for this container, recalculate order const isForcedUpdate = prevForceUpdateRef.current !== triggerUpdate; @@ -33,6 +33,14 @@ const useSortedComponents = (components, currentLayout, id, moduleId) => { prevForceUpdateRef.current = triggerUpdate; } + // Skip recalculation only if: + // 1. This container is not the target of reorder + // 2. Components haven't changed + // 3. No forced update occurred + if (!shouldReorder && !componentsChanged && !isForcedUpdate) { + return prevComponentsOrder.current; + } + const currentPageComponents = getCurrentPageComponents(); const newComponentsOrder = [...components].sort((a, b) => {