diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-11-14 15:11:22 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-14 19:06:42 +0100 |
| commit | a3a4c50f26b8750ae1c87f1f1103b84b7d2e6315 (patch) | |
| tree | ae286c7c6b3ab4f556f20adf5e42b24641351296 /src/components/organisms/widgets/links-list-widget.tsx | |
| parent | 50f1c501a87ef5f5650750dbeca797e833ec7c3a (diff) | |
refactor(components): replace LinksListWidget with LinksWidget
* avoid List component repeat
* rewrite tests and CSS
* add an id to LinksWidgetItemData (previously LinksListItems) type
because the label could be duplicated
Diffstat (limited to 'src/components/organisms/widgets/links-list-widget.tsx')
| -rw-r--r-- | src/components/organisms/widgets/links-list-widget.tsx | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/src/components/organisms/widgets/links-list-widget.tsx b/src/components/organisms/widgets/links-list-widget.tsx deleted file mode 100644 index 17a5884..0000000 --- a/src/components/organisms/widgets/links-list-widget.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import type { FC } from 'react'; -import { slugify } from '../../../utils/helpers'; -import { Link, List, ListItem } from '../../atoms'; -import { Collapsible, type CollapsibleProps } from '../../molecules'; -import styles from './links-list-widget.module.scss'; - -export type LinksListItems = { - /** - * An array of name/url couple child of this list item. - */ - child?: LinksListItems[]; - /** - * The item name. - */ - name: string; - /** - * The item url. - */ - url: string; -}; - -export type LinksListWidgetProps = Omit< - CollapsibleProps, - 'children' | 'disablePadding' | 'hasBorders' -> & { - className?: string; - /** - * Should the links be ordered? - * - * @default false - */ - isOrdered?: boolean; - /** - * An array of name/url couple. - */ - items: LinksListItems[]; -}; - -/** - * LinksListWidget component - * - * Render a list of links inside a widget. - */ -export const LinksListWidget: FC<LinksListWidgetProps> = ({ - className = '', - isOrdered = false, - items, - ...props -}) => { - const listKindClass = `list--${isOrdered ? 'ordered' : 'unordered'}`; - - /** - * Format the widget data to be used as List items. - * - * @param {LinksListItems[]} data - The widget data. - * @returns {ListItem[]} The list items data. - */ - const getListItems = (data: LinksListItems[]) => - data.map((item) => ( - <ListItem className={styles.list__item} key={slugify(item.name)}> - <Link className={styles.list__link} href={item.url}> - {item.name} - </Link> - {item.child?.length ? ( - <List - className={`${styles.list} ${styles[listKindClass]} ${className}`} - hideMarker - isOrdered={isOrdered} - > - {getListItems(item.child)} - </List> - ) : null} - </ListItem> - )); - - return ( - <Collapsible {...props} className={styles.widget} disablePadding hasBorders> - <List - className={`${styles.list} ${styles[listKindClass]} ${className}`} - hideMarker - isOrdered={isOrdered} - > - {getListItems(items)} - </List> - </Collapsible> - ); -}; |
