import Button from "@material-ui/core/Button"; import CircularProgress from "@material-ui/core/CircularProgress"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; import DialogContent from "@material-ui/core/DialogContent"; import DialogTitle from "@material-ui/core/DialogTitle"; import { createStyles, withStyles, WithStyles } from "@material-ui/core/styles"; import Table from "@material-ui/core/Table"; import TableBody from "@material-ui/core/TableBody"; import TableCell from "@material-ui/core/TableCell"; import TableRow from "@material-ui/core/TableRow"; import TextField from "@material-ui/core/TextField"; import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; import useSearchQuery from "@saleor/hooks/useSearchQuery"; import { buttonMessages } from "@saleor/intl"; import { SearchCollections_collections_edges_node } from "../../containers/SearchCollections/types/SearchCollections"; import Checkbox from "../Checkbox"; import ConfirmButton, { ConfirmButtonTransitionState } from "../ConfirmButton/ConfirmButton"; import FormSpacer from "../FormSpacer"; export interface FormData { collections: SearchCollections_collections_edges_node[]; query: string; } const styles = createStyles({ avatar: { "&:first-child": { paddingLeft: 0 } }, checkboxCell: { paddingLeft: 0 }, overflow: { overflowY: "visible" }, wideCell: { width: "100%" } }); interface AssignCollectionDialogProps extends WithStyles { collections: SearchCollections_collections_edges_node[]; confirmButtonState: ConfirmButtonTransitionState; open: boolean; loading: boolean; onClose: () => void; onFetch: (value: string) => void; onSubmit: (data: SearchCollections_collections_edges_node[]) => void; } function handleCollectionAssign( product: SearchCollections_collections_edges_node, isSelected: boolean, selectedCollections: SearchCollections_collections_edges_node[], setSelectedCollections: ( data: SearchCollections_collections_edges_node[] ) => void ) { if (isSelected) { setSelectedCollections( selectedCollections.filter( selectedProduct => selectedProduct.id !== product.id ) ); } else { setSelectedCollections([...selectedCollections, product]); } } const AssignCollectionDialog = withStyles(styles, { name: "AssignCollectionDialog" })( ({ classes, confirmButtonState, open, loading, collections, onClose, onFetch, onSubmit }: AssignCollectionDialogProps) => { const intl = useIntl(); const [query, onQueryChange] = useSearchQuery(onFetch); const [selectedCollections, setSelectedCollections] = React.useState< SearchCollections_collections_edges_node[] >([]); const handleSubmit = () => onSubmit(selectedCollections); return ( }} /> {collections && collections.map(collection => { const isSelected = !!selectedCollections.find( selectedCollection => selectedCollection.id === collection.id ); return ( handleCollectionAssign( collection, isSelected, selectedCollections, setSelectedCollections ) } /> {collection.name} ); })}
); } ); AssignCollectionDialog.displayName = "AssignCollectionDialog"; export default AssignCollectionDialog;