saleor-dashboard/src/orders/components/OrderShippingMethodEditDialog/OrderShippingMethodEditDialog.tsx

127 lines
3.5 KiB
TypeScript
Raw Normal View History

2019-06-19 14:40:52 +00:00
import Button from "@material-ui/core/Button";
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";
2019-10-30 14:34:24 +00:00
import { makeStyles } from "@material-ui/core/styles";
2019-08-09 10:26:22 +00:00
import React from "react";
import { FormattedMessage } from "react-intl";
2019-06-19 14:40:52 +00:00
import ConfirmButton, {
ConfirmButtonTransitionState
} from "@saleor/components/ConfirmButton";
import Form from "@saleor/components/Form";
import Money from "@saleor/components/Money";
import { SingleSelectField } from "@saleor/components/SingleSelectField";
import { buttonMessages } from "@saleor/intl";
2019-06-19 14:40:52 +00:00
import { OrderDetails_order_availableShippingMethods } from "../../types/OrderDetails";
export interface FormData {
shippingMethod: string;
}
2019-12-03 15:28:40 +00:00
const useStyles = makeStyles(
theme => ({
dialog: {
overflowY: "visible"
},
menuItem: {
display: "flex",
width: "100%"
},
price: {
marginRight: theme.spacing(3)
},
root: {
overflowY: "visible",
width: theme.breakpoints.values.sm
},
shippingMethodName: {
flex: 1,
overflowX: "hidden",
textOverflow: "ellipsis"
}
}),
{ name: "OrderShippingMethodEditDialog" }
);
2019-06-19 14:40:52 +00:00
2019-10-30 14:34:24 +00:00
interface OrderShippingMethodEditDialogProps {
2019-06-19 14:40:52 +00:00
confirmButtonState: ConfirmButtonTransitionState;
open: boolean;
shippingMethod: string;
shippingMethods?: OrderDetails_order_availableShippingMethods[];
onClose();
onSubmit?(data: FormData);
}
2019-10-30 14:34:24 +00:00
const OrderShippingMethodEditDialog: React.FC<
OrderShippingMethodEditDialogProps
> = props => {
const {
2019-06-19 14:40:52 +00:00
confirmButtonState,
open,
shippingMethod,
shippingMethods,
onClose,
onSubmit
2019-10-30 14:34:24 +00:00
} = props;
const classes = useStyles(props);
const choices = shippingMethods
? shippingMethods.map(s => ({
label: (
<div className={classes.menuItem}>
<span className={classes.shippingMethodName}>{s.name}</span>
&nbsp;
2019-11-06 15:48:20 +00:00
<span className={classes.price}>
2019-10-30 14:34:24 +00:00
<Money money={s.price} />
</span>
</div>
),
value: s.id
}))
: [];
const initialForm: FormData = {
shippingMethod
};
return (
<Dialog onClose={onClose} open={open} classes={{ paper: classes.dialog }}>
<DialogTitle>
<FormattedMessage
defaultMessage="Edit Shipping Method"
description="dialog header"
/>
</DialogTitle>
<Form initial={initialForm} onSubmit={onSubmit}>
{({ change, data }) => (
<>
<DialogContent className={classes.root}>
<SingleSelectField
choices={choices}
name="shippingMethod"
value={data.shippingMethod}
onChange={change}
/>
</DialogContent>
<DialogActions>
<Button onClick={onClose}>
<FormattedMessage {...buttonMessages.back} />
</Button>
<ConfirmButton
transitionState={confirmButtonState}
color="primary"
variant="contained"
type="submit"
>
<FormattedMessage {...buttonMessages.confirm} />
</ConfirmButton>
</DialogActions>
</>
)}
</Form>
</Dialog>
);
};
2019-06-19 14:40:52 +00:00
OrderShippingMethodEditDialog.displayName = "OrderShippingMethodEditDialog";
export default OrderShippingMethodEditDialog;