UNPKG

@open-tender/ui

Version:

A component library for use with the Open Tender web app

79 lines (78 loc) 5.1 kB
import { makeModifierNamesForGroups } from '@open-tender/utils'; import { Minus, Plus, PlusCircle } from 'iconoir-react'; import React from 'react'; import { makeImageProps, makeProps } from '../utils'; import Button from './Button'; import Text from './Text'; import View from './View'; const ItemOptionSelected = ({ config, handlers, group, option, apiUrl }) => { const { name, // description, isSoldOut, price, cals, // tags, // allergens, // optionGroups, // showImage, // showDescription, // allergenAlert, isRadio, // showGroups, toggle, increment, decrement, // decrementDisabled, // updatedLevels, groupAtMax, // oneOnly, imageUrl, quantity, optionAtMax } = option; const imageProps = makeImageProps(config, 'itemOptionSelected__image', imageUrl, apiUrl); const disabled = isSoldOut || (group.max !== 1 && groupAtMax && quantity === 0); const selected = quantity > 0; const nestedGroups = selected && option.groups.length ? option.groups : null; const nestedRequired = option.groups.filter(i => i.quantity < i.min).length > 0; const nestedText = nestedRequired ? 'Selections Required' : 'Adjust Selections'; const nestedOptions = nestedGroups ? makeModifierNamesForGroups(nestedGroups) : null; const onClick = () => { if (isRadio || (group.max === 1 && quantity === 0)) { toggle(); } else if ((group.max === 1 || option.max === 1) && quantity === 1) { decrement(); } else { increment(); } }; return (React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected')), React.createElement(View, Object.assign({}, makeProps(config, nestedRequired && !selected ? 'itemOptionSelected__containerRequired' : selected ? 'itemOptionSelected__containerSelected' : 'itemOptionSelected__container')), selected && (React.createElement(React.Fragment, null, React.createElement(Button, Object.assign({}, makeProps(config, 'itemOptionSelected__decrease'), { onClick: decrement, disabled: quantity <= 0 }), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__decreaseIcon')), React.createElement(Minus, { width: 24, height: 24, strokeWidth: 2 }))), React.createElement(Button, Object.assign({}, makeProps(config, 'itemOptionSelected__increase'), { onClick: increment, disabled: groupAtMax || optionAtMax }), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__increaseIcon')), React.createElement(Plus, { width: 24, height: 24, strokeWidth: 2 }))))), React.createElement(Button, Object.assign({}, makeProps(config, 'itemOptionSelected__button'), { onClick: onClick, disabled: disabled }), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__quantityContainer')), selected && (React.createElement(Text, Object.assign({}, makeProps(config, 'itemOptionSelected__quantity'), { text: `${quantity}` })))), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__imageContainer')), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__imageWrapper')), React.createElement(View, Object.assign({}, imageProps)))), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__nameContainer')), React.createElement(Text, Object.assign({}, makeProps(config, 'itemOptionSelected__name'), { text: name })), React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__priceContainer')), React.createElement(Text, Object.assign({}, makeProps(config, 'itemOptionSelected__price'), { text: price || ' ' })), cals && (React.createElement(Text, Object.assign({}, makeProps(config, 'itemOptionSelected__cals'), { text: `${cals} cals` })))))), nestedGroups && (React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__groups')), nestedOptions && (React.createElement(View, Object.assign({}, makeProps(config, 'itemOptionSelected__groupsOptions')), React.createElement(Text, Object.assign({}, makeProps(config, 'itemOptionSelected__groupsOptionNames'), { text: nestedOptions })))), React.createElement(Button, Object.assign({}, makeProps(config, nestedRequired ? 'itemOptionSelected__groupsButtonRequired' : 'itemOptionSelected__groupsButton'), { onClick: handlers.showNested, disabled: !selected, text: nestedText, iconDisplay: "before", icon: React.createElement(PlusCircle, { width: 18, height: 18, strokeWidth: 1.5 }) }))))))); }; export default ItemOptionSelected;