diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-09-29 21:29:45 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:14:41 +0100 |
| commit | 4f768afe543bbf9e1857c41d03804f8e37ab3512 (patch) | |
| tree | d751219a147688b5665c51db3c8dbdca1f1345ee /src/components/atoms/lists/list.tsx | |
| parent | 9128c224c65f8f2a172b22a443ccb4573c7acd90 (diff) | |
refactor(components): rewrite List component
* change `items` prop to children
* replace `kind` prop with `isHierarchical`, `isOrdered` & `isInline` props
* add `hideMarker` prop
* add `spacing` prop to control item spacing
* move lists styles to Sass placeholders to avoid repeats because of
headless WordPress
Diffstat (limited to 'src/components/atoms/lists/list.tsx')
| -rw-r--r-- | src/components/atoms/lists/list.tsx | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/src/components/atoms/lists/list.tsx b/src/components/atoms/lists/list.tsx deleted file mode 100644 index 8fc9672..0000000 --- a/src/components/atoms/lists/list.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { FC } from 'react'; -import styles from './list.module.scss'; - -export type ListItem = { - /** - * Nested list. - */ - child?: ListItem[]; - /** - * Item id. - */ - id: string; - /** - * Item value. - */ - value: any; -}; - -export type ListProps = { - /** - * Set additional classnames to the list wrapper. - */ - className?: string; - /** - * An array of list items. - */ - items: ListItem[]; - /** - * Set additional classnames to the list items. - */ - itemsClassName?: string; - /** - * The list kind. - */ - kind?: 'ordered' | 'unordered' | 'flex'; -}; - -/** - * List component - * - * Render either an ordered or an unordered list. - */ -export const List: FC<ListProps> = ({ - className = '', - items, - itemsClassName = '', - kind = 'unordered', -}) => { - const ListTag = kind === 'ordered' ? 'ol' : 'ul'; - const kindClass = `list--${kind}`; - const listClass = `${styles.list} ${styles[kindClass]} ${className}`; - - /** - * Retrieve the list items. - * @param array - An array of items. - * @returns {JSX.Element[]} - An array of li elements. - */ - const getItems = (array: ListItem[]): JSX.Element[] => { - return array.map(({ child, id, value }) => ( - <li key={id} className={`${styles.list__item} ${itemsClassName}`}> - {value} - {child && ( - <ListTag - className={`${styles.list} ${styles[kindClass]} ${className}`} - > - {getItems(child)} - </ListTag> - )} - </li> - )); - }; - - return <ListTag className={listClass}>{getItems(items)}</ListTag>; -}; |
