import clsx from 'clsx'; import { addIndex, reduce } from 'ramda'; import type { FunctionComponent, ReactNode } from 'react'; import React from 'react'; import type { ButtonProps } from '../Button'; import { Button } from '../Button'; import styles from './styles.scss'; export interface ButtonDefinition extends ButtonProps { placement: 'left' | 'right'; hidden?: boolean; label: ReactNode; } interface HeaderProps { className?: string; onClick?(): void; buttons?: ButtonDefinition[]; } interface RenderButtons { leftButtons: ReactNode[]; rightButtons: ReactNode[]; } export const Header: FunctionComponent = ({ className, onClick, buttons, children, }) => { const { leftButtons, rightButtons } = addIndex< ButtonDefinition, RenderButtons >(reduce)( (acc, { hidden, disabled, placement, label, ...props }, idx) => { if (!hidden) { const button = ( ); if (placement === 'right') { acc.rightButtons.push(button); } else { acc.leftButtons.push(button); } } return acc; }, { leftButtons: [], rightButtons: [], }, buttons, ); return (
{children ? (
{children}
) : null} {leftButtons.length ? (
{leftButtons}
) : null} {rightButtons.length ? (
{rightButtons}
) : null}
); }; Header.defaultProps = { buttons: [], };