Skip to content

Commit

Permalink
refactor option dropdowns to reduce duplications
Browse files Browse the repository at this point in the history
  • Loading branch information
matmair committed Sep 1, 2024
1 parent be254da commit f4cb6e0
Show file tree
Hide file tree
Showing 13 changed files with 59 additions and 74 deletions.
21 changes: 21 additions & 0 deletions src/frontend/src/components/items/ActionDropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { modals } from '@mantine/modals';
import {
IconChevronDown,
IconCopy,
IconDotsVertical,
IconEdit,
IconLink,
IconQrcode,
Expand Down Expand Up @@ -122,6 +123,26 @@ export function ActionDropdown({
) : null;
}

export function OptionsActionDropdown({
actions = [],
tooltip = t`Options`,
hidden = false
}: {
actions: ActionDropdownItem[];
tooltip?: string;
hidden?: boolean;
}) {
return (
<ActionDropdown
icon={<IconDotsVertical />}
tooltip={tooltip}
actions={actions}
hidden={hidden}
noindicator
/>
);
}

// Dropdown menu for barcode actions
export function BarcodeActionDropdown({
model,
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/build/BuildDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
IconChecklist,
IconClipboardCheck,
IconClipboardList,
IconDots,
IconInfoCircle,
IconList,
IconListCheck,
Expand All @@ -25,12 +24,12 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
BarcodeActionDropdown,
CancelItemAction,
DuplicateItemAction,
EditItemAction,
HoldItemAction
HoldItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import InstanceDetail from '../../components/nav/InstanceDetail';
import { PageDetail } from '../../components/nav/PageDetail';
Expand Down Expand Up @@ -477,10 +476,8 @@ export default function BuildDetail() {
items={[build.pk]}
enableReports
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Build Order Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
onClick: () => editBuild.open(),
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/company/CompanyDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { Grid, Skeleton, Stack } from '@mantine/core';
import {
IconBuildingFactory2,
IconBuildingWarehouse,
IconDots,
IconInfoCircle,
IconMap2,
IconNotes,
Expand All @@ -25,9 +24,9 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
DeleteItemAction,
EditItemAction
EditItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { Breadcrumb } from '../../components/nav/BreadcrumbList';
import InstanceDetail from '../../components/nav/InstanceDetail';
Expand Down Expand Up @@ -302,10 +301,8 @@ export default function CompanyDetail(props: Readonly<CompanyDetailProps>) {
const companyActions = useMemo(() => {
return [
<AdminButton model={ModelType.company} pk={company.pk} />,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Company Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
hidden: !user.hasChangeRole(UserRoles.purchase_order),
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/company/ManufacturerPartDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { t } from '@lingui/macro';
import { Grid, Skeleton, Stack } from '@mantine/core';
import {
IconBuildingWarehouse,
IconDots,
IconInfoCircle,
IconList,
IconNotes,
Expand All @@ -17,10 +16,10 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
DeleteItemAction,
DuplicateItemAction,
EditItemAction
EditItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import InstanceDetail from '../../components/nav/InstanceDetail';
import { PageDetail } from '../../components/nav/PageDetail';
Expand Down Expand Up @@ -236,10 +235,8 @@ export default function ManufacturerPartDetail() {
model={ModelType.manufacturerpart}
pk={manufacturerPart.pk}
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Manufacturer Part Actions`}
icon={<IconDots />}
noindicator
actions={[
DuplicateItemAction({
hidden: !user.hasAddRole(UserRoles.purchase_order),
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/company/SupplierPartDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { t } from '@lingui/macro';
import { Grid, Skeleton, Stack } from '@mantine/core';
import {
IconCurrencyDollar,
IconDots,
IconInfoCircle,
IconNotes,
IconPackages,
Expand All @@ -18,11 +17,11 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
BarcodeActionDropdown,
DeleteItemAction,
DuplicateItemAction,
EditItemAction
EditItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import InstanceDetail from '../../components/nav/InstanceDetail';
import { PageDetail } from '../../components/nav/PageDetail';
Expand Down Expand Up @@ -272,10 +271,8 @@ export default function SupplierPartDetail() {
hash={supplierPart.barcode_hash}
perm={user.hasChangeRole(UserRoles.purchase_order)}
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Supplier Part Actions`}
icon={<IconDots />}
noindicator
actions={[
DuplicateItemAction({
hidden: !user.hasAddRole(UserRoles.purchase_order),
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/part/CategoryDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { t } from '@lingui/macro';
import { Group, LoadingOverlay, Skeleton, Stack, Text } from '@mantine/core';
import {
IconCategory,
IconDots,
IconInfoCircle,
IconListDetails,
IconSitemap
Expand All @@ -14,9 +13,9 @@ import AdminButton from '../../components/buttons/AdminButton';
import { DetailsField, DetailsTable } from '../../components/details/Details';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import {
ActionDropdown,
DeleteItemAction,
EditItemAction
EditItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { ApiIcon } from '../../components/items/ApiIcon';
import InstanceDetail from '../../components/nav/InstanceDetail';
Expand Down Expand Up @@ -212,10 +211,8 @@ export default function CategoryDetail() {
const categoryActions = useMemo(() => {
return [
<AdminButton model={ModelType.partcategory} pk={category.pk} />,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Category Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
hidden: !id || !user.hasChangeRole(UserRoles.part_category),
Expand Down
8 changes: 3 additions & 5 deletions src/frontend/src/pages/part/PartDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import {
IconCalendarStats,
IconClipboardList,
IconCurrencyDollar,
IconDots,
IconInfoCircle,
IconLayersLinked,
IconList,
Expand Down Expand Up @@ -51,7 +50,8 @@ import {
BarcodeActionDropdown,
DeleteItemAction,
DuplicateItemAction,
EditItemAction
EditItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { PlaceholderPanel } from '../../components/items/Placeholder';
import { StylishText } from '../../components/items/StylishText';
Expand Down Expand Up @@ -1029,10 +1029,8 @@ export default function PartDetail() {
}
]}
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Part Actions`}
icon={<IconDots />}
noindicator
actions={[
DuplicateItemAction({
hidden: !user.hasAddRole(UserRoles.part),
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { t } from '@lingui/macro';
import { Accordion, Grid, Skeleton, Stack } from '@mantine/core';
import {
IconDots,
IconInfoCircle,
IconList,
IconNotes,
Expand All @@ -19,12 +18,12 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
BarcodeActionDropdown,
CancelItemAction,
DuplicateItemAction,
EditItemAction,
HoldItemAction
HoldItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { StylishText } from '../../components/items/StylishText';
import InstanceDetail from '../../components/nav/InstanceDetail';
Expand Down Expand Up @@ -408,10 +407,8 @@ export default function PurchaseOrderDetail() {
items={[order.pk]}
enableReports
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Order Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
hidden: !canEdit,
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/sales/ReturnOrderDetail.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { t } from '@lingui/macro';
import { Accordion, Grid, Skeleton, Stack } from '@mantine/core';
import {
IconDots,
IconInfoCircle,
IconList,
IconNotes,
Expand All @@ -18,12 +17,12 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
BarcodeActionDropdown,
CancelItemAction,
DuplicateItemAction,
EditItemAction,
HoldItemAction
HoldItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { StylishText } from '../../components/items/StylishText';
import InstanceDetail from '../../components/nav/InstanceDetail';
Expand Down Expand Up @@ -409,10 +408,8 @@ export default function ReturnOrderDetail() {
items={[order.pk]}
enableReports
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Order Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
hidden: !user.hasChangeRole(UserRoles.return_order),
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/sales/SalesOrderDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { t } from '@lingui/macro';
import { Accordion, Grid, Skeleton, Stack } from '@mantine/core';
import {
IconBookmark,
IconDots,
IconInfoCircle,
IconList,
IconNotes,
Expand All @@ -21,12 +20,12 @@ import { DetailsImage } from '../../components/details/DetailsImage';
import { ItemDetailsGrid } from '../../components/details/ItemDetails';
import NotesEditor from '../../components/editors/NotesEditor';
import {
ActionDropdown,
BarcodeActionDropdown,
CancelItemAction,
DuplicateItemAction,
EditItemAction,
HoldItemAction
HoldItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { StylishText } from '../../components/items/StylishText';
import InstanceDetail from '../../components/nav/InstanceDetail';
Expand Down Expand Up @@ -449,10 +448,8 @@ export default function SalesOrderDetail() {
items={[order.pk]}
enableReports
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Order Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
hidden: !canEdit,
Expand Down
14 changes: 4 additions & 10 deletions src/frontend/src/pages/stock/LocationDetail.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
import { t } from '@lingui/macro';
import { Group, Skeleton, Stack, Text } from '@mantine/core';
import {
IconDots,
IconInfoCircle,
IconPackages,
IconSitemap
} from '@tabler/icons-react';
import { IconInfoCircle, IconPackages, IconSitemap } from '@tabler/icons-react';
import { useMemo, useState } from 'react';
import { useNavigate, useParams } from 'react-router-dom';

Expand All @@ -18,7 +13,8 @@ import {
ActionDropdown,
BarcodeActionDropdown,
DeleteItemAction,
EditItemAction
EditItemAction,
OptionsActionDropdown
} from '../../components/items/ActionDropdown';
import { ApiIcon } from '../../components/items/ApiIcon';
import InstanceDetail from '../../components/nav/InstanceDetail';
Expand Down Expand Up @@ -331,10 +327,8 @@ export default function Stock() {
}
]}
/>,
<ActionDropdown
<OptionsActionDropdown
tooltip={t`Location Actions`}
icon={<IconDots />}
noindicator
actions={[
EditItemAction({
hidden: !id || !user.hasChangeRole(UserRoles.stock_location),
Expand Down
Loading

0 comments on commit f4cb6e0

Please sign in to comment.