import { CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, TableBody, TableCell, TableRow, TextField, } from "@material-ui/core"; import ConfirmButton from "@saleor/components/ConfirmButton"; import ResponsiveTable from "@saleor/components/ResponsiveTable"; import TableCellAvatar from "@saleor/components/TableCellAvatar"; import { SearchProductsQuery } from "@saleor/graphql"; import useSearchQuery from "@saleor/hooks/useSearchQuery"; import { ConfirmButtonTransitionState } from "@saleor/macaw-ui"; import { maybe } from "@saleor/misc"; import useScrollableDialogStyle from "@saleor/styles/useScrollableDialogStyle"; import { DialogProps, FetchMoreProps, RelayToFlat } from "@saleor/types"; import React from "react"; import InfiniteScroll from "react-infinite-scroll-component"; import { FormattedMessage, useIntl } from "react-intl"; import BackButton from "../BackButton"; import Checkbox from "../Checkbox"; import { messages } from "./messages"; import { useStyles } from "./styles"; export interface AssignProductDialogFormData { products: RelayToFlat; query: string; } export interface AssignProductDialogProps extends FetchMoreProps, DialogProps { confirmButtonState: ConfirmButtonTransitionState; products: RelayToFlat; loading: boolean; onFetch: (value: string) => void; onSubmit: (data: string[]) => void; } function handleProductAssign( productID: string, isSelected: boolean, selectedProducts: string[], setSelectedProducts: (data: string[]) => void, ) { if (isSelected) { setSelectedProducts( selectedProducts.filter(selectedProduct => selectedProduct !== productID), ); } else { setSelectedProducts([...selectedProducts, productID]); } } const scrollableTargetId = "assignProductScrollableDialog"; const AssignProductDialog: React.FC = props => { const { confirmButtonState, hasMore, open, loading, products, onClose, onFetch, onFetchMore, onSubmit, } = props; const classes = useStyles(props); const scrollableDialogClasses = useScrollableDialogStyle({}); const intl = useIntl(); const [query, onQueryChange] = useSearchQuery(onFetch); const [selectedProducts, setSelectedProducts] = React.useState([]); const handleSubmit = () => onSubmit(selectedProducts); return ( , }} /> } scrollableTarget={scrollableTargetId} > {products && products.map(product => { const isSelected = selectedProducts.some( selectedProduct => selectedProduct === product.id, ); return ( product.thumbnail.url)} /> {product.name} handleProductAssign( product.id, isSelected, selectedProducts, setSelectedProducts, ) } /> ); })} ); }; AssignProductDialog.displayName = "AssignProductDialog"; export default AssignProductDialog;