UNPKG

design-react-kit

Version:

Componenti React per Bootstrap 5

45 lines 2.48 kB
import React, { Fragment } from 'react'; import classNames from 'classnames'; import { FormGroup, Label } from 'reactstrap'; import { Input } from '../Input/Input'; import { Icon } from '../Icon/Icon'; import { noop } from '../utils'; export const isCustomLegendObject = (legend) => { return legend != null && typeof legend === 'object' && 'content' in legend; }; export const Rating = ({ className, inputs, legend, name, readOnly, value, wrapperClassName, testId, labelTemplate = (value) => `Valuta ${value} stelle su 5`, onChangeRating = noop, ...attributes }) => { // Input data // On the DOM we have to go from 5 to 1 const safeInputs = (inputs || []).reverse(); // Fields const labelFn = labelTemplate; const onChange = readOnly ? noop : onChangeRating; const wrapperClasses = classNames(wrapperClassName, { 'rating rating-read-only': readOnly, 'rating rating-label': legend }); const fieldClasses = classNames(className); const extraFieldAttrs = readOnly ? { 'aria-hidden': true } : {}; // Legend const isLegendString = typeof legend === 'string'; let legendClass = ''; let legendText = legend; if (isCustomLegendObject(legend)) { legendClass = classNames({ 'visually-hidden': legend.srOnly }); legendText = legend.content; } const legendContent = isCustomLegendObject(legend) || isLegendString ? React.createElement("legend", { className: legendClass }, legendText) : legend; return (React.createElement(FormGroup, { cssModule: { 'form-group': 'rating' }, tag: 'fieldset', className: wrapperClasses, "data-testid": testId, ...attributes }, legend && legendContent, safeInputs.map((id, i) => { const currentValue = (5 - i); return (React.createElement(Fragment, { key: id }, React.createElement(Input, { type: 'radio', id: id, name: name, value: String(currentValue), cssModule: { 'form-control': '' }, className: fieldClasses, onChange: () => onChange(currentValue, name), checked: value === currentValue, disabled: readOnly, ...extraFieldAttrs }), React.createElement(Label, { className: 'full', for: id }, React.createElement(Icon, { icon: 'it-star-full', size: 'sm', "aria-hidden": 'true' }), React.createElement("span", { className: 'visually-hidden' }, labelFn(currentValue))))); }))); }; //# sourceMappingURL=Rating.js.map