aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/organisms/widgets/social-media-widget/social-media-widget.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2023-11-13 19:03:44 +0100
committerArmand Philippot <git@armandphilippot.com>2023-11-13 19:03:44 +0100
commitfb29b0f017fae162ffa7ad6bdfc80099346802de (patch)
tree3f8aebb73457ee27b86b8b1a3106a5f9bc35e8da /src/components/organisms/widgets/social-media-widget/social-media-widget.tsx
parente331106e56d59a8b987230860b66214139c12ef6 (diff)
refactor(components): replace SocialMedia with SocialMediaWidget
* the goal is to make the name of the widgets coherent * remove useless CSS * replace Media type with SocialMediaData
Diffstat (limited to 'src/components/organisms/widgets/social-media-widget/social-media-widget.tsx')
-rw-r--r--src/components/organisms/widgets/social-media-widget/social-media-widget.tsx43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/components/organisms/widgets/social-media-widget/social-media-widget.tsx b/src/components/organisms/widgets/social-media-widget/social-media-widget.tsx
new file mode 100644
index 0000000..d75f48f
--- /dev/null
+++ b/src/components/organisms/widgets/social-media-widget/social-media-widget.tsx
@@ -0,0 +1,43 @@
+import { forwardRef, type ForwardRefRenderFunction } from 'react';
+import {
+ List,
+ ListItem,
+ SocialLink,
+ type SocialLinkProps,
+} from '../../../atoms';
+import { Collapsible, type CollapsibleProps } from '../../../molecules';
+
+export type SocialMediaData = Required<
+ Pick<SocialLinkProps, 'icon' | 'id' | 'label' | 'url'>
+>;
+
+export type SocialMediaProps = Omit<CollapsibleProps, 'children'> & {
+ media: SocialMediaData[];
+};
+
+const SocialMediaWidgetWithRef: ForwardRefRenderFunction<
+ HTMLDivElement,
+ SocialMediaProps
+> = ({ media, ...props }, ref) => (
+ <Collapsible {...props} ref={ref}>
+ <List
+ hideMarker
+ isInline
+ // eslint-disable-next-line react/jsx-no-literals
+ spacing="xs"
+ >
+ {media.map(({ id, ...link }) => (
+ <ListItem key={id}>
+ <SocialLink {...link} />
+ </ListItem>
+ ))}
+ </List>
+ </Collapsible>
+);
+
+/**
+ * Social Media widget component
+ *
+ * Render a social media list with links.
+ */
+export const SocialMediaWidget = forwardRef(SocialMediaWidgetWithRef);