2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-11-09 09:35:42 +00:00

Consolidate data actions for BOM table (#10763)

* Consolidate data actions for BOM table

* Adjust playwright tests
This commit is contained in:
Oliver
2025-11-04 12:02:00 +11:00
committed by GitHub
parent 901846272b
commit 8e20bc53db
3 changed files with 45 additions and 29 deletions

View File

@@ -1,19 +1,3 @@
import { t } from '@lingui/core/macro';
import { ActionIcon, Alert, Group, Stack, Text, Tooltip } from '@mantine/core';
import { showNotification } from '@mantine/notifications';
import {
IconArrowRight,
IconCircleCheck,
IconExclamationCircle,
IconFileArrowLeft,
IconLock,
IconSwitch3
} from '@tabler/icons-react';
import { type ReactNode, useCallback, useMemo, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { ActionButton } from '@lib/components/ActionButton';
import { AddItemButton } from '@lib/components/AddItemButton';
import { import {
type RowAction, type RowAction,
RowDeleteAction, RowDeleteAction,
@@ -27,8 +11,23 @@ import { apiUrl } from '@lib/functions/Api';
import { navigateToLink } from '@lib/functions/Navigation'; import { navigateToLink } from '@lib/functions/Navigation';
import type { TableFilter } from '@lib/types/Filters'; import type { TableFilter } from '@lib/types/Filters';
import type { TableColumn } from '@lib/types/Tables'; import type { TableColumn } from '@lib/types/Tables';
import { t } from '@lingui/core/macro';
import { ActionIcon, Alert, Group, Stack, Text, Tooltip } from '@mantine/core';
import { showNotification } from '@mantine/notifications';
import {
IconArrowRight,
IconCircleCheck,
IconExclamationCircle,
IconFileUpload,
IconLock,
IconPlus,
IconSwitch3
} from '@tabler/icons-react';
import { type ReactNode, useCallback, useMemo, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { Thumbnail } from '../../components/images/Thumbnail'; import { Thumbnail } from '../../components/images/Thumbnail';
import ImporterDrawer from '../../components/importer/ImporterDrawer'; import ImporterDrawer from '../../components/importer/ImporterDrawer';
import { ActionDropdown } from '../../components/items/ActionDropdown';
import { RenderPart } from '../../components/render/Part'; import { RenderPart } from '../../components/render/Part';
import { useApi } from '../../contexts/ApiContext'; import { useApi } from '../../contexts/ApiContext';
import { formatDecimal, formatPriceRange } from '../../defaults/formatters'; import { formatDecimal, formatPriceRange } from '../../defaults/formatters';
@@ -613,18 +612,26 @@ export function BomTable({
const tableActions = useMemo(() => { const tableActions = useMemo(() => {
return [ return [
<ActionButton <ActionDropdown
key='import-bom' key='add-bom-actions'
tooltip={t`Add BOM Items`}
position='bottom-start'
icon={<IconPlus />}
hidden={partLocked || !user.hasAddRole(UserRoles.part)} hidden={partLocked || !user.hasAddRole(UserRoles.part)}
tooltip={t`Import BOM Data`} actions={[
icon={<IconFileArrowLeft />} {
onClick={() => importBomItem.open()} name: t`Add BOM Item`,
/>, icon: <IconPlus />,
<AddItemButton tooltip: t`Add a single BOM item`,
key='add-bom-item' onClick: () => newBomItem.open()
hidden={partLocked || !user.hasAddRole(UserRoles.part)} },
tooltip={t`Add BOM Item`} {
onClick={() => newBomItem.open()} name: t`Import from File`,
icon: <IconFileUpload />,
tooltip: t`Import BOM items from a file`,
onClick: () => importBomItem.open()
}
]}
/> />
]; ];
}, [partLocked, user]); }, [partLocked, user]);

View File

@@ -175,8 +175,12 @@ test('Part - Editing', async ({ browser }) => {
test('Parts - Locking', async ({ browser }) => { test('Parts - Locking', async ({ browser }) => {
const page = await doCachedLogin(browser, { url: 'part/104/bom' }); const page = await doCachedLogin(browser, { url: 'part/104/bom' });
await loadTab(page, 'Bill of Materials'); await loadTab(page, 'Bill of Materials');
await page.getByLabel('action-button-add-bom-item').waitFor(); await page
.getByRole('button', { name: 'action-menu-add-bom-items' })
.waitFor();
await loadTab(page, 'Parameters'); await loadTab(page, 'Parameters');
await page.getByLabel('action-button-add-parameter').waitFor(); await page.getByLabel('action-button-add-parameter').waitFor();

View File

@@ -80,8 +80,13 @@ test('Importing - BOM', async ({ browser }) => {
url: 'part/109/bom' url: 'part/109/bom'
}); });
// Open the BOM importer wizard
await page.getByRole('button', { name: 'action-menu-add-bom-items' }).click();
await page await page
.getByRole('button', { name: 'action-button-import-bom-data' }) .getByRole('menuitem', {
name: 'action-menu-add-bom-items-import-from-file'
})
.click(); .click();
// Select BOM file fixture for import // Select BOM file fixture for import