import type { CSSProperties, ReactNode } from 'react'; import { Fragment, useState } from 'react'; import { FaFilter, FaRegTrashAlt } from 'react-icons/fa'; import type { ToolbarItemProps as BaseToolbarItemProps } from 'react-science/ui'; import { PanelHeader, Toolbar } from 'react-science/ui'; const styles: Record<'leftContainer', CSSProperties> = { leftContainer: { display: 'flex', flexDirection: 'row', flex: 1, width: '100%', }, }; interface CustomToolbarItemProps { component: ReactNode; } export type ToolbarItemProps = BaseToolbarItemProps | CustomToolbarItemProps; function isCustomToolbarItem( item: ToolbarItemProps, ): item is CustomToolbarItemProps { return 'component' in item; } interface DefaultPanelHeaderProps { total?: number; counter?: number; deleteToolTip?: string; filterToolTip?: string; onDelete?: () => void; onFilter?: () => void; onSettingClick?: () => void; disableDelete?: boolean; children?: ReactNode; style?: CSSProperties; className?: string; leftButtons?: ToolbarItemProps[]; rightButtons?: ToolbarItemProps[]; hideCounter?: boolean; } function DefaultPanelHeader(props: DefaultPanelHeaderProps) { const { total, counter, onDelete, deleteToolTip = 'Delete', onFilter, filterToolTip = '', children, onSettingClick, disableDelete = false, style = {}, className = '', rightButtons = [], leftButtons = [], hideCounter = false, } = props; const [isFiltered, setFilterStatus] = useState(false); function handleFilter() { setFilterStatus((previousValue) => !previousValue); onFilter?.(); } return (
{onDelete && ( } intent="danger" disabled={!total || disableDelete} /> )} {onFilter && ( } /> )} {mapToolbarButtons(leftButtons)} {children}
{mapToolbarButtons(rightButtons)}
); } function mapToolbarButtons(buttons: ToolbarItemProps[]) { return buttons.map((props, index) => isCustomToolbarItem(props) ? ( // eslint-disable-next-line react/no-array-index-key {props.component} ) : ( ), ); } export default DefaultPanelHeader;