From c9db81096a0e2c513d515d2be017e3b26f5fe212 Mon Sep 17 00:00:00 2001 From: Siddharth Chauhan <43745848+aibysid@users.noreply.github.com> Date: Sun, 23 Nov 2025 22:45:41 +0530 Subject: [PATCH] fix: agentflow list refresh after deletion (Issue #5360) (#5473) * fix: agentflow list refresh after deletion (Issue #5360) Root Cause: When deleting an Agentflow from the list view, updateFlowsApi.request() was called without pagination parameters. This caused the backend to return a plain array instead of the expected { data: [], total: 0 } format, leading to a TypeError when accessing .data.length. Solution: - Created refreshAgentflows callback that includes current pagination state - Passed callback through FlowListTable to FlowListMenu - Updated handleDelete to use callback instead of direct API call - Maintains backward compatibility for components without callback Fixes #5360 * reverting * add pagination support to FlowListMenu and FlowListTable --------- Co-authored-by: Henry --- .../src/ui-component/button/FlowListMenu.jsx | 36 +++++++++++++++---- .../src/ui-component/table/FlowListTable.jsx | 10 ++++-- packages/ui/src/views/agentflows/index.jsx | 2 ++ packages/ui/src/views/chatflows/index.jsx | 2 ++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/packages/ui/src/ui-component/button/FlowListMenu.jsx b/packages/ui/src/ui-component/button/FlowListMenu.jsx index d3c2e259b..9ac85206f 100644 --- a/packages/ui/src/ui-component/button/FlowListMenu.jsx +++ b/packages/ui/src/ui-component/button/FlowListMenu.jsx @@ -74,7 +74,7 @@ const StyledMenu = styled((props) => ( } })) -export default function FlowListMenu({ chatflow, isAgentCanvas, isAgentflowV2, setError, updateFlowsApi }) { +export default function FlowListMenu({ chatflow, isAgentCanvas, isAgentflowV2, setError, updateFlowsApi, currentPage, pageLimit }) { const { confirm } = useConfirm() const dispatch = useDispatch() const updateChatflowApi = useApi(chatflowsApi.updateChatflow) @@ -166,10 +166,16 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, isAgentflowV2, s } try { await updateChatflowApi.request(chatflow.id, updateBody) + const params = { + page: currentPage, + limit: pageLimit + } if (isAgentCanvas && isAgentflowV2) { - await updateFlowsApi.request('AGENTFLOW') + await updateFlowsApi.request('AGENTFLOW', params) + } else if (isAgentCanvas) { + await updateFlowsApi.request('MULTIAGENT', params) } else { - await updateFlowsApi.request(isAgentCanvas ? 'MULTIAGENT' : undefined) + await updateFlowsApi.request(params) } } catch (error) { if (setError) setError(error) @@ -209,7 +215,15 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, isAgentflowV2, s } try { await updateChatflowApi.request(chatflow.id, updateBody) - await updateFlowsApi.request(isAgentCanvas ? 'AGENTFLOW' : undefined) + const params = { + page: currentPage, + limit: pageLimit + } + if (isAgentCanvas) { + await updateFlowsApi.request('AGENTFLOW', params) + } else { + await updateFlowsApi.request(params) + } } catch (error) { if (setError) setError(error) enqueueSnackbar({ @@ -241,10 +255,16 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, isAgentflowV2, s if (isConfirmed) { try { await chatflowsApi.deleteChatflow(chatflow.id) + const params = { + page: currentPage, + limit: pageLimit + } if (isAgentCanvas && isAgentflowV2) { - await updateFlowsApi.request('AGENTFLOW') + await updateFlowsApi.request('AGENTFLOW', params) + } else if (isAgentCanvas) { + await updateFlowsApi.request('MULTIAGENT', params) } else { - await updateFlowsApi.request(isAgentCanvas ? 'MULTIAGENT' : undefined) + await updateFlowsApi.request(params) } } catch (error) { if (setError) setError(error) @@ -454,5 +474,7 @@ FlowListMenu.propTypes = { isAgentCanvas: PropTypes.bool, isAgentflowV2: PropTypes.bool, setError: PropTypes.func, - updateFlowsApi: PropTypes.object + updateFlowsApi: PropTypes.object, + currentPage: PropTypes.number, + pageLimit: PropTypes.number } diff --git a/packages/ui/src/ui-component/table/FlowListTable.jsx b/packages/ui/src/ui-component/table/FlowListTable.jsx index a61df9ed2..2d1e05704 100644 --- a/packages/ui/src/ui-component/table/FlowListTable.jsx +++ b/packages/ui/src/ui-component/table/FlowListTable.jsx @@ -59,7 +59,9 @@ export const FlowListTable = ({ updateFlowsApi, setError, isAgentCanvas, - isAgentflowV2 + isAgentflowV2, + currentPage, + pageLimit }) => { const { hasPermission } = useAuth() const isActionsAvailable = isAgentCanvas @@ -331,6 +333,8 @@ export const FlowListTable = ({ chatflow={row} setError={setError} updateFlowsApi={updateFlowsApi} + currentPage={currentPage} + pageLimit={pageLimit} /> @@ -355,5 +359,7 @@ FlowListTable.propTypes = { updateFlowsApi: PropTypes.object, setError: PropTypes.func, isAgentCanvas: PropTypes.bool, - isAgentflowV2: PropTypes.bool + isAgentflowV2: PropTypes.bool, + currentPage: PropTypes.number, + pageLimit: PropTypes.number } diff --git a/packages/ui/src/views/agentflows/index.jsx b/packages/ui/src/views/agentflows/index.jsx index b82bfab8a..c99bd6cf2 100644 --- a/packages/ui/src/views/agentflows/index.jsx +++ b/packages/ui/src/views/agentflows/index.jsx @@ -325,6 +325,8 @@ const Agentflows = () => { filterFunction={filterFlows} updateFlowsApi={getAllAgentflows} setError={setError} + currentPage={currentPage} + pageLimit={pageLimit} /> )} {/* Pagination and Page Size Controls */} diff --git a/packages/ui/src/views/chatflows/index.jsx b/packages/ui/src/views/chatflows/index.jsx index 62e855f2b..ce213313d 100644 --- a/packages/ui/src/views/chatflows/index.jsx +++ b/packages/ui/src/views/chatflows/index.jsx @@ -208,6 +208,8 @@ const Chatflows = () => { filterFunction={filterFlows} updateFlowsApi={getAllChatflowsApi} setError={setError} + currentPage={currentPage} + pageLimit={pageLimit} /> )} {/* Pagination and Page Size Controls */}