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 * as React from "react"; import ConfirmButton, { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import Form from "@saleor/components/Form"; import FormSpacer from "@saleor/components/FormSpacer"; import { SearchCategories_categories_edges_node } from "../../containers/SearchCategories/types/SearchCategories"; import i18n from "../../i18n"; import Checkbox from "../Checkbox"; export interface FormData { categories: SearchCategories_categories_edges_node[]; query: string; } const styles = createStyles({ avatar: { "&:first-child": { paddingLeft: 0 } }, checkboxCell: { paddingLeft: 0 }, overflow: { overflowY: "visible" }, wideCell: { width: "100%" } }); interface AssignCategoriesDialogProps extends WithStyles { categories: SearchCategories_categories_edges_node[]; confirmButtonState: ConfirmButtonTransitionState; open: boolean; loading: boolean; onClose: () => void; onFetch: (value: string) => void; onSubmit: (data: FormData) => void; } const initialForm: FormData = { categories: [], query: "" }; const AssignCategoriesDialog = withStyles(styles, { name: "AssignCategoriesDialog" })( ({ classes, confirmButtonState, open, loading, categories: categories, onClose, onFetch, onSubmit }: AssignCategoriesDialogProps) => (
{({ data, change }) => ( <> {i18n.t("Assign Categories")} change(event, () => onFetch(data.query))} label={i18n.t("Search Categories", { context: "product search input label" })} placeholder={i18n.t( "Search by product name, attribute, product type etc...", { context: "product search input placeholder" } )} fullWidth InputProps={{ autoComplete: "off", endAdornment: loading && }} /> {categories && categories.map(category => { const isChecked = !!data.categories.find( selectedCategories => selectedCategories.id === category.id ); return ( isChecked ? change({ target: { name: "categories", value: data.categories.filter( selectedCategories => selectedCategories.id !== category.id ) } } as any) : change({ target: { name: "categories", value: [...data.categories, category] } } as any) } /> {category.name} ); })}
{i18n.t("Assign categories", { context: "button" })} )}
) ); AssignCategoriesDialog.displayName = "AssignCategoriesDialog"; export default AssignCategoriesDialog;