import cx from 'clsx'; import { constant, flatten, isEqual, take, times } from 'lodash-es'; import { useMemo } from 'react'; import { useCopyColor } from '../../hooks/useCopyColor'; import { HarmonyColor } from '../../models'; import styles from './HarmonyPreview.module.css'; type HarmonyPreviewProps = { colors?: HarmonyColor[]; }; export function HarmonyPreview({ colors = [] }: HarmonyPreviewProps) { const copyColor = useCopyColor(); const extendedColors = useMemo(() => { const sortedColors = colors.sort((a, b) => -(a.ratio - b.ratio)); if (sortedColors.length >= 4) { return take(sortedColors, 4); } return flatten([ ...sortedColors, times(4 - sortedColors.length, constant({ color: '', ratio: 0 })), ]); }, [colors]); return (
Harmony Preview
{extendedColors.map(({ color, ratio }, index) => (
{ratio > 0 && `Ratio: ${ratio}`}
{ratio > 0 && copyColor(color)}>#{color}}
))}
); }