import { React, PropTypes, classnames } from '@gravityforms/libraries';
import { spacerClasses } from '@gravityforms/utils';
const { forwardRef } = React;
/**
* @module List
* @description A list component to display a list of items.
*
* @since 1.1.15
*
* @param {object} props Component props.
* @param {object} props.customAttributes Custom attributes for the component.
* @param {string|Array|object} props.customClasses Custom classes for the component.
* @param {Array} props.listItems An array of list items to display.
* @param {string|number|Array|object} props.spacing The spacing for the component, as a string, number, array, or object.
* @param {string} props.type The list type, one of `unordered` or `ordered`.
* @param {object|null} ref Ref to the component.
*
* @return {JSX.Element}
*
* @example
* import List from '@gravityforms/components/react/admin/modules/List';
*
* return (
* <List
* listItems={
* [
* 'Example list item 1.',
* 'Example list item 2.',
* 'Example list item 3.',
* ]
* }
* spacing={ { '': 6, md: 8 } }
* />
* );
*
*/
const List = forwardRef( ( {
customAttributes = {},
customClasses = [],
listItems = [],
spacing = '',
type = 'unordered',
}, ref ) => {
const isUnordered = type === 'unordered';
const listAttributes = {
className: classnames( {
'gform-list': true,
'gform-list--unordered': isUnordered,
'gform-list--ordered': ! isUnordered,
...spacerClasses( spacing ),
}, customClasses ),
...customAttributes,
};
const Component = isUnordered ? 'ul' : 'ol';
return (
<Component { ...listAttributes } ref={ ref }>
{
listItems.map( ( listItem, index ) => (
<li
className="gform-list__item"
key={ index }
>
{ listItem }
</li>
) )
}
</Component>
);
} );
List.propTypes = {
customAttributes: PropTypes.object,
customClasses: PropTypes.oneOfType( [
PropTypes.string,
PropTypes.array,
PropTypes.object,
] ),
listItems: PropTypes.array,
spacing: PropTypes.oneOfType( [
PropTypes.string,
PropTypes.number,
PropTypes.array,
PropTypes.object,
] ),
type: PropTypes.string,
};
List.displayName = 'List';
export default List;