Index: components/AdHocPartQueue/AdHocPartQueue.component.tsx =================================================================== diff -u -r451cae9ef65528cd5cf450d91b614f6b90f3bcbc -r3f1c728b3341799d0c5c17a2b0c5d36f51a7b031 --- components/AdHocPartQueue/AdHocPartQueue.component.tsx (.../AdHocPartQueue.component.tsx) (revision 451cae9ef65528cd5cf450d91b614f6b90f3bcbc) +++ components/AdHocPartQueue/AdHocPartQueue.component.tsx (.../AdHocPartQueue.component.tsx) (revision 3f1c728b3341799d0c5c17a2b0c5d36f51a7b031) @@ -1,4 +1,4 @@ -import { EditOutlined, ExportOutlined, UndoOutlined } from '@ant-design/icons'; +import { CheckOutlined, EditOutlined, ExportOutlined, UndoOutlined } from '@ant-design/icons'; import { Alert, Button, Col, Input, notification, Row, Spin, Table } from 'antd'; import { useRowSelection } from 'lemans-common'; import { columnFilter, filterDropdown, onFilterVisibile } from 'lemans-common/components/FilterForm/FilterForm.helper'; @@ -14,6 +14,9 @@ import { AdHocPartQueueProps } from './AdHocPartQueue.types'; export const AdHocPartQueueComponent = ({ + asSelector, + onSelect, + setRefresh, loader, partNumbers, updatePartNumbers, fetchParts, parts, reset, @@ -26,6 +29,17 @@ setSelectedParts([]); }; + const onSelectParts = (partNumbers: string[]) => { + if(onSelect) { + onSelect(partNumbers); + } + if(setRefresh) { + setRefresh(true); + } + setSelectedParts([]); + reset(); + } + const actionBarOptions: IGenericActionBarOption[] = [ { icon: , @@ -59,12 +73,25 @@ } {parts.length !== 0 && <> - + + + + {!!asSelector && + + + + } + + {!asSelector && + + }
@@ -79,6 +106,14 @@ {featureToggle.isEU && }
+
+ {!!asSelector && + + + + } } ); Index: components/AdHocPartQueue/AdHocPartQueue.types.ts =================================================================== diff -u -r87df89b28344e49a43332b839631d8ad07ff557c -r3f1c728b3341799d0c5c17a2b0c5d36f51a7b031 --- components/AdHocPartQueue/AdHocPartQueue.types.ts (.../AdHocPartQueue.types.ts) (revision 87df89b28344e49a43332b839631d8ad07ff557c) +++ components/AdHocPartQueue/AdHocPartQueue.types.ts (.../AdHocPartQueue.types.ts) (revision 3f1c728b3341799d0c5c17a2b0c5d36f51a7b031) @@ -4,7 +4,9 @@ // What gets passed into the component from the parent as attributes export declare interface IAdHocPartQueueInputProps { - + asSelector?: boolean; + onSelect?: (partNumbers:string[]) => void; + setRefresh?: (value: React.SetStateAction) => void; } export declare interface IPartProps { Index: components/PublicationCategoryParts/PublicationCategoryParts.component.tsx =================================================================== diff -u -r70a024eadf29b5eaf86ddc25de3955e8fd8450f8 -r3f1c728b3341799d0c5c17a2b0c5d36f51a7b031 --- components/PublicationCategoryParts/PublicationCategoryParts.component.tsx (.../PublicationCategoryParts.component.tsx) (revision 70a024eadf29b5eaf86ddc25de3955e8fd8450f8) +++ components/PublicationCategoryParts/PublicationCategoryParts.component.tsx (.../PublicationCategoryParts.component.tsx) (revision 3f1c728b3341799d0c5c17a2b0c5d36f51a7b031) @@ -1,5 +1,5 @@ -import { CloseOutlined, CopyOutlined, DeleteOutlined } from '@ant-design/icons'; -import { Select, Spin, Table } from 'antd'; +import { CloseOutlined, CopyOutlined, DeleteOutlined, PlusOutlined } from '@ant-design/icons'; +import { Button, Modal, Select, Spin, Table } from 'antd'; import { SelectValue } from 'antd/lib/select'; import { IPart } from 'lemans-api'; import { ICategory } from 'lemans-api/models/Category/category.types'; @@ -8,10 +8,11 @@ import { GenericActionBar } from 'lemans-common/components/GenericActionBar'; import { genericActionBarModal } from 'lemans-common/components/GenericActionBar/GenericActionBar.container'; import { GenericActionBarProps, IGenericActionBarOption, IGenericActionBarStateProps, Props } from 'lemans-common/components/GenericActionBar/GenericActionBar.types'; -import { useLoader } from 'lemans-common/libs/useToggle'; +import { useLoader, useToggle } from 'lemans-common/libs/useToggle'; import { service } from 'lemans-dashboard-common'; import moment from 'moment'; import React from 'react'; +import { AdHocPartQueue } from '../AdHocPartQueue'; import { IsDigiActiveFilter } from '../Filters/IsDigiActiveFilter'; import { PartStatusFilter } from '../Filters/PartStatusFilter'; import { PartBrandColumn, PartDetailsColumn } from '../PartList/PartColumns/PartColumns.component'; @@ -29,8 +30,11 @@ const [selectedParts, setSelectedParts] = React.useState([]); const updateSelectedParts = (ids:React.Key[]) => {setSelectedParts(ids.map(id => `${id}`))}; - + const [refresh, setRefresh] = React.useState(false); + const adHocPartSelectorModal = useToggle(); + const reload = () => { + adHocPartSelectorModal.off(); loader.start(); service.publicationCategory.parts.search(props.categoryId, filters) .then(setParts) @@ -49,7 +53,7 @@ return true; } - React.useEffect(reload, [filters, props.categoryId]); + React.useEffect(reload, [filters, props.categoryId, refresh]); const onSortEnd = (src: IPart, dest:IPart, mode: "BEFORE" | "AFTER") => { if(!!src.partNumber && !!dest.partNumber) { @@ -163,7 +167,28 @@ ]; return - + + + Cancel, + ]} + title={'Ad hoc Part Selector'} + open={adHocPartSelectorModal.isOn} + onCancel={adHocPartSelectorModal.off} + width={"80%"} + destroyOnClose={true} + transitionName="" + maskTransitionName="" + > + + + - {props.label || <> Add Parts} + {<> {props.label} || <> Add Parts}