@popmenu/ordering-ui 0.89.1 → 0.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -9,8 +9,8 @@ require('@material-ui/lab/Alert');
9
9
  require('@material-ui/core/AppBar');
10
10
  var MuiAvatar = require('@material-ui/core/Avatar');
11
11
  require('@material-ui/core/Badge');
12
- var MuiButton = require('@material-ui/core/Button');
13
- var CircularProgress = require('@material-ui/core/CircularProgress');
12
+ require('@material-ui/core/Button');
13
+ require('@material-ui/core/CircularProgress');
14
14
  require('@material-ui/core/ButtonGroup');
15
15
  var Card = require('@material-ui/core/Card');
16
16
  var CardActionArea = require('@material-ui/core/CardActionArea');
@@ -50,7 +50,6 @@ var MuiToggleButton = require('@material-ui/lab/ToggleButton');
50
50
  var MuiToggleButtonGroup = require('@material-ui/lab/ToggleButtonGroup');
51
51
  var MuiTooltip = require('@material-ui/core/Tooltip');
52
52
  var lab = require('@material-ui/lab');
53
- var MuiRadioGroup = require('@material-ui/core/RadioGroup');
54
53
 
55
54
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
56
55
 
@@ -77,8 +76,6 @@ function _interopNamespace(e) {
77
76
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
78
77
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
79
78
  var MuiAvatar__default = /*#__PURE__*/_interopDefaultLegacy(MuiAvatar);
80
- var MuiButton__default = /*#__PURE__*/_interopDefaultLegacy(MuiButton);
81
- var CircularProgress__default = /*#__PURE__*/_interopDefaultLegacy(CircularProgress);
82
79
  var Card__default = /*#__PURE__*/_interopDefaultLegacy(Card);
83
80
  var CardActionArea__default = /*#__PURE__*/_interopDefaultLegacy(CardActionArea);
84
81
  var CardContent__default = /*#__PURE__*/_interopDefaultLegacy(CardContent);
@@ -91,7 +88,6 @@ var Tab__default = /*#__PURE__*/_interopDefaultLegacy(Tab);
91
88
  var MuiToggleButton__default = /*#__PURE__*/_interopDefaultLegacy(MuiToggleButton);
92
89
  var MuiToggleButtonGroup__default = /*#__PURE__*/_interopDefaultLegacy(MuiToggleButtonGroup);
93
90
  var MuiTooltip__default = /*#__PURE__*/_interopDefaultLegacy(MuiTooltip);
94
- var MuiRadioGroup__default = /*#__PURE__*/_interopDefaultLegacy(MuiRadioGroup);
95
91
 
96
92
  /*! *****************************************************************************
97
93
  Copyright (c) Microsoft Corporation.
@@ -129,9 +125,19 @@ function __rest$1(s, e) {
129
125
  t[p[i]] = s[p[i]];
130
126
  }
131
127
  return t;
128
+ }
129
+
130
+ function __spreadArray(to, from, pack) {
131
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
132
+ if (ar || !(i in from)) {
133
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
134
+ ar[i] = from[i];
135
+ }
136
+ }
137
+ return to.concat(ar || from);
132
138
  }
133
139
 
134
- var Button$1 = React.forwardRef(function (props, ref) {
140
+ var Button = React.forwardRef(function (props, ref) {
135
141
  var _a = props.variation, variation = _a === void 0 ? 'primary' : _a, muiProps = __rest$1(props, ["variation"]);
136
142
  var variationProps = {};
137
143
  switch (variation) {
@@ -146,7 +152,7 @@ var Button$1 = React.forwardRef(function (props, ref) {
146
152
  }
147
153
  return React__default['default'].createElement(core.Button, __assign$1({}, variationProps, muiProps, { ref: ref }));
148
154
  });
149
- Button$1.displayName = 'Button';
155
+ Button.displayName = 'Button';
150
156
 
151
157
  var useDishCardStyles = styles.makeStyles(function (theme) {
152
158
  var _a, _b;
@@ -474,6 +480,24 @@ function SvgTag(props) {
474
480
  })));
475
481
  }
476
482
 
483
+ var _path$K;
484
+
485
+ function _extends$1I() { _extends$1I = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1I.apply(this, arguments); }
486
+
487
+ function SvgWarning(props) {
488
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$1I({
489
+ viewBox: "0 0 16 16",
490
+ fill: "none",
491
+ strokeLinecap: "round",
492
+ strokeLinejoin: "round",
493
+ width: "1em",
494
+ height: "1em"
495
+ }, props), _path$K || (_path$K = /*#__PURE__*/React__namespace.createElement("path", {
496
+ d: "M6.86 2.573L1.213 12a1.334 1.334 0 001.14 2h11.294a1.332 1.332 0 001.14-2L9.14 2.573a1.333 1.333 0 00-2.28 0v0zM8 6v2.667m0 2.667h.007",
497
+ stroke: "currentColor"
498
+ })));
499
+ }
500
+
477
501
  var _path$z;
478
502
 
479
503
  function _extends$1o() { _extends$1o = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1o.apply(this, arguments); }
@@ -789,7 +813,7 @@ styles.makeStyles(function (theme) { return ({
789
813
  },
790
814
  }); });
791
815
 
792
- var useButtonStyles = styles.makeStyles(function () { return ({
816
+ styles.makeStyles(function () { return ({
793
817
  root: {
794
818
  minWidth: 'unset',
795
819
  },
@@ -801,19 +825,6 @@ var useButtonStyles = styles.makeStyles(function () { return ({
801
825
  },
802
826
  }); });
803
827
 
804
- var Button = React.forwardRef(function (props, ref) {
805
- props.textTransform; var loading = props.loading, classesOverride = props.classes, className = props.className, muiProps = __rest(props, ["textTransform", "loading", "classes", "className"]);
806
- props.classes; var styleProps = __rest(props, ["classes"]);
807
- var classes = useButtonStyles(styleProps);
808
- var typography = styles.useTheme().typography;
809
- var loadingIndicator = {
810
- startIcon: React__default['default'].createElement(CircularProgress__default['default'], { color: "inherit", size: typography.button.fontSize }),
811
- disabled: true,
812
- };
813
- return (React__default['default'].createElement(MuiButton__default['default'], __assign({ ref: ref, classes: __assign(__assign({}, classes), classesOverride), className: classNames$1([className, 'pm-button']) }, muiProps, (loading && loadingIndicator))));
814
- });
815
- Button.displayName = 'Button';
816
-
817
828
  var Checkbox$1 = React.forwardRef(function (props, ref) {
818
829
  var label = props.label, disabled = props.disabled, LabelProps = props.LabelProps, muiProps = __rest(props, ["label", "disabled", "LabelProps"]);
819
830
  var control = React__default['default'].createElement(MuiCheckbox__default['default'], __assign({ disabled: label ? undefined : disabled }, muiProps));
@@ -968,12 +979,12 @@ var useTypographyStyles = styles.makeStyles(function (theme) {
968
979
  });
969
980
  });
970
981
 
971
- var Typography = React.forwardRef(function (props, ref) {
972
- props.weight; props.color; var restProps = __rest(props, ["weight", "color"]);
982
+ var Typography = function (props) {
983
+ props.weight; props.color; var TypographyRef = props.TypographyRef, restProps = __rest(props, ["weight", "color", "TypographyRef"]);
973
984
  var classes = useTypographyStyles(__assign({}, props));
974
985
  var variantMapping = { subtitle1: 'p' };
975
- return React__default['default'].createElement(core.Typography, __assign({ ref: ref, classes: classes, variantMapping: variantMapping }, restProps));
976
- });
986
+ return React__default['default'].createElement(core.Typography, __assign({ classes: classes, variantMapping: variantMapping, ref: TypographyRef }, restProps));
987
+ };
977
988
  Typography.displayName = 'Typography';
978
989
  Typography.defaultProps = defaultTypographyProps;
979
990
 
@@ -1500,6 +1511,11 @@ var useDishCheckoutCardStyles = styles.makeStyles(function (theme) { return ({
1500
1511
  selectPaper: {
1501
1512
  maxHeight: theme.spacing(37),
1502
1513
  },
1514
+ warning: {
1515
+ color: theme.palette.error.main,
1516
+ display: 'flex',
1517
+ gridGap: theme.spacing(0.825),
1518
+ },
1503
1519
  }); });
1504
1520
 
1505
1521
  var OrderingAppContext = React.createContext(null);
@@ -1517,7 +1533,7 @@ var OrderingAppContextProvider = function (props) {
1517
1533
 
1518
1534
  var DishCheckoutCard = function (props) {
1519
1535
  var _a;
1520
- var id = props.id, name = props.name, quantity = props.quantity, modifiers = props.modifiers, onDelete = props.onDelete, onEdit = props.onEdit, onQuantityChange = props.onQuantityChange, price = props.price, specialInstructions = props.specialInstructions, disabled = props.disabled;
1536
+ var id = props.id, name = props.name, quantity = props.quantity, modifiers = props.modifiers, onDelete = props.onDelete, onEdit = props.onEdit, onQuantityChange = props.onQuantityChange, price = props.price, specialInstructions = props.specialInstructions, disabled = props.disabled, warningMessage = props.warningMessage;
1521
1537
  var classes = useDishCheckoutCardStyles(props);
1522
1538
  var appContext = useOrderingAppContext()[0];
1523
1539
  var _b = React.useState(false), open = _b[0], setOpen = _b[1];
@@ -1539,7 +1555,7 @@ var DishCheckoutCard = function (props) {
1539
1555
  specialInstructions,
1540
1556
  "\"")),
1541
1557
  React__default['default'].createElement(core.Box, { display: "flex", gridGap: 1, height: "100%", alignItems: "center" },
1542
- React__default['default'].createElement(Button$1, { disabled: disabled, className: classes.editButton, variant: "text", onClick: onEdit }, "Edit"),
1558
+ React__default['default'].createElement(Button, { disabled: disabled, className: classes.editButton, variant: "text", onClick: onEdit }, "Edit"),
1543
1559
  React__default['default'].createElement(IconButton, { disabled: disabled, onClick: onDelete, classes: { root: classes.deleteButton } },
1544
1560
  React__default['default'].createElement(Icon, { icon: SvgTrash, size: "large" })))),
1545
1561
  React__default['default'].createElement(core.Box, { display: "flex", gridGap: 16, alignItems: "center" },
@@ -1558,7 +1574,11 @@ var DishCheckoutCard = function (props) {
1558
1574
  getContentAnchorEl: null,
1559
1575
  classes: { paper: classes.selectPaper },
1560
1576
  }, className: classes.select }, Array.from({ length: 99 }, function (_, index) { return (React__default['default'].createElement(core.MenuItem, { key: index + 1, value: index + 1 }, index + 1)); }))),
1561
- React__default['default'].createElement(Typography, { className: classes.price }, formattedPrice))));
1577
+ React__default['default'].createElement(Typography, { className: classes.price }, formattedPrice)),
1578
+ warningMessage && (React__default['default'].createElement(core.Box, { className: classes.warning },
1579
+ React__default['default'].createElement(core.Box, { paddingTop: 0.25 },
1580
+ React__default['default'].createElement(Icon, { icon: SvgWarning, size: "medium" })),
1581
+ React__default['default'].createElement(Typography, { variant: "body2" }, warningMessage)))));
1562
1582
  };
1563
1583
 
1564
1584
  var DishDetailsReview = React.forwardRef(function (props) {
@@ -1624,98 +1644,190 @@ var useLabelStyles = styles.makeStyles(function (theme) { return ({
1624
1644
  },
1625
1645
  }); });
1626
1646
 
1647
+ var useQuantityPickerStyles = styles.makeStyles(function (theme) { return ({
1648
+ root: {
1649
+ height: theme.spacing(7),
1650
+ backgroundColor: 'none',
1651
+ },
1652
+ }); });
1653
+ var useQuantityInputStyles = styles.makeStyles(function (theme) { return ({
1654
+ root: {
1655
+ height: '100%',
1656
+ width: 'min-content',
1657
+ borderRadius: theme.spacing(12.5),
1658
+ background: function (props) { return (props.variation === 'modifierCount' ? 'unset' : theme.palette.grey[100]); },
1659
+ },
1660
+ input: {
1661
+ '&::-webkit-clear-button, &::-webkit-outer-spin-button, &::-webkit-inner-spin-button': {
1662
+ display: 'none',
1663
+ },
1664
+ '-moz-appearance': 'textfield',
1665
+ fontWeight: 600,
1666
+ padding: 0,
1667
+ textAlign: 'center',
1668
+ zIndex: function (props) { return (props.value === 0 && props.variation === 'modifierCount' ? -1 : 1); },
1669
+ backgroundColor: function (props) { return (props.variation === 'modifierCount' ? theme.palette.grey[100] : 'unset'); },
1670
+ alignSelf: function (props) { return (props.variation === 'modifierCount' ? 'stretch' : 'unset'); },
1671
+ height: function (props) { return (props.variation === 'modifierCount' ? 'auto' : 'unset'); },
1672
+ minWidth: function (props) { return (props.variation === 'modifierCount' ? theme.spacing(5) : theme.spacing(2.75)); },
1673
+ borderRadius: function (props) { return (props.variation === 'modifierCount' ? theme.spacing(1) : 'unset'); },
1674
+ margin: function (props) { return (props.variation === 'modifierCount' ? theme.spacing(0.5, 0) : 0); },
1675
+ },
1676
+ }); });
1677
+ var useStartAdornmentStyles = styles.makeStyles(function (theme) { return ({
1678
+ root: {
1679
+ color: theme.palette.text.primary,
1680
+ zIndex: function (props) { return (props.value === 0 && props.variation === 'modifierCount' ? -1 : 1); },
1681
+ },
1682
+ }); });
1683
+ var useEndAdornmentStyles = styles.makeStyles(function (theme) { return ({
1684
+ root: {
1685
+ color: theme.palette.text.primary,
1686
+ },
1687
+ }); });
1688
+
1689
+ var QuantityPicker = function (props) {
1690
+ var value = props.value, onChange = props.onChange, disabled = props.disabled, disableIncrement = props.disableIncrement, preventManualChange = props.preventManualChange, variation = props.variation;
1691
+ var fieldClasses = useQuantityPickerStyles();
1692
+ var inputClasses = useQuantityInputStyles(props);
1693
+ var startAdornmentClasses = useStartAdornmentStyles(props);
1694
+ var endAdornmentClasses = useEndAdornmentStyles(props);
1695
+ var onIncrement = function (event) {
1696
+ onChange(event, { quantity: value + 1, reason: 'increment' });
1697
+ };
1698
+ var onDecrement = function (event) {
1699
+ onChange(event, { quantity: value - 1, reason: 'decrement' });
1700
+ };
1701
+ var handleChange = function (event) {
1702
+ if (preventManualChange) {
1703
+ event.preventDefault();
1704
+ }
1705
+ if (!preventManualChange) {
1706
+ onChange(event, { quantity: parseInt(event.target.value), reason: 'change' });
1707
+ }
1708
+ };
1709
+ return (React__default['default'].createElement(core.TextField, { classes: fieldClasses, type: "number", variant: variation === 'itemCount' ? 'filled' : 'standard', defaultValue: value, value: value, disabled: disabled, onChange: handleChange, InputProps: {
1710
+ classes: inputClasses,
1711
+ disableUnderline: true,
1712
+ endAdornment: (React__default['default'].createElement(IconButton, { className: endAdornmentClasses.root, color: "default", tabIndex: -1, onClick: onIncrement, disabled: disabled || disableIncrement },
1713
+ React__default['default'].createElement(Icon, { icon: SvgPlusCircle }))),
1714
+ startAdornment: (React__default['default'].createElement(IconButton, { className: startAdornmentClasses.root, color: "default", tabIndex: -1, onClick: onDecrement, disabled: disabled || value <= 0 },
1715
+ React__default['default'].createElement(Icon, { icon: SvgMinusCircle }))),
1716
+ } }));
1717
+ };
1718
+
1627
1719
  var Label = function (props) {
1628
- var name = props.name, price = props.price, disabled = props.disabled, isOutOfStock = props.isOutOfStock;
1720
+ var name = props.name, price = props.price, outOfStock = props.outOfStock, messages = props.messages;
1629
1721
  var classes = useLabelStyles();
1630
1722
  return (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column", className: classes.label },
1631
1723
  React__default['default'].createElement(core.Box, { display: "flex", alignItems: "center", gridGap: 8 },
1632
1724
  React__default['default'].createElement(core.Typography, null, name),
1633
- !isOutOfStock && disabled && (React__default['default'].createElement(core.Typography, { variant: "caption", className: classes.outOfStock }, "Out of stock"))),
1634
- price && React__default['default'].createElement(core.Typography, { className: !disabled ? classes.price : '' },
1725
+ outOfStock && (React__default['default'].createElement(core.Typography, { variant: "caption", className: classes.outOfStock }, messages.outOfStockText))),
1726
+ price && React__default['default'].createElement(core.Typography, null,
1635
1727
  "+ ",
1636
1728
  price)));
1637
1729
  };
1638
- var CheckboxGroup = function (props) {
1639
- var value = props.value, modifiers = props.modifiers, onChange = props.onChange, disableNewSelections = props.disableNewSelections, isOutOfStock = props.isOutOfStock;
1640
- var classes = useCheckboxModifierFormStyles();
1641
- var appContext = useOrderingAppContext()[0];
1642
- var handleChange = function (event) {
1643
- var _a;
1644
- var price = (_a = modifiers.find(function (modifier) { return modifier.id === parseInt(event.target.value); })) === null || _a === void 0 ? void 0 : _a.price;
1730
+ var SingleSelectModifierControl = function (props) {
1731
+ var modifiers = props.modifiers, isOutOfStock = props.isOutOfStock, onChange = props.onChange, value = props.value, messages = props.messages;
1732
+ var radioClasses = useRadioModifierFormStyles();
1733
+ var makeHandleChange = function (modifier) { return function (e) {
1645
1734
  onChange([
1646
1735
  {
1647
- id: parseInt(event.target.value),
1648
- price: (price && parseInt(price)) || 0,
1649
- quantity: 1,
1650
- },
1651
- ], event.target.checked);
1652
- };
1653
- return (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column" }, modifiers.map(function (modifier, index) {
1654
- var targetValue = value === null || value === void 0 ? void 0 : value.find(function (v) { return v.id == modifier.id; });
1655
- return (React__default['default'].createElement(core.FormControlLabel, { key: index, value: modifier.id, control: React__default['default'].createElement(core.Checkbox, { className: classes.radio, disabled: (!targetValue && disableNewSelections) || isOutOfStock || modifier.outOfStock }), label: React__default['default'].createElement(Label, { name: modifier.name, price: modifier.price
1656
- ? "" + (appContext && appContext.currencySymbol) + Number(modifier.price).toFixed(2)
1657
- : null, disabled: isOutOfStock || modifier.outOfStock, isOutOfStock: isOutOfStock }), className: classes.root, checked: !!targetValue, onChange: handleChange }));
1658
- })));
1659
- };
1660
- var RadioGroup = function (props) {
1661
- var value = props.value, modifiers = props.modifiers, onChange = props.onChange, isOutOfStock = props.isOutOfStock;
1662
- var classes = useRadioModifierFormStyles();
1663
- var appContext = useOrderingAppContext()[0];
1664
- var handleChange = function (event) {
1665
- var _a;
1666
- var price = (_a = modifiers.find(function (modifier) { return modifier.id === parseInt(event.target.value); })) === null || _a === void 0 ? void 0 : _a.price;
1667
- onChange([
1668
- {
1669
- id: parseInt(event.target.value),
1670
- price: (price && parseInt(price)) || 0,
1736
+ id: Number(e.target.value),
1737
+ price: modifier.price,
1671
1738
  quantity: 1,
1672
1739
  },
1673
1740
  ]);
1674
- };
1675
- return (React__default['default'].createElement(MuiRadioGroup__default['default'], { name: "selectedModifiers", value: value ? value[0].id : '', onChange: handleChange }, modifiers.map(function (modifier, index) { return (React__default['default'].createElement(core.FormControlLabel, { key: index, value: modifier.id, control: React__default['default'].createElement(core.Radio, { className: classes.radio, disabled: isOutOfStock || modifier.outOfStock }), label: React__default['default'].createElement(Label, { name: modifier.name, price: modifier.price ? "" + (appContext && appContext.currencySymbol) + Number(modifier.price).toFixed(2) : null, disabled: isOutOfStock || modifier.outOfStock, isOutOfStock: isOutOfStock }) })); })));
1676
- };
1677
-
1678
- var ModifierOptionsControl = function (props) {
1679
- var type = props.type, modifiers = props.modifiers, value = props.value, onChange = props.onChange, disableNewSelections = props.disableNewSelections, isOutOfStock = props.isOutOfStock;
1680
- switch (type) {
1741
+ }; };
1742
+ return (React__default['default'].createElement(core.FormControl, { fullWidth: true },
1743
+ React__default['default'].createElement(core.RadioGroup, null, modifiers.map(function (modifier) {
1744
+ var _a;
1745
+ return (React__default['default'].createElement(core.FormControlLabel, { key: modifier.id, value: modifier.id, control: React__default['default'].createElement(core.Radio, { checked: ((_a = value[0]) === null || _a === void 0 ? void 0 : _a.id) === modifier.id, className: radioClasses.radio, disabled: isOutOfStock || modifier.outOfStock, onChange: makeHandleChange(modifier) }), label: React__default['default'].createElement(Label, { messages: messages, name: modifier.name, price: modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock, outOfStock: isOutOfStock }) }));
1746
+ }))));
1747
+ };
1748
+ var MultipleSelectControl = function (props) {
1749
+ var modifiers = props.modifiers, value = props.value, isOutOfStock = props.isOutOfStock, onChange = props.onChange, messages = props.messages, disableNewSelections = props.disableNewSelections;
1750
+ var classes = useCheckboxModifierFormStyles();
1751
+ var makeHandleChange = function (modifier) { return function () {
1752
+ var isModifierInValue = Boolean(value.find(function (v) { return v.id === modifier.id; }));
1753
+ if (isModifierInValue) {
1754
+ onChange(value.filter(function (v) { return v.id !== modifier.id; }));
1755
+ }
1756
+ else {
1757
+ onChange(__spreadArray(__spreadArray([], value), [{ id: modifier.id, price: modifier.price || 0, quantity: 1 }]));
1758
+ }
1759
+ }; };
1760
+ return (React__default['default'].createElement(core.FormControl, { fullWidth: true },
1761
+ React__default['default'].createElement(core.FormGroup, null, modifiers.map(function (modifier) { return (React__default['default'].createElement(core.FormControlLabel, { key: modifier.id, value: modifier.id, className: classes.root, checked: value.some(function (v) { return v.id === modifier.id; }), onChange: makeHandleChange(modifier), control: React__default['default'].createElement(core.Checkbox, { className: classes.radio, disabled: isOutOfStock || modifier.outOfStock || (!modifier.quantity && disableNewSelections) }), label: React__default['default'].createElement(Label, { messages: messages, name: modifier.name, price: modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock, outOfStock: isOutOfStock }) })); }))));
1762
+ };
1763
+ var MultipleQuantitySelectControl = function (props) {
1764
+ var modifiers = props.modifiers, value = props.value, isOutOfStock = props.isOutOfStock, onChange = props.onChange, messages = props.messages, disableNewSelections = props.disableNewSelections;
1765
+ var makeHandleChange = function (modifier) { return function (_e, customEvent) {
1766
+ var isModifierInValue = Boolean(value.find(function (v) { return v.id === modifier.id; }));
1767
+ var isQuantityZero = customEvent.quantity === 0;
1768
+ var shouldRemoveModifierFromValue = isModifierInValue && isQuantityZero;
1769
+ var shouldAddModifierToValue = !isModifierInValue && !isQuantityZero;
1770
+ var shouldUpdateModifierInValue = isModifierInValue && !isQuantityZero;
1771
+ if (shouldRemoveModifierFromValue) {
1772
+ onChange(value.filter(function (v) { return v.id !== modifier.id; }));
1773
+ }
1774
+ if (shouldAddModifierToValue) {
1775
+ onChange(__spreadArray(__spreadArray([], value), [{ id: modifier.id, price: modifier.price, quantity: customEvent.quantity }]));
1776
+ }
1777
+ if (shouldUpdateModifierInValue) {
1778
+ onChange(value.map(function (val) { return (val.id === modifier.id ? __assign$1(__assign$1({}, val), { quantity: customEvent.quantity }) : val); }));
1779
+ }
1780
+ }; };
1781
+ return (React__default['default'].createElement(core.FormControl, { fullWidth: true },
1782
+ React__default['default'].createElement(core.FormGroup, null, modifiers.map(function (modifier) { return (React__default['default'].createElement(core.Box, { key: modifier.id, style: { justifyContent: 'space-between' }, display: "flex" },
1783
+ React__default['default'].createElement(Label, { messages: messages, name: modifier.name, price: modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock, outOfStock: isOutOfStock }),
1784
+ React__default['default'].createElement(QuantityPicker, { variation: "modifierCount", value: modifier.quantity, disableIncrement: disableNewSelections, preventManualChange: true, onChange: makeHandleChange(modifier) }))); }))));
1785
+ };
1786
+ var ModifierControls = function (props) {
1787
+ switch (props.type) {
1681
1788
  case 'singleSelect':
1682
- return React__default['default'].createElement(RadioGroup, { modifiers: modifiers, value: value, onChange: onChange, isOutOfStock: isOutOfStock });
1789
+ return React__default['default'].createElement(SingleSelectModifierControl, __assign$1({}, props));
1683
1790
  case 'multipleSelect':
1684
- return (React__default['default'].createElement(CheckboxGroup, { modifiers: modifiers, value: value, onChange: onChange, disableNewSelections: disableNewSelections, isOutOfStock: isOutOfStock }));
1791
+ return React__default['default'].createElement(MultipleSelectControl, __assign$1({}, props));
1792
+ case 'multipleQuantitySelect':
1793
+ return React__default['default'].createElement(MultipleQuantitySelectControl, __assign$1({}, props));
1685
1794
  default:
1686
1795
  return null;
1687
1796
  }
1688
1797
  };
1689
1798
 
1690
- var DishModifierCard = function (props) {
1691
- var name = props.name, disableNewSelections = props.disableNewSelections, modifiers = props.modifiers, value = props.value, messages = props.messages, onChange = props.onChange, type = props.type, error = props.error, isRequired = props.isRequired, isOutOfStock = props.isOutOfStock;
1692
- var optionalText = messages.optionalText, outOfStockText = messages.outOfStockText, requiredText = messages.requiredText, helperText = messages.helperText;
1693
- var isFullyOutOfStock = isOutOfStock || !modifiers.some(function (modifier) { return !modifier.outOfStock; });
1694
- var classes = useDishModifierCardStyles();
1799
+ var getStatusTagProps = function (props) {
1800
+ var messages = props.messages, error = props.error, isRequired = props.isRequired, isOutOfStock = props.isOutOfStock;
1801
+ var optionalText = messages.optionalText, outOfStockText = messages.outOfStockText, requiredText = messages.requiredText;
1695
1802
  var color = 'default';
1696
1803
  switch (true) {
1697
1804
  case error:
1698
1805
  color = 'error';
1699
- case isFullyOutOfStock:
1806
+ case isOutOfStock:
1700
1807
  color = 'warning';
1701
1808
  }
1702
1809
  var label = optionalText;
1703
1810
  switch (true) {
1704
- case isFullyOutOfStock:
1811
+ case isOutOfStock:
1705
1812
  label = outOfStockText;
1706
1813
  break;
1707
1814
  case isRequired:
1708
1815
  label = requiredText;
1709
1816
  break;
1710
1817
  }
1818
+ var variant = isRequired || isOutOfStock ? 'outlined' : 'filled';
1819
+ return { color: color, label: label, variant: variant };
1820
+ };
1821
+ var DishModifierCard = function (props) {
1822
+ var name = props.name, disableNewSelections = props.disableNewSelections, modifiers = props.modifiers, value = props.value, messages = props.messages, onChange = props.onChange, type = props.type, error = props.error, isOutOfStock = props.isOutOfStock;
1823
+ var classes = useDishModifierCardStyles();
1711
1824
  return (React__default['default'].createElement(core.Box, { className: classes.root },
1712
1825
  React__default['default'].createElement(core.Box, { display: "flex", justifyContent: "space-between", width: "100%", alignItems: "center", height: "fit-content", marginBottom: 2 },
1713
- React__default['default'].createElement(StatusTag, { variant: isRequired || isFullyOutOfStock ? 'outlined' : 'filled', label: label, color: color }),
1714
- !isFullyOutOfStock && (React__default['default'].createElement(Typography, { variant: "subtitle1", className: error ? classes.error : undefined }, helperText))),
1826
+ React__default['default'].createElement(StatusTag, __assign$1({}, getStatusTagProps(props))),
1827
+ !isOutOfStock && (React__default['default'].createElement(Typography, { variant: "subtitle1", className: error ? classes.error : undefined }, messages.helperText))),
1715
1828
  React__default['default'].createElement(Typography, { className: classes.name }, name),
1716
1829
  React__default['default'].createElement(core.Box, null,
1717
- React__default['default'].createElement(core.FormControl, null,
1718
- React__default['default'].createElement(ModifierOptionsControl, { type: type, modifiers: modifiers, value: value, onChange: onChange, disableNewSelections: disableNewSelections, isOutOfStock: isFullyOutOfStock })))));
1830
+ React__default['default'].createElement(ModifierControls, { value: value, modifiers: modifiers, isOutOfStock: isOutOfStock, onChange: onChange, disableNewSelections: disableNewSelections, type: type, messages: messages }))));
1719
1831
  };
1720
1832
  DishModifierCard.displayName = 'DishModifierCard';
1721
1833
 
@@ -1835,6 +1947,11 @@ var useMenuDropdownStyles = styles.makeStyles(function (theme) {
1835
1947
  alignSelf: 'start',
1836
1948
  },
1837
1949
  _a),
1950
+ menuItem: {
1951
+ alignItems: 'center',
1952
+ display: 'flex',
1953
+ gridGap: theme.spacing(1),
1954
+ },
1838
1955
  select: {
1839
1956
  '& .MuiSelect-root': {
1840
1957
  color: '#212121',
@@ -1842,6 +1959,9 @@ var useMenuDropdownStyles = styles.makeStyles(function (theme) {
1842
1959
  zIndex: 10,
1843
1960
  },
1844
1961
  },
1962
+ unavailable: {
1963
+ color: theme.palette.grey[700],
1964
+ },
1845
1965
  });
1846
1966
  });
1847
1967
 
@@ -1863,7 +1983,9 @@ var MenuDropdown = function (props) {
1863
1983
  horizontal: 'left',
1864
1984
  },
1865
1985
  getContentAnchorEl: null,
1866
- }, className: classes.select }, menuOptions.map(function (option, index) { return (React__default['default'].createElement(core.MenuItem, { key: index, value: option.id }, option.name)); }))));
1986
+ }, className: classes.select, renderValue: function (selected) { var _a; return (_a = menuOptions.find(function (menuOption) { return menuOption.id === selected; })) === null || _a === void 0 ? void 0 : _a.name; } }, menuOptions.map(function (option, index) { return (React__default['default'].createElement(core.MenuItem, { key: index, value: option.id, className: classNames(classes.menuItem, option.isUnavailable ? classes.unavailable : '') },
1987
+ option.name,
1988
+ option.isUnavailable && React__default['default'].createElement(Icon, { icon: SvgClock, size: "large" }))); }))));
1867
1989
  };
1868
1990
 
1869
1991
  var useMenuFilterStyles = styles.makeStyles(function (theme) { return ({
@@ -1925,61 +2047,6 @@ var MenuFilter = function (props) {
1925
2047
  React__default['default'].createElement(Typography, { variant: "body1", color: "grey.500" }, noOptionsLabel)))))));
1926
2048
  };
1927
2049
 
1928
- var useQuantityPickerStyles = styles.makeStyles(function (theme) { return ({
1929
- root: {
1930
- height: theme.spacing(7),
1931
- },
1932
- }); });
1933
- var useQuantityInputStyles = styles.makeStyles(function (theme) { return ({
1934
- root: {
1935
- height: '100%',
1936
- width: 'min-content',
1937
- borderRadius: theme.spacing(12.5),
1938
- background: theme.palette.grey[100],
1939
- },
1940
- input: {
1941
- '&::-webkit-clear-button, &::-webkit-outer-spin-button, &::-webkit-inner-spin-button': {
1942
- display: 'none',
1943
- },
1944
- '-moz-appearance': 'textfield',
1945
- fontWeight: 600,
1946
- minWidth: theme.spacing(2.75),
1947
- padding: 0,
1948
- textAlign: 'center',
1949
- position: 'relative',
1950
- left: 1,
1951
- },
1952
- adornedStart: {
1953
- padding: theme.spacing(0.25),
1954
- },
1955
- adornedEnd: {
1956
- padding: theme.spacing(0.5),
1957
- },
1958
- }); });
1959
-
1960
- var QuantityPicker = function (props) {
1961
- var value = props.value, onChange = props.onChange, disabled = props.disabled;
1962
- var fieldClasses = useQuantityPickerStyles();
1963
- var inputClasses = useQuantityInputStyles();
1964
- var onIncrement = function () {
1965
- onChange({ target: { value: value + 1 } }, 'increment');
1966
- };
1967
- var onDecrement = function () {
1968
- onChange({ target: { value: value - 1 } }, 'decrement');
1969
- };
1970
- var handleChange = function (event) {
1971
- onChange({ target: { value: parseInt(event.target.value) } }, 'change');
1972
- };
1973
- return (React__default['default'].createElement(core.TextField, { classes: __assign$1({}, fieldClasses), variant: "filled", type: "number", defaultValue: value, value: value, disabled: disabled, onChange: handleChange, InputProps: {
1974
- classes: __assign$1({}, inputClasses),
1975
- disableUnderline: true,
1976
- endAdornment: (React__default['default'].createElement(IconButton, { color: "default", tabIndex: -1, onClick: onIncrement, disabled: disabled },
1977
- React__default['default'].createElement(Icon, { icon: SvgPlusCircle }))),
1978
- startAdornment: (React__default['default'].createElement(IconButton, { color: "default", tabIndex: -1, onClick: onDecrement, disabled: disabled },
1979
- React__default['default'].createElement(Icon, { icon: SvgMinusCircle }))),
1980
- } }));
1981
- };
1982
-
1983
2050
  var useSelectableChipStyles = styles.makeStyles(function (theme) { return ({
1984
2051
  root: {
1985
2052
  border: '2px solid',
@@ -2337,7 +2404,7 @@ var orderingTheme = {
2337
2404
  props: props,
2338
2405
  };
2339
2406
 
2340
- exports.Button = Button$1;
2407
+ exports.Button = Button;
2341
2408
  exports.Checkbox = Checkbox;
2342
2409
  exports.DialogSection = DialogSection;
2343
2410
  exports.DialogTitle = DialogTitle;