From af7ae335a22d83055b6204fca10f5614ed15f15a Mon Sep 17 00:00:00 2001 From: gsmithun4 Date: Wed, 15 Apr 2026 14:08:08 +0530 Subject: [PATCH 1/3] chore: update version to 3.20.146-lts across all components --- .version | 2 +- frontend/.version | 2 +- server/.version | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.version b/.version index e0bac6f4b8..532ddfcdca 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -3.20.145-lts +3.20.146-lts diff --git a/frontend/.version b/frontend/.version index e0bac6f4b8..532ddfcdca 100644 --- a/frontend/.version +++ b/frontend/.version @@ -1 +1 @@ -3.20.145-lts +3.20.146-lts diff --git a/server/.version b/server/.version index e0bac6f4b8..532ddfcdca 100644 --- a/server/.version +++ b/server/.version @@ -1 +1 @@ -3.20.145-lts +3.20.146-lts From 22240094ca6fdc159aa8f44e8801d837b98023c4 Mon Sep 17 00:00:00 2001 From: Rudhra Deep Biswas <98055396+rudeUltra@users.noreply.github.com> Date: Wed, 15 Apr 2026 14:08:44 +0530 Subject: [PATCH 2/3] fix (#15902) --- .../BaseManageGroupPermissions/BaseManageGroupPermissions.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/modules/WorkspaceSettings/pages/Groups/components/BaseManageGroupPermissions/BaseManageGroupPermissions.jsx b/frontend/src/modules/WorkspaceSettings/pages/Groups/components/BaseManageGroupPermissions/BaseManageGroupPermissions.jsx index 4240eaa6d1..e348d1705a 100644 --- a/frontend/src/modules/WorkspaceSettings/pages/Groups/components/BaseManageGroupPermissions/BaseManageGroupPermissions.jsx +++ b/frontend/src/modules/WorkspaceSettings/pages/Groups/components/BaseManageGroupPermissions/BaseManageGroupPermissions.jsx @@ -205,7 +205,8 @@ class BaseManageGroupPermissions extends React.Component { ? defaultGroups[0].id : type == 'current' ? this.findCurrentGroupDetails(groupPermissions) - : groupPermissions.at(-1).id; + : groupPermissions.find((group) => group.name === this.state.selectedGroup)?.id ?? + groupPermissions.at(-1).id; this.setState( { groups: groupPermissions.filter((group) => group.type === 'custom'), From 6c20c2c8b19b5f40aad573912aa6c0ba7d6d1008 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Wed, 15 Apr 2026 14:09:08 +0530 Subject: [PATCH 3/3] feat: implement pagination for module fetching in useAppData hook (#15914) Port of PR #15619 from main/beta to lts-3.16. Replaces single-page appsService.getAll call with fetchAllModules that iterates all pages via meta.total_pages, preventing truncated module lists when count exceeds one page. --- frontend/src/AppBuilder/_hooks/useAppData.js | 37 ++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/frontend/src/AppBuilder/_hooks/useAppData.js b/frontend/src/AppBuilder/_hooks/useAppData.js index c5f2101ec6..5b34c9d5d4 100644 --- a/frontend/src/AppBuilder/_hooks/useAppData.js +++ b/frontend/src/AppBuilder/_hooks/useAppData.js @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { appEnvironmentService, appService, @@ -118,6 +118,25 @@ const useAppData = ( const getModuleDefinition = useStore((state) => state?.getModuleDefinition ?? noop); const deleteModuleDefinition = useStore((state) => state?.deleteModuleDefinition ?? noop); + const fetchAllModules = useCallback(async () => { + const allModules = []; + let currentPage = 1; + let totalPages = 1; + + while (currentPage <= totalPages) { + const data = await appsService.getAll(currentPage, '', '', 'module'); + const pageModules = data?.apps || []; + + allModules.push(...pageModules); + + const pageCount = Number(data?.meta?.total_pages); + totalPages = Number.isFinite(pageCount) && pageCount > 0 ? pageCount : currentPage; + currentPage += 1; + } + + return allModules; + }, []); + const themeAccess = useThemeAccess(); const detectThemeChange = useStore((state) => state.detectThemeChange); const setConversation = useStore((state) => state.ai?.setConversation); @@ -734,15 +753,21 @@ const useAppData = ( if (mode === 'edit') { requestIdleCallback( () => { - appsService.getAll(0, '', '', 'module').then((data) => { - setModulesIsLoading(false); - setModulesList(data.apps); - }); + fetchAllModules() + .then((modules) => { + setModulesList(modules); + }) + .catch((error) => { + console.error('Failed to preload modules', error); + }) + .finally(() => { + setModulesIsLoading(false); + }); }, { timeout: 2000 } ); // Adding a timeout of 2 seconds as fallback } - }, [setModulesIsLoading, setModulesList, mode, moduleMode]); + }, [fetchAllModules, setModulesIsLoading, setModulesList, mode, moduleMode]); return appTypeRef.current; };