| Current File : /home/digitaw/www/wp-content/plugins/event-tickets/src/modules/elements/numeric-label/element.js |
/**
* External dependencies
*/
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
/**
* Internal dependencies
*/
/**
* Generate a label with singular, plural values based on the count provided, the function
* returns a fallback value (`undefined`) by default when the value is either 0 or lower.
*
* Labels need to have a %d on it where the number will be replaced
*
* @param {Object} props The props passed to this component
* @param {string | Array | Object} props.className The class of the element
* @param {number} props.count The amount to be compared
* @param {boolean} props.includeZero If true, zero is included in count
* @param {string} props.singular The label for the singular case
* @param {string} props.plural The label for the plural case
* @param {*} props.fallback The value to be returned if count is zero or negative
* @param {boolean} props.useFallback If true, fallback is used.
* @return {*} return fallback if count is zero or negative otherwise singular or plural
*/
const NumericLabel = ( {
className = '',
count = 0,
includeZero = false,
singular = '',
plural = '',
fallback = null,
useFallback = true,
} ) => {
if ( useFallback && ( ( includeZero && ! ( count >= 0 ) ) || ( ! includeZero && ! ( count > 0 ) ) ) ) {
return fallback;
}
const targetStr = count === 1 ? singular : plural;
const [ before, after ] = targetStr.split( '%d' );
return (
<span className={ classNames( 'tribe-editor__numeric-label', className ) }>
{ before && <span className="tribe-editor__numeric-label--before">{ before }</span> }
{ <span className="tribe-editor__numeric-label--count">{ count }</span> }
{ after && <span className="tribe-editor__numeric-label--after">{ after }</span> }
</span>
);
};
NumericLabel.propTypes = {
className: PropTypes.oneOfType( [ PropTypes.string, PropTypes.arrayOf( PropTypes.string ), PropTypes.object ] ),
count: PropTypes.number.isRequired,
includeZero: PropTypes.bool,
singular: PropTypes.string,
plural: PropTypes.string,
useFallback: PropTypes.any,
fallback: PropTypes.any,
};
export default NumericLabel;