@popmenu/ordering-ui 0.118.0 → 0.120.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
@@ -187,7 +187,7 @@ var useMenuItemStyles = styles.makeStyles(function (theme) {
187
187
  fontWeight: 400,
188
188
  fontSize: 14,
189
189
  lineHeight: '20px',
190
- marginBottom: theme.spacing(1),
190
+ margin: theme.spacing(0.5, 0, 1, 0),
191
191
  color: theme.palette.grey[800],
192
192
  '-webkit-line-clamp': 2,
193
193
  display: '-webkit-box',
@@ -195,6 +195,12 @@ var useMenuItemStyles = styles.makeStyles(function (theme) {
195
195
  textOverflow: 'ellipsis',
196
196
  overflow: 'hidden',
197
197
  },
198
+ outOfStockTag: {
199
+ minWidth: '90px',
200
+ marginLeft: theme.spacing(1),
201
+ display: 'inline-block',
202
+ verticalAlign: 'bottom',
203
+ },
198
204
  });
199
205
  });
200
206
 
@@ -1540,8 +1546,9 @@ var MenuItem = React.forwardRef(function (props, ref) {
1540
1546
  React__default['default'].createElement(MenuItemInfo, null,
1541
1547
  isFeatured && React__default['default'].createElement(StatusTag, { color: "highlight", label: "Featured", variant: "filled", size: "sm" }),
1542
1548
  React__default['default'].createElement(core.Box, { display: "flex", gridGap: 8, alignItems: "center" },
1543
- React__default['default'].createElement(core.Typography, { component: "h3", className: classes.cardTitle }, loading ? React__default['default'].createElement(lab.Skeleton, null) : title),
1544
- isOutOfStock && React__default['default'].createElement(StatusTag, { color: "warning", label: "Out of stock", variant: "outlined", size: "sm" })),
1549
+ React__default['default'].createElement(core.Typography, { component: "h3", className: classes.cardTitle },
1550
+ loading ? React__default['default'].createElement(lab.Skeleton, null) : title,
1551
+ React__default['default'].createElement("span", { className: classes.outOfStockTag }, isOutOfStock && React__default['default'].createElement(StatusTag, { color: "warning", label: "Out of stock", variant: "outlined", size: "sm" })))),
1545
1552
  React__default['default'].createElement(core.Typography, { className: classes.cardDescription, paragraph: true }, loading ? React__default['default'].createElement(lab.Skeleton, null) : description),
1546
1553
  loading ? (React__default['default'].createElement(lab.Skeleton, null,
1547
1554
  React__default['default'].createElement(MenuItemReactions, { likeCount: likeCount, reviewCount: reviewCount }))) : (React__default['default'].createElement(MenuItemReactions, { likeCount: likeCount, reviewCount: reviewCount })),
@@ -1622,6 +1629,10 @@ var useDishCheckoutCardStyles = styles.makeStyles(function (theme) { return ({
1622
1629
  selectPaper: {
1623
1630
  maxHeight: theme.spacing(37),
1624
1631
  },
1632
+ ul: {
1633
+ margin: 0,
1634
+ paddingLeft: theme.spacing(3),
1635
+ },
1625
1636
  warning: {
1626
1637
  color: theme.palette.error.main,
1627
1638
  display: 'flex',
@@ -1644,7 +1655,7 @@ var OrderingAppContextProvider = function (props) {
1644
1655
 
1645
1656
  var DishCheckoutCard = function (props) {
1646
1657
  var _a;
1647
- 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, _b = props.image, image = _b === void 0 ? {} : _b;
1658
+ var id = props.id, name = props.name, quantity = props.quantity, modifierGroups = props.modifierGroups, onDelete = props.onDelete, onEdit = props.onEdit, onQuantityChange = props.onQuantityChange, price = props.price, specialInstructions = props.specialInstructions, disabled = props.disabled, warningMessage = props.warningMessage, _b = props.image, image = _b === void 0 ? {} : _b;
1648
1659
  var src = image.src, alt = image.alt;
1649
1660
  var classes = useDishCheckoutCardStyles(props);
1650
1661
  var appContext = useOrderingAppContext()[0];
@@ -1656,16 +1667,41 @@ var DishCheckoutCard = function (props) {
1656
1667
  var labelString = function (label) {
1657
1668
  return label.replace(/[^a-zA-Z\s]/g, '').toLowerCase();
1658
1669
  };
1670
+ var formatModifiers = function (groups, nested) {
1671
+ if (nested === void 0) { nested = false; }
1672
+ return groups.map(function (group) {
1673
+ // Get all selected modifiers for this group
1674
+ var modifiers = group.selectedModifiers.map(function (modifier) { return modifier.modifierName; }).join(', ');
1675
+ // Render nested groups recursively
1676
+ var nestedGroups = group.selectedModifiers.flatMap(function (modifier) {
1677
+ var _a;
1678
+ return (modifier === null || modifier === void 0 ? void 0 : modifier.selectedModifierGroups) && ((_a = modifier === null || modifier === void 0 ? void 0 : modifier.selectedModifierGroups) === null || _a === void 0 ? void 0 : _a.length) > 0
1679
+ ? formatModifiers(modifier.selectedModifierGroups, true)
1680
+ : [];
1681
+ });
1682
+ // For top-level groups, we render without the list
1683
+ if (!nested) {
1684
+ return (React__default['default'].createElement(Typography, { key: group.id, variant: "body2" },
1685
+ group.menuItemModifierGroupName,
1686
+ ": ",
1687
+ modifiers,
1688
+ (nestedGroups === null || nestedGroups === void 0 ? void 0 : nestedGroups.length) > 0 && React__default['default'].createElement("ul", { className: classes.ul }, nestedGroups)));
1689
+ }
1690
+ // For nested groups, we use list items
1691
+ return (React__default['default'].createElement("li", { key: group.id, className: classes.li },
1692
+ React__default['default'].createElement(Typography, { variant: "body2" },
1693
+ group.menuItemModifierGroupName,
1694
+ ": ",
1695
+ modifiers,
1696
+ nestedGroups && nestedGroups.length > 0 && React__default['default'].createElement("ul", { className: classes.ul }, nestedGroups))));
1697
+ });
1698
+ };
1659
1699
  return (React__default['default'].createElement(core.Box, { className: classes.root },
1660
1700
  React__default['default'].createElement(core.Box, { display: "flex", gridGap: 3 },
1661
1701
  src && alt && React__default['default'].createElement("img", { src: src, alt: alt, className: classes.img }),
1662
1702
  React__default['default'].createElement(core.Box, { flexGrow: 1 },
1663
1703
  React__default['default'].createElement(Typography, { variant: "h2", className: classes.name }, name),
1664
- modifiers &&
1665
- modifiers.map(function (modifier, i) { return (React__default['default'].createElement(Typography, { key: i, variant: "body2" },
1666
- modifier[0],
1667
- ": ",
1668
- modifier[1])); }),
1704
+ modifierGroups && formatModifiers(modifierGroups),
1669
1705
  specialInstructions && React__default['default'].createElement(Typography, { variant: "body2" },
1670
1706
  "\"",
1671
1707
  specialInstructions,
@@ -1996,8 +2032,10 @@ var getStatusTagProps = function (props) {
1996
2032
  switch (true) {
1997
2033
  case error:
1998
2034
  color = 'error';
2035
+ break;
1999
2036
  case isOutOfStock:
2000
2037
  color = 'warning';
2038
+ break;
2001
2039
  }
2002
2040
  var label = optionalText;
2003
2041
  switch (true) {