import { FC, HTMLAttributes } from 'react';
import {
DescriptionListGroup,
type DescriptionListGroupProps,
} from './description-list-group';
import styles from './description-list.module.scss';
export type DescriptionListItem = {
/**
* The item id.
*/
id: string;
/**
* The list item layout.
*/
layout?: DescriptionListGroupProps['layout'];
/**
* A list label.
*/
label: DescriptionListGroupProps['label'];
/**
* An array of values for the list item.
*/
value: DescriptionListGroupProps['value'];
};
export type DescriptionListProps = Omit<
HTMLAttributes,
'children'
> & {
/**
* Set additional classnames to the `dt`/`dd` couple wrapper.
*/
groupClassName?: string;
/**
* The list items.
*/
items: DescriptionListItem[];
/**
* Set additional classnames to the `dt` element.
*/
labelClassName?: string;
/**
* The list layout. Default: column.
*/
layout?: 'inline' | 'column';
/**
* Set additional classnames to the `dd` element.
*/
valueClassName?: string;
/**
* If true, use a slash to delimitate multiple values.
*/
withSeparator?: DescriptionListGroupProps['withSeparator'];
};
/**
* DescriptionList component
*
* Render a description list.
*/
export const DescriptionList: FC = ({
className = '',
groupClassName = '',
items,
labelClassName = '',
layout = 'column',
valueClassName = '',
withSeparator,
...props
}) => {
const layoutModifier = `list--${layout}`;
const listClass = `${styles.list} ${styles[layoutModifier]} ${className}`;
/**
* Retrieve the description list items.
*
* @param {DescriptionListGroup[]} listItems - An array of items.
* @returns {JSX.Element[]} The description list items.
*/
const getItems = (listItems: DescriptionListItem[]): JSX.Element[] => {
return listItems.map(({ id, layout: itemLayout, label, value }) => {
return (
);
});
};
return (
{getItems(items)}
);
};