From 622b0644b157d80a271a10a48a3648ea12b59f5b Mon Sep 17 00:00:00 2001 From: novykh Date: Fri, 18 Sep 2026 10:53:52 +0300 Subject: [PATCH 1/3] Keep the row actions column memo unconditional The actions column memo sat after an early return, so a table that lost its last row action called one hook fewer on the next render. React reported a change in the order of hooks and then threw "Should have a queue", taking the table down. A dashboard card that lets the user turn row actions off hits this on the toggle. The empty check moves inside the memo, which matches how the row selection column already handles being disabled, so the hook count no longer depends on how many actions a caller supplies. --- src/components/table/useColumns/useRowActions.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/table/useColumns/useRowActions.js b/src/components/table/useColumns/useRowActions.js index 34ea5f1f..d2772179 100644 --- a/src/components/table/useColumns/useRowActions.js +++ b/src/components/table/useColumns/useRowActions.js @@ -62,10 +62,10 @@ export default (rowActions, { testPrefix, tableMeta } = {}) => { [rowActions] ) - if (availableRowActions.length < 1) return null + return useMemo(() => { + if (availableRowActions.length < 1) return null - return useMemo( - () => ({ + return { id: "actions", enableResizing: false, header: "Actions", @@ -124,7 +124,6 @@ export default (rowActions, { testPrefix, tableMeta } = {}) => { justifyContent: "end", }, }, - }), - [availableRowActions] - ) + } + }, [availableRowActions]) } From 82d3eed72e640a37f65e608836f76eeed6619480 Mon Sep 17 00:00:00 2001 From: novykh Date: Fri, 18 Sep 2026 11:14:45 +0300 Subject: [PATCH 2/3] Keep the row action props memo unconditional A hidden action returned before reaching its props memo, so an action that became visible called one hook more than on the previous render and React threw "Rendered more hooks than during the previous render". Entering edit mode on a dashboard flips the visibility of an alert action and takes the whole table down with it. The visibility check moves below the memo, so the hook count no longer depends on whether an action is currently shown. --- src/components/table/components/action.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/table/components/action.js b/src/components/table/components/action.js index 19afdc9f..d298d185 100644 --- a/src/components/table/components/action.js +++ b/src/components/table/components/action.js @@ -35,7 +35,6 @@ const Action = ({ ...rest }) => { const [isConfirmationOpen, setConfirmationOpen] = useState(false) - if (visible === false) return null const onActionClicked = e => { e.stopPropagation() @@ -93,6 +92,8 @@ const Action = ({ ] ) + if (visible === false) return null + return ( <> {isConfirmationOpen && CustomUIAction && ( From 5a7ee57c938ab6167a13f31f3d824c474ff8fdc7 Mon Sep 17 00:00:00 2001 From: novykh Date: Fri, 18 Sep 2026 11:20:16 +0300 Subject: [PATCH 3/3] v5.5.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9596c224..94e7c3ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@netdata/netdata-ui", - "version": "5.5.9", + "version": "5.5.10", "description": "netdata UI kit", "main": "dist/index.js", "module": "dist/es6/index.js",