@popmenu/ordering-ui 0.113.6 → 0.115.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.
@@ -28,6 +28,8 @@ interface Base {
28
28
  isOutOfStock: boolean;
29
29
  }
30
30
  export declare type DishModifierCardProps = {
31
+ /** Aggregate price of the modifier and its nested children modifiers */
32
+ aggregatePrice: Record<number, string>;
31
33
  /** Modifier options */
32
34
  modifiers: Array<Modifier>;
33
35
  /** The values of the modifier form */
@@ -60,5 +62,5 @@ export declare type RadioModifierFormProps = Base;
60
62
  export declare type CheckboxModifierFormProps = Base & {
61
63
  disableNewSelections?: boolean;
62
64
  };
63
- export declare type ModifierOptionsControlProps = Pick<DishModifierCardProps, 'value' | 'modifiers' | 'isOutOfStock' | 'onChange' | 'disableNewSelections' | 'type' | 'messages' | 'handleOptionsClick'>;
65
+ export declare type ModifierOptionsControlProps = Pick<DishModifierCardProps, 'value' | 'modifiers' | 'isOutOfStock' | 'onChange' | 'disableNewSelections' | 'type' | 'messages' | 'handleOptionsClick' | 'aggregatePrice'>;
64
66
  export {};
package/build/index.es.js CHANGED
@@ -1744,6 +1744,8 @@ var useLabelStyles = makeStyles(function (theme) { return ({
1744
1744
  var useOptionsStyles = makeStyles(function (theme) { return ({
1745
1745
  options: {
1746
1746
  color: theme.palette.info.main,
1747
+ marginBottom: theme.spacing(1.5),
1748
+ padding: 0,
1747
1749
  },
1748
1750
  }); });
1749
1751
 
@@ -1831,17 +1833,21 @@ var Label = function (props) {
1831
1833
  price))));
1832
1834
  };
1833
1835
  var Options = function (props) {
1834
- var handleOptionsClick = props.handleOptionsClick, modifierId = props.modifierId;
1836
+ var handleOptionsClick = props.handleOptionsClick;
1835
1837
  var classes = useOptionsStyles();
1836
- return (React__default.createElement(Box, { marginLeft: 3 },
1837
- React__default.createElement(Button, { variation: "none", className: classes.options, onClick: function () { return handleOptionsClick(modifierId); } },
1838
+ return (React__default.createElement(Box, null,
1839
+ React__default.createElement(Button, { variation: "none", className: classes.options, onClick: handleOptionsClick },
1838
1840
  React__default.createElement(Typography$1, { variant: "caption" }, "OPTIONS"),
1839
1841
  React__default.createElement(Icon, { icon: SvgChevronRight }))));
1840
1842
  };
1841
1843
  var SingleSelectModifierControl = function (props) {
1842
- var modifiers = props.modifiers, isOutOfStock = props.isOutOfStock, onChange = props.onChange, value = props.value, handleOptionsClick = props.handleOptionsClick;
1844
+ var modifiers = props.modifiers, isOutOfStock = props.isOutOfStock, onChange = props.onChange, value = props.value, handleOptionsClick = props.handleOptionsClick, aggregatePrice = props.aggregatePrice;
1843
1845
  var radioClasses = useRadioModifierFormStyles();
1844
1846
  var makeHandleChange = function (modifier) { return function (e) {
1847
+ var isModifierInValue = Boolean(value.find(function (v) { return v.modifierId === modifier.id; }));
1848
+ if (!isModifierInValue && modifier.hasModifiers) {
1849
+ handleOptionsClick(modifier.id);
1850
+ }
1845
1851
  onChange({
1846
1852
  isRadio: true,
1847
1853
  modifierId: Number(e.target.value),
@@ -1857,17 +1863,20 @@ var SingleSelectModifierControl = function (props) {
1857
1863
  var _c;
1858
1864
  return (React__default.createElement(Box, { key: modifier.id },
1859
1865
  React__default.createElement(FormControlLabel$1, { key: modifier.id, value: modifier.id, className: radioClasses.root, control: React__default.createElement(Radio$2, { checked: ((_c = value[0]) === null || _c === void 0 ? void 0 : _c.modifierId) === modifier.id, className: classNames((_a = {}, _a[radioClasses.hideRadio] = modifier.outOfStock, _a), (_b = {}, _b[radioClasses.radio] = !modifier.outOfStock, _b)), disabled: isOutOfStock || modifier.outOfStock, onChange: makeHandleChange(modifier) }), label: React__default.createElement(Box, { className: radioClasses.label },
1860
- React__default.createElement(Label, { name: modifier.name, price: modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock }),
1866
+ React__default.createElement(Label, { name: modifier.name, price: aggregatePrice[modifier.id] || modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock }),
1861
1867
  modifier.outOfStock && (React__default.createElement(Box, { minWidth: "90px", marginLeft: 2 },
1862
1868
  React__default.createElement(StatusTag, { color: "warning", label: "Out of stock", variant: "outlined", size: "md" })))), labelPlacement: "start" }),
1863
- modifier.hasModifiers && React__default.createElement(Options, { handleOptionsClick: handleOptionsClick, modifierId: modifier.id })));
1869
+ modifier.hasModifiers && !modifier.outOfStock && (React__default.createElement(Options, { handleOptionsClick: function () { return handleOptionsClick(modifier.id); } }))));
1864
1870
  }))));
1865
1871
  };
1866
1872
  var MultipleSelectControl = function (props) {
1867
- var modifiers = props.modifiers, value = props.value, isOutOfStock = props.isOutOfStock, onChange = props.onChange, disableNewSelections = props.disableNewSelections, handleOptionsClick = props.handleOptionsClick;
1873
+ var modifiers = props.modifiers, value = props.value, isOutOfStock = props.isOutOfStock, onChange = props.onChange, disableNewSelections = props.disableNewSelections, handleOptionsClick = props.handleOptionsClick, aggregatePrice = props.aggregatePrice;
1868
1874
  var classes = useCheckboxModifierFormStyles();
1869
1875
  var makeHandleChange = function (modifier) { return function () {
1870
1876
  var isModifierInValue = Boolean(value.find(function (v) { return v.modifierId === modifier.id; }));
1877
+ if (!isModifierInValue && modifier.hasModifiers) {
1878
+ handleOptionsClick(modifier.id);
1879
+ }
1871
1880
  onChange({
1872
1881
  isRadio: false,
1873
1882
  modifierId: modifier.id,
@@ -1882,10 +1891,10 @@ var MultipleSelectControl = function (props) {
1882
1891
  var _a, _b;
1883
1892
  return (React__default.createElement(Box, { key: modifier.id },
1884
1893
  React__default.createElement(FormControlLabel$1, { key: modifier.id, value: modifier.id, className: classes.root, checked: value.some(function (v) { return v.modifierId === modifier.id; }), onChange: makeHandleChange(modifier), control: React__default.createElement(Checkbox$2, { className: classNames((_a = {}, _a[classes.hideCheckbox] = modifier.outOfStock, _a), (_b = {}, _b[classes.checkbox] = !modifier.outOfStock, _b)), disabled: isOutOfStock || modifier.outOfStock || (!modifier.quantity && disableNewSelections) }), label: React__default.createElement(Box, { className: classes.label },
1885
- React__default.createElement(Label, { name: modifier.name, price: modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock }),
1894
+ React__default.createElement(Label, { name: modifier.name, price: aggregatePrice[modifier.id] || modifier.formattedPrice, disabled: isOutOfStock || modifier.outOfStock }),
1886
1895
  modifier.outOfStock && (React__default.createElement(Box, { minWidth: "90px", marginLeft: 2 },
1887
1896
  React__default.createElement(StatusTag, { color: "warning", label: "Out of stock", variant: "outlined", size: "md" })))), labelPlacement: "start" }),
1888
- modifier.hasModifiers && React__default.createElement(Options, { handleOptionsClick: handleOptionsClick, modifierId: modifier.id })));
1897
+ modifier.hasModifiers && !modifier.outOfStock && (React__default.createElement(Options, { handleOptionsClick: function () { return handleOptionsClick(modifier.id); } }))));
1889
1898
  }))));
1890
1899
  };
1891
1900
  var MultipleQuantitySelectControl = function (props) {
@@ -1944,7 +1953,7 @@ var getStatusTagProps = function (props) {
1944
1953
  return { color: color, label: label, variant: variant };
1945
1954
  };
1946
1955
  var DishModifierCard = function (props) {
1947
- 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, handleOptionsClick = props.handleOptionsClick;
1956
+ var aggregatePrice = props.aggregatePrice, 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, handleOptionsClick = props.handleOptionsClick;
1948
1957
  var classes = useDishModifierCardStyles();
1949
1958
  return (React__default.createElement(Box, { className: classes.root },
1950
1959
  React__default.createElement(Box, { display: "flex", justifyContent: "space-between", width: "100%", alignItems: "center", height: "fit-content", marginBottom: 2 },
@@ -1952,7 +1961,7 @@ var DishModifierCard = function (props) {
1952
1961
  !isOutOfStock && (React__default.createElement(Typography, { variant: "subtitle1", className: error ? classes.error : undefined }, messages.helperText))),
1953
1962
  React__default.createElement(Typography, { className: classes.name }, name),
1954
1963
  React__default.createElement(Box, null,
1955
- React__default.createElement(ModifierControls, { value: value, modifiers: modifiers, isOutOfStock: isOutOfStock, onChange: onChange, disableNewSelections: disableNewSelections, type: type, messages: messages, handleOptionsClick: handleOptionsClick }))));
1964
+ React__default.createElement(ModifierControls, { value: value, modifiers: modifiers, isOutOfStock: isOutOfStock, onChange: onChange, disableNewSelections: disableNewSelections, type: type, messages: messages, handleOptionsClick: handleOptionsClick, aggregatePrice: aggregatePrice }))));
1956
1965
  };
1957
1966
  DishModifierCard.displayName = 'DishModifierCard';
1958
1967