aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/organisms/project-overview/project-overview.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2023-11-20 11:02:20 +0100
committerArmand Philippot <git@armandphilippot.com>2023-11-20 19:20:21 +0100
commitd5ade2359539648845a5854ed353b29367961d74 (patch)
tree45a49d90090408887135a971a7fd79c45d9dcd94 /src/components/organisms/project-overview/project-overview.tsx
parent6ab9635a22d69186c8a24181ad5df7736e288577 (diff)
refactor(components): extract MetaItem from MetaList
* replace `items` prop on MetaList with `children` prop: it was too restrictive and the global options was not really useful. It is better too give control to the consumers.
Diffstat (limited to 'src/components/organisms/project-overview/project-overview.tsx')
-rw-r--r--src/components/organisms/project-overview/project-overview.tsx40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/components/organisms/project-overview/project-overview.tsx b/src/components/organisms/project-overview/project-overview.tsx
index 2b8be0e..f524120 100644
--- a/src/components/organisms/project-overview/project-overview.tsx
+++ b/src/components/organisms/project-overview/project-overview.tsx
@@ -6,7 +6,7 @@ import {
type ReactElement,
} from 'react';
import { useIntl } from 'react-intl';
-import type { Maybe, ValueOf } from '../../../types';
+import type { ValueOf } from '../../../types';
import {
Time,
type SocialWebsite,
@@ -14,7 +14,7 @@ import {
SocialLink,
Figure,
} from '../../atoms';
-import { MetaList, type MetaItemData } from '../../molecules';
+import { MetaItem, type MetaItemProps, MetaList } from '../../molecules';
import styles from './project-overview.module.scss';
export type Repository = {
@@ -155,27 +155,31 @@ const ProjectOverviewWithRef: ForwardRefRenderFunction<
[intl]
);
- const getMetaItems = useCallback((): MetaItemData[] => {
+ const getMetaItems = useCallback(() => {
const keys = Object.keys(meta).filter(isValidMetaKey);
return keys
- .map((key): Maybe<MetaItemData> => {
+ .map((key) => {
const value = meta[key];
- return value
- ? {
- id: key,
- label: metaLabels[key],
- value: getMetaValue(key, value),
- hasBorderedValues: key === 'technologies',
- hasInlinedValues:
- (key === 'technologies' || key === 'repositories') &&
- Array.isArray(value) &&
- value.length > 1,
+ return value ? (
+ <MetaItem
+ hasBorderedValues={key === 'technologies'}
+ hasInlinedValues={
+ (key === 'technologies' || key === 'repositories') &&
+ Array.isArray(value) &&
+ value.length > 1
}
- : undefined;
+ key={key}
+ label={metaLabels[key]}
+ value={getMetaValue(key, value)}
+ />
+ ) : undefined;
})
- .filter((item): item is MetaItemData => typeof item !== 'undefined');
+ .filter(
+ (item): item is ReactElement<MetaItemProps> =>
+ typeof item !== 'undefined'
+ );
}, [getMetaValue, meta, metaLabels]);
return (
@@ -185,7 +189,9 @@ const ProjectOverviewWithRef: ForwardRefRenderFunction<
{cover}
</Figure>
) : null}
- <MetaList className={styles.meta} isInline items={getMetaItems()} />
+ <MetaList className={styles.meta} isInline>
+ {getMetaItems()}
+ </MetaList>
</div>
);
};