From 00e46d0d36fdce9acbce984cf8f4e587498a6481 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 25 Nov 2025 03:56:59 +0000 Subject: [PATCH] Consolidate part table views --- .../src/pages/part/CategoryDetail.tsx | 59 +++++++++++-------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/src/frontend/src/pages/part/CategoryDetail.tsx b/src/frontend/src/pages/part/CategoryDetail.tsx index a785857dd2..a39ce98f5e 100644 --- a/src/frontend/src/pages/part/CategoryDetail.tsx +++ b/src/frontend/src/pages/part/CategoryDetail.tsx @@ -6,7 +6,8 @@ import { IconListCheck, IconListDetails, IconPackages, - IconSitemap + IconSitemap, + IconTable } from '@tabler/icons-react'; import { useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; @@ -15,6 +16,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { getDetailUrl } from '@lib/functions/Navigation'; +import { useLocalStorage } from '@mantine/hooks'; import AdminButton from '../../components/buttons/AdminButton'; import StarredToggleButton from '../../components/buttons/StarredToggleButton'; import { @@ -33,6 +35,7 @@ import NavigationTree from '../../components/nav/NavigationTree'; import { PageDetail } from '../../components/nav/PageDetail'; import type { PanelType } from '../../components/panels/Panel'; import { PanelGroup } from '../../components/panels/PanelGroup'; +import SegmentedControlPanel from '../../components/panels/SegmentedControlPanel'; import { partCategoryFields } from '../../forms/PartForms'; import { useDeleteApiFormModal, @@ -258,6 +261,11 @@ export default function CategoryDetail() { ]; }, [id, user, category.pk, category.starred]); + const [partsView, setPartsView] = useLocalStorage({ + key: 'category-parts-view', + defaultValue: 'table' + }); + const panels: PanelType[] = useMemo( () => [ { @@ -272,20 +280,35 @@ export default function CategoryDetail() { icon: , content: }, - { + SegmentedControlPanel({ name: 'parts', label: t`Parts`, icon: , - content: ( - - ) - }, + selection: partsView, + onChange: setPartsView, + options: [ + { + value: 'table', + label: t`Table View`, + icon: , + content: ( + + ) + }, + { + value: 'parametric', + label: t`Parametric View`, + icon: , + content: + } + ] + }), { name: 'stockitem', label: t`Stock Items`, @@ -307,19 +330,9 @@ export default function CategoryDetail() { icon: , hidden: !id || !category.pk, content: - }, - { - name: 'parameters', - label: t`Part Parameters`, - icon: , - content: ( - <> - - - ) } ], - [category, id] + [category, id, partsView] ); const breadcrumbs = useMemo(