import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, TableBody, TableCell, TableRow, TextField } from "@material-ui/core"; import ConfirmButton, { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import ResponsiveTable from "@saleor/components/ResponsiveTable"; import TableCellAvatar from "@saleor/components/TableCellAvatar"; import useSearchQuery from "@saleor/hooks/useSearchQuery"; import { buttonMessages } from "@saleor/intl"; import { maybe } from "@saleor/misc"; import { SearchProducts_search_edges_node } from "@saleor/searches/types/SearchProducts"; import useScrollableDialogStyle from "@saleor/styles/useScrollableDialogStyle"; import { DialogProps, FetchMoreProps } from "@saleor/types"; import React from "react"; import InfiniteScroll from "react-infinite-scroll-component"; import { FormattedMessage, useIntl } from "react-intl"; import Checkbox from "../Checkbox"; import { messages } from "./messages"; import { useStyles } from "./styles"; export interface AssignProductDialogFormData { products: SearchProducts_search_edges_node[]; query: string; } export interface AssignProductDialogProps extends FetchMoreProps, DialogProps { confirmButtonState: ConfirmButtonTransitionState; products: SearchProducts_search_edges_node[]; 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;