2
0
mirror of https://github.com/inventree/InvenTree.git synced 2026-04-28 13:54:25 +00:00

[UI] Adjust system settings (#11808)

* Adjust system settings

- Rearrange settings to match major menu groups
- Split long settings panels into separate lists

Co-authored-by: Copilot <copilot@github.com>

* Adjust playwright tests

---------

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Oliver
2026-04-26 15:46:05 +10:00
committed by GitHub
parent 594b6e09b3
commit b8f13b8aa9
2 changed files with 128 additions and 127 deletions
@@ -1,9 +1,9 @@
import { t } from '@lingui/core/macro'; import { t } from '@lingui/core/macro';
import { Divider, Skeleton, Stack } from '@mantine/core'; import { Skeleton, Stack } from '@mantine/core';
import { import {
IconBellCog, IconBellCog,
IconCategory, IconBox,
IconClipboardList, IconBuildingFactory2,
IconCurrencyDollar, IconCurrencyDollar,
IconFileAnalytics, IconFileAnalytics,
IconFingerprint, IconFingerprint,
@@ -13,10 +13,7 @@ import {
IconQrcode, IconQrcode,
IconServerCog, IconServerCog,
IconShoppingCart, IconShoppingCart,
IconTag, IconTruckDelivery
IconTools,
IconTruckDelivery,
IconTruckReturn
} from '@tabler/icons-react'; } from '@tabler/icons-react';
import { lazy, useMemo } from 'react'; import { lazy, useMemo } from 'react';
@@ -81,6 +78,7 @@ export default function SystemSettings() {
label: t`Authentication`, label: t`Authentication`,
icon: <IconFingerprint />, icon: <IconFingerprint />,
content: ( content: (
<Stack gap='xs'>
<GlobalSettingList <GlobalSettingList
keys={[ keys={[
'LOGIN_ENABLE_PWD_FORGOT', 'LOGIN_ENABLE_PWD_FORGOT',
@@ -88,18 +86,24 @@ export default function SystemSettings() {
'LOGIN_ENFORCE_MFA', 'LOGIN_ENFORCE_MFA',
'LOGIN_ENABLE_REG', 'LOGIN_ENABLE_REG',
'LOGIN_SIGNUP_MAIL_TWICE', 'LOGIN_SIGNUP_MAIL_TWICE',
'LOGIN_SIGNUP_PWD_TWICE', 'LOGIN_SIGNUP_PWD_TWICE'
'SIGNUP_GROUP', ]}
'LOGIN_SIGNUP_MAIL_RESTRICTION', />
<GlobalSettingList
heading={t`Single Sign-On (SSO) Settings`}
keys={[
'LOGIN_ENABLE_SSO', 'LOGIN_ENABLE_SSO',
'LOGIN_ENABLE_SSO_REG', 'LOGIN_ENABLE_SSO_REG',
'LOGIN_SIGNUP_SSO_AUTO', 'LOGIN_SIGNUP_SSO_AUTO',
'LOGIN_ENABLE_SSO_GROUP_SYNC', 'LOGIN_ENABLE_SSO_GROUP_SYNC',
'SSO_GROUP_MAP', 'SSO_GROUP_MAP',
'SSO_GROUP_KEY', 'SSO_GROUP_KEY',
'SSO_REMOVE_GROUPS' 'SSO_REMOVE_GROUPS',
'SIGNUP_GROUP',
'LOGIN_SIGNUP_MAIL_RESTRICTION'
]} ]}
/> />
</Stack>
) )
}, },
{ {
@@ -168,12 +172,6 @@ export default function SystemSettings() {
</> </>
) )
}, },
{
name: 'labels',
label: t`Labels`,
icon: <IconTag />,
content: <GlobalSettingList keys={['LABEL_ENABLE', 'LABEL_DPI']} />
},
{ {
name: 'reporting', name: 'reporting',
label: t`Reporting`, label: t`Reporting`,
@@ -184,7 +182,9 @@ export default function SystemSettings() {
'REPORT_ENABLE', 'REPORT_ENABLE',
'REPORT_DEFAULT_PAGE_SIZE', 'REPORT_DEFAULT_PAGE_SIZE',
'REPORT_DEBUG_MODE', 'REPORT_DEBUG_MODE',
'REPORT_LOG_ERRORS' 'REPORT_LOG_ERRORS',
'LABEL_ENABLE',
'LABEL_DPI'
]} ]}
/> />
) )
@@ -198,8 +198,9 @@ export default function SystemSettings() {
{ {
name: 'parts', name: 'parts',
label: t`Parts`, label: t`Parts`,
icon: <IconCategory />, icon: <IconBox />,
content: ( content: (
<Stack gap='xs'>
<GlobalSettingList <GlobalSettingList
keys={[ keys={[
'PART_NAME_FORMAT', 'PART_NAME_FORMAT',
@@ -210,6 +211,13 @@ export default function SystemSettings() {
'PART_ENABLE_REVISION', 'PART_ENABLE_REVISION',
'PART_REVISION_ASSEMBLY_ONLY', 'PART_REVISION_ASSEMBLY_ONLY',
'PART_SHOW_RELATED', 'PART_SHOW_RELATED',
'PART_BOM_ALLOW_ZERO_QUANTITY',
'PART_CATEGORY_DEFAULT_ICON'
]}
/>
<GlobalSettingList
heading={t`Part Creation`}
keys={[
'PART_CREATE_INITIAL', 'PART_CREATE_INITIAL',
'PART_CREATE_SUPPLIER', 'PART_CREATE_SUPPLIER',
'PART_TEMPLATE', 'PART_TEMPLATE',
@@ -220,13 +228,12 @@ export default function SystemSettings() {
'PART_SALABLE', 'PART_SALABLE',
'PART_VIRTUAL', 'PART_VIRTUAL',
'PART_COPY_BOM', 'PART_COPY_BOM',
'PART_BOM_ALLOW_ZERO_QUANTITY',
'PART_COPY_PARAMETERS', 'PART_COPY_PARAMETERS',
'PART_COPY_TESTS', 'PART_COPY_TESTS',
'PART_CATEGORY_PARAMETERS', 'PART_CATEGORY_PARAMETERS'
'PART_CATEGORY_DEFAULT_ICON'
]} ]}
/> />
</Stack>
) )
}, },
{ {
@@ -234,15 +241,12 @@ export default function SystemSettings() {
label: t`Stock`, label: t`Stock`,
icon: <IconPackages />, icon: <IconPackages />,
content: ( content: (
<Stack gap='xs'>
<GlobalSettingList <GlobalSettingList
keys={[ keys={[
'SERIAL_NUMBER_GLOBALLY_UNIQUE', 'SERIAL_NUMBER_GLOBALLY_UNIQUE',
'STOCK_DELETE_DEPLETED_DEFAULT', 'STOCK_DELETE_DEPLETED_DEFAULT',
'STOCK_BATCH_CODE_TEMPLATE', 'STOCK_BATCH_CODE_TEMPLATE',
'STOCK_ENABLE_EXPIRY',
'STOCK_STALE_DAYS',
'STOCK_ALLOW_EXPIRED_SALE',
'STOCK_ALLOW_EXPIRED_BUILD',
'STOCK_OWNERSHIP_CONTROL', 'STOCK_OWNERSHIP_CONTROL',
'STOCK_LOCATION_DEFAULT_ICON', 'STOCK_LOCATION_DEFAULT_ICON',
'STOCK_SHOW_INSTALLED_ITEMS', 'STOCK_SHOW_INSTALLED_ITEMS',
@@ -251,14 +255,15 @@ export default function SystemSettings() {
'TEST_STATION_DATA' 'TEST_STATION_DATA'
]} ]}
/> />
) <GlobalSettingList
}, heading={t`Stock Expiry`}
{ keys={[
name: 'stock-history', 'STOCK_ENABLE_EXPIRY',
label: t`Stock History`, 'STOCK_STALE_DAYS',
icon: <IconClipboardList />, 'STOCK_ALLOW_EXPIRED_SALE',
content: ( 'STOCK_ALLOW_EXPIRED_BUILD'
<Stack gap='xs'> ]}
/>
<GlobalSettingList <GlobalSettingList
heading={t`Part Stocktake`} heading={t`Part Stocktake`}
keys={[ keys={[
@@ -269,7 +274,6 @@ export default function SystemSettings() {
'STOCKTAKE_DELETE_DAYS' 'STOCKTAKE_DELETE_DAYS'
]} ]}
/> />
<Divider />
<GlobalSettingList <GlobalSettingList
heading={t`Stock Tracking`} heading={t`Stock Tracking`}
keys={[ keys={[
@@ -281,11 +285,12 @@ export default function SystemSettings() {
) )
}, },
{ {
name: 'buildorders', name: 'manufacturing',
label: t`Build Orders`, label: t`Manufacturing`,
icon: <IconTools />, icon: <IconBuildingFactory2 />,
content: ( content: (
<GlobalSettingList <GlobalSettingList
heading={t`Build Orders`}
keys={[ keys={[
'BUILDORDER_REFERENCE_PATTERN', 'BUILDORDER_REFERENCE_PATTERN',
'BUILDORDER_EXTERNAL_BUILDS', 'BUILDORDER_EXTERNAL_BUILDS',
@@ -300,11 +305,12 @@ export default function SystemSettings() {
) )
}, },
{ {
name: 'purchaseorders', name: 'purchasing',
label: t`Purchase Orders`, label: t`Purchasing`,
icon: <IconShoppingCart />, icon: <IconShoppingCart />,
content: ( content: (
<GlobalSettingList <GlobalSettingList
heading={t`Purchase Orders`}
keys={[ keys={[
'PURCHASEORDER_REFERENCE_PATTERN', 'PURCHASEORDER_REFERENCE_PATTERN',
'PURCHASEORDER_REQUIRE_RESPONSIBLE', 'PURCHASEORDER_REQUIRE_RESPONSIBLE',
@@ -316,11 +322,13 @@ export default function SystemSettings() {
) )
}, },
{ {
name: 'salesorders', name: 'sales',
label: t`Sales Orders`, label: t`Sales`,
icon: <IconTruckDelivery />, icon: <IconTruckDelivery />,
content: ( content: (
<Stack gap='xs'>
<GlobalSettingList <GlobalSettingList
heading={t`Sales Orders`}
keys={[ keys={[
'SALESORDER_REFERENCE_PATTERN', 'SALESORDER_REFERENCE_PATTERN',
'SALESORDER_REQUIRE_RESPONSIBLE', 'SALESORDER_REQUIRE_RESPONSIBLE',
@@ -330,14 +338,8 @@ export default function SystemSettings() {
'SALESORDER_SHIPMENT_REQUIRES_CHECK' 'SALESORDER_SHIPMENT_REQUIRES_CHECK'
]} ]}
/> />
)
},
{
name: 'returnorders',
label: t`Return Orders`,
icon: <IconTruckReturn />,
content: (
<GlobalSettingList <GlobalSettingList
heading={t`Return Orders`}
keys={[ keys={[
'RETURNORDER_ENABLED', 'RETURNORDER_ENABLED',
'RETURNORDER_REFERENCE_PATTERN', 'RETURNORDER_REFERENCE_PATTERN',
@@ -345,11 +347,12 @@ export default function SystemSettings() {
'RETURNORDER_EDIT_COMPLETED_ORDERS' 'RETURNORDER_EDIT_COMPLETED_ORDERS'
]} ]}
/> />
</Stack>
) )
}, },
{ {
name: 'plugins', name: 'plugins',
label: t`Plugin Settings`, label: t`Plugins`,
icon: <IconPlugConnected />, icon: <IconPlugConnected />,
content: <PluginSettingsGroup global={true} /> content: <PluginSettingsGroup global={true} />
} }
+6 -8
View File
@@ -178,7 +178,6 @@ test('Settings - Global', async ({ browser }) => {
await loadTab(page, 'Pricing'); await loadTab(page, 'Pricing');
await loadTab(page, 'Parts'); await loadTab(page, 'Parts');
await loadTab(page, 'Stock', true); await loadTab(page, 'Stock', true);
await loadTab(page, 'Stock History');
await loadTab(page, 'Notifications'); await loadTab(page, 'Notifications');
await page await page
@@ -195,7 +194,7 @@ test('Settings - Global', async ({ browser }) => {
.getByText('URL that is used to send messages to a slack channel') .getByText('URL that is used to send messages to a slack channel')
.waitFor(); .waitFor();
await loadTab(page, 'Plugin Settings'); await loadTab(page, 'Plugins');
await page await page
.getByText('The settings below are specific to each available plugin') .getByText('The settings below are specific to each available plugin')
.waitFor(); .waitFor();
@@ -236,13 +235,12 @@ test('Settings - Admin', async ({ browser }) => {
await loadTab(page, 'Barcodes'); await loadTab(page, 'Barcodes');
await loadTab(page, 'Notifications'); await loadTab(page, 'Notifications');
await loadTab(page, 'Pricing'); await loadTab(page, 'Pricing');
await loadTab(page, 'Labels');
await loadTab(page, 'Reporting'); await loadTab(page, 'Reporting');
await loadTab(page, 'Parts');
await loadTab(page, 'Build Orders'); await loadTab(page, 'Stock');
await loadTab(page, 'Purchase Orders'); await loadTab(page, 'Manufacturing');
await loadTab(page, 'Sales Orders'); await loadTab(page, 'Purchasing');
await loadTab(page, 'Return Orders'); await loadTab(page, 'Sales');
// Admin Center // Admin Center
await page.getByRole('button', { name: 'admin' }).click(); await page.getByRole('button', { name: 'admin' }).click();