From c81d0eb628eb0f8ac995c07a2e0f97e93a181b02 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@gmail.com>
Date: Thu, 12 Jun 2025 12:18:14 +1000
Subject: [PATCH] Table col fix (#9762)

* Update mantine-datatable

* Improve table hook

* Fix for table name

- Table names must be unique
- Otherwise stored column data gets corrupted

* Click through on table

* Tweak unit tests
---
 src/frontend/package.json                     |  2 +-
 src/frontend/src/pages/build/BuildDetail.tsx  |  2 +-
 src/frontend/src/tables/InvenTreeTable.tsx    | 21 +++++++++++++------
 .../src/tables/build/BuildOrderTestTable.tsx  |  4 +++-
 src/frontend/tests/pages/pui_core.spec.ts     |  2 +-
 src/frontend/yarn.lock                        |  6 +++---
 6 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/frontend/package.json b/src/frontend/package.json
index 408f6428ae..e0c4b5e775 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -88,7 +88,7 @@
         "fuse.js": "^7.0.0",
         "html5-qrcode": "^2.3.8",
         "mantine-contextmenu": "^7.15.3",
-        "mantine-datatable": "^7.15.1",
+        "mantine-datatable": "^7.17.1",
         "qrcode": "^1.5.4",
         "react": "^18.3.1",
         "react-dom": "^18.3.1",
diff --git a/src/frontend/src/pages/build/BuildDetail.tsx b/src/frontend/src/pages/build/BuildDetail.tsx
index 2aa2a32db8..a0400c5d53 100644
--- a/src/frontend/src/pages/build/BuildDetail.tsx
+++ b/src/frontend/src/pages/build/BuildDetail.tsx
@@ -311,7 +311,7 @@ export default function BuildDetail() {
         content: (
           <StockItemTable
             allowAdd={false}
-            tableName='build-outputs'
+            tableName='completed-build-outputs'
             params={{
               build: id,
               is_building: false
diff --git a/src/frontend/src/tables/InvenTreeTable.tsx b/src/frontend/src/tables/InvenTreeTable.tsx
index ea13a6c1ca..6decc5e017 100644
--- a/src/frontend/src/tables/InvenTreeTable.tsx
+++ b/src/frontend/src/tables/InvenTreeTable.tsx
@@ -559,13 +559,22 @@ export function InvenTreeTable<T extends Record<string, any>>({
   }, [tableState.queryFilters]);
 
   useEffect(() => {
-    tableState.setIsLoading(
+    const loading: boolean =
       isFetching ||
-        isLoading ||
-        tableOptionQuery.isFetching ||
-        tableOptionQuery.isLoading
-    );
-  }, [isFetching, isLoading, tableOptionQuery]);
+      isLoading ||
+      tableOptionQuery.isFetching ||
+      tableOptionQuery.isLoading;
+
+    if (loading != tableState.isLoading) {
+      tableState.setIsLoading(loading);
+    }
+  }, [
+    isFetching,
+    isLoading,
+    tableOptionQuery.isFetching,
+    tableOptionQuery.isLoading,
+    tableState.isLoading
+  ]);
 
   // Update tableState.records when new data received
   useEffect(() => {
diff --git a/src/frontend/src/tables/build/BuildOrderTestTable.tsx b/src/frontend/src/tables/build/BuildOrderTestTable.tsx
index 6121d1d2da..8373cf53c4 100644
--- a/src/frontend/src/tables/build/BuildOrderTestTable.tsx
+++ b/src/frontend/src/tables/build/BuildOrderTestTable.tsx
@@ -12,6 +12,7 @@ import {
 
 import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
 import { apiUrl } from '@lib/functions/Api';
+import { ModelType } from '@lib/index';
 import type { TableFilter } from '@lib/types/Filters';
 import type { ApiFormFieldSet } from '@lib/types/Forms';
 import { PassFailButton } from '../../components/buttons/YesNoButton';
@@ -257,7 +258,8 @@ export default function BuildOrderTestTable({
           },
           rowActions: rowActions,
           tableFilters: tableFilters,
-          tableActions: tableActions
+          tableActions: tableActions,
+          modelType: ModelType.stockitem
         }}
       />
     </>
diff --git a/src/frontend/tests/pages/pui_core.spec.ts b/src/frontend/tests/pages/pui_core.spec.ts
index 290be47844..cc7f12d0b2 100644
--- a/src/frontend/tests/pages/pui_core.spec.ts
+++ b/src/frontend/tests/pages/pui_core.spec.ts
@@ -15,7 +15,7 @@ test('Core User/Group/Contact', async ({ browser }) => {
 
   // users
   await loadTab(page, 'Users');
-  await page.getByRole('cell', { name: 'admin' }).click();
+  await page.getByRole('cell', { name: 'admin', exact: true }).click();
   await page.getByText('User: admin', { exact: true }).waitFor();
   await page.getByLabel('User Details').waitFor();
   await page.getByLabel('breadcrumb-1-users').click();
diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock
index dd020beb95..65093ed813 100644
--- a/src/frontend/yarn.lock
+++ b/src/frontend/yarn.lock
@@ -3540,9 +3540,9 @@ mantine-contextmenu@^7.15.3:
   integrity sha512-qbkbumlcxvUDavqnBZHLhskXxF9mhTD3F+mQjDc2JEqGZbPr4XHRTxFw0BAc34yKOY04Iv8WGHVwastdJHOO/A==
 
 mantine-datatable@^7.15.1:
-  version "7.15.1"
-  resolved "https://registry.yarnpkg.com/mantine-datatable/-/mantine-datatable-7.15.1.tgz#c89d55c290e3d65ed7fde777a8db938122663d5f"
-  integrity sha512-MwehjtkdT6FQfuPgTXmGA2Y3DmHdCdLzcl4G4LoccSpG2ul2RwEdCO/dQmrPBsNo4mMepNN9dE3/1vSuYsU+7Q==
+  version "7.17.1"
+  resolved "https://registry.yarnpkg.com/mantine-datatable/-/mantine-datatable-7.17.1.tgz#155373bfa318d5463f1aa8468b8117f97b033a2e"
+  integrity sha512-5GBpSTZyvVGqe2TqEaBYrZQyQjLgHuMqkb2wry+wPvwalRY0oFKG1kdFd43bxch9FOG0K0CREEa6+cYIDby55Q==
 
 marked@^4.1.0:
   version "4.3.0"