@open-tender/ui
Version:
A component library for use with the Open Tender web app
27 lines (26 loc) • 2.11 kB
JavaScript
import { CheckCircle, WarningCircle } from 'iconoir-react';
import React from 'react';
import { makeProps } from '../utils';
import Text from './Text';
import View from './View';
const ItemGroup = ({ config, group, children, renderSuccessMessage, renderErrorMessage }) => {
const { name, description, quantity, min, max, included } = group;
const belowMin = quantity < min;
const maxMsg = max ? `, ${max} max` : '';
const includedMsg = `(${included} included${maxMsg})`;
const showDone = !!(min && quantity >= min) || !!(max && quantity >= max);
return (React.createElement(View, Object.assign({}, makeProps(config, 'itemGroup')),
React.createElement(View, Object.assign({}, makeProps(config, 'itemGroup__header')),
React.createElement(View, Object.assign({}, makeProps(config, 'itemGroup__info')),
React.createElement(View, Object.assign({}, makeProps(config, 'itemGroup__nameCount')),
React.createElement(Text, Object.assign({}, makeProps(config, 'itemGroup__name'), { text: name })),
belowMin ? (React.createElement(Text, Object.assign({}, makeProps(config, 'itemGroup__countRequired'), { text: `(${quantity}/${min})` }))) : max ? (React.createElement(Text, Object.assign({}, makeProps(config, 'itemGroup__count'), { text: `(${quantity}/${max})` }))) : included ? (React.createElement(Text, Object.assign({}, makeProps(config, 'itemGroup__count'), { text: includedMsg }))) : null),
description && (React.createElement(Text, Object.assign({}, makeProps(config, 'itemGroup__description'), { text: description })))),
belowMin
? renderErrorMessage(React.createElement(WarningCircle, { width: 18, height: 18, strokeWidth: 2 }), 'Required')
: showDone
? renderSuccessMessage(React.createElement(CheckCircle, { width: 18, height: 18, strokeWidth: 2 }), 'All Done')
: null),
React.createElement(View, Object.assign({}, makeProps(config, 'itemGroup__content')), children)));
};
export default ItemGroup;