diff --git a/src/frontend/src/components/forms/ApiForm.tsx b/src/frontend/src/components/forms/ApiForm.tsx
index df6c56e5ad..86c5144ad7 100644
--- a/src/frontend/src/components/forms/ApiForm.tsx
+++ b/src/frontend/src/components/forms/ApiForm.tsx
@@ -455,6 +455,12 @@ export function ApiForm({
}
})
.then((response) => {
+ const followPk = Array.isArray(response.data)
+ ? response.data.length === 1
+ ? response.data[0]?.pk
+ : undefined
+ : response.data?.pk;
+
switch (response.status) {
case 200:
case 201:
@@ -469,12 +475,12 @@ export function ApiForm({
if (
props.follow &&
props.modelType &&
- response.data?.pk &&
+ followPk &&
!keepOpenRef.current
) {
// If we want to automatically follow the returned data
if (!!navigate && !keepOpenRef.current) {
- navigate(getDetailUrl(props.modelType, response.data?.pk));
+ navigate(getDetailUrl(props.modelType, followPk));
}
} else if (props.table) {
// If we want to automatically update or reload a linked table
diff --git a/src/frontend/src/pages/stock/StockDetail.tsx b/src/frontend/src/pages/stock/StockDetail.tsx
index 5d73866074..fa4bb80fa9 100644
--- a/src/frontend/src/pages/stock/StockDetail.tsx
+++ b/src/frontend/src/pages/stock/StockDetail.tsx
@@ -431,17 +431,24 @@ export default function StockDetail() {
hidden: !stockitem.packaging
},
{
- type: 'text',
+ type: 'date',
+ name: 'creation_date',
+ icon: 'calendar',
+ label: t`Created`,
+ hidden: !stockitem.creation_date
+ },
+ {
+ type: 'date',
name: 'updated',
icon: 'calendar',
label: t`Last Updated`
},
{
- type: 'text',
- name: 'stocktake',
+ type: 'date',
+ name: 'stocktake_date',
icon: 'calendar',
label: t`Last Stocktake`,
- hidden: !stockitem.stocktake
+ hidden: !stockitem.stocktake_date
}
];
diff --git a/src/frontend/src/tables/ColumnRenderers.tsx b/src/frontend/src/tables/ColumnRenderers.tsx
index 8d947bbe32..f4c8e9a65b 100644
--- a/src/frontend/src/tables/ColumnRenderers.tsx
+++ b/src/frontend/src/tables/ColumnRenderers.tsx
@@ -94,6 +94,13 @@ export function PartColumn(props: PartColumnProps): TableColumn {
sortable: true,
switchable: false,
minWidth: '175px',
+ copyable: (record: any) => {
+ const part = resolveItem(
+ record,
+ props.part ?? props.accessor ?? 'part_detail'
+ );
+ return part?.full_name ?? part?.name ?? '';
+ },
render: (record: any) => {
const part = resolveItem(
record,
diff --git a/src/frontend/src/tables/build/BuildLineTable.tsx b/src/frontend/src/tables/build/BuildLineTable.tsx
index 26ba76ba23..7bdfb844c5 100644
--- a/src/frontend/src/tables/build/BuildLineTable.tsx
+++ b/src/frontend/src/tables/build/BuildLineTable.tsx
@@ -304,6 +304,7 @@ export default function BuildLineTable({
{t`No stock available`}
)
}
@@ -447,7 +448,9 @@ export default function BuildLineTable({
extra={extra}
value={
- {formatDecimal(record.requiredQuantity)}
+
+ {formatDecimal(record.requiredQuantity)}
+
{record?.part_detail?.units && (
[{record.part_detail.units}]
)}
diff --git a/src/frontend/src/tables/part/PartTable.tsx b/src/frontend/src/tables/part/PartTable.tsx
index 583bdacac2..715529ddf0 100644
--- a/src/frontend/src/tables/part/PartTable.tsx
+++ b/src/frontend/src/tables/part/PartTable.tsx
@@ -181,7 +181,9 @@ function partTableColumns(): TableColumn[] {
- {text}
+
+ {text}
+
{record.units && (
[{record.units}]
diff --git a/src/frontend/src/tables/stock/StockItemTable.tsx b/src/frontend/src/tables/stock/StockItemTable.tsx
index 3191ce97ed..45b3d1f639 100644
--- a/src/frontend/src/tables/stock/StockItemTable.tsx
+++ b/src/frontend/src/tables/stock/StockItemTable.tsx
@@ -1,6 +1,5 @@
import { t } from '@lingui/core/macro';
import { useMemo, useState } from 'react';
-import { useNavigate } from 'react-router-dom';
import { ActionButton } from '@lib/components/ActionButton';
import { AddItemButton } from '@lib/components/AddItemButton';
@@ -8,7 +7,6 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { ModelType } from '@lib/enums/ModelType';
import { UserRoles } from '@lib/enums/Roles';
import { apiUrl } from '@lib/functions/Api';
-import { getDetailUrl } from '@lib/functions/Navigation';
import useTable from '@lib/hooks/UseTable';
import type { TableFilter } from '@lib/types/Filters';
import type { StockOperationProps } from '@lib/types/Forms';
@@ -381,8 +379,6 @@ export function StockItemTable({
[settings]
);
- const navigate = useNavigate();
-
const tableColumns = useMemo(
() =>
stockItemTableColumns({
@@ -433,11 +429,7 @@ export function StockItemTable({
},
follow: params.openNewStockItem ?? true,
table: table,
- onFormSuccess: (response: any) => {
- // Returns a list that may contain multiple serialized stock items
- // Navigate to the first result
- navigate(getDetailUrl(ModelType.stockitem, response[0].pk));
- },
+ modelType: ModelType.stockitem,
successMessage: t`Stock item created`,
keepOpenOption: true
});
diff --git a/src/frontend/vite.config.ts b/src/frontend/vite.config.ts
index 2aa813204e..19175a62ba 100644
--- a/src/frontend/vite.config.ts
+++ b/src/frontend/vite.config.ts
@@ -90,7 +90,8 @@ export default defineConfig(({ command, mode }) => {
}
},
define: {
- ...__INVENTREE_VERSION_INFO__
+ ...__INVENTREE_VERSION_INFO__,
+ 'process.env.NODE_ENV': JSON.stringify(mode)
}
};
});