import React, { useRef, useLayoutEffect, useMemo, useState } from 'react'; import classnames from 'classnames'; import { BLOCK_SIZES, DISPLAY, JustifyContent, } from '../../../helpers/constants/design-system'; import Box from '../../ui/box'; import { HeaderBaseProps } from './header-base.types'; export const HeaderBase: React.FC = ({ startAccessory, endAccessory, className = '', children, childrenWrapperProps, startAccessoryWrapperProps, endAccessoryWrapperProps, ...props }) => { const startAccessoryRef = useRef(null); const endAccessoryRef = useRef(null); const [accessoryMinWidth, setAccessoryMinWidth] = useState(); useLayoutEffect(() => { function handleResize() { if (startAccessoryRef.current && endAccessoryRef.current) { const accMinWidth = Math.max( startAccessoryRef.current.scrollWidth, endAccessoryRef.current.scrollWidth, ); setAccessoryMinWidth(accMinWidth); } else if (startAccessoryRef.current && !endAccessoryRef.current) { setAccessoryMinWidth(startAccessoryRef.current.scrollWidth); } else if (!startAccessoryRef.current && endAccessoryRef.current) { setAccessoryMinWidth(endAccessoryRef.current.scrollWidth); } else { setAccessoryMinWidth(0); } } handleResize(); window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, [startAccessoryRef, endAccessoryRef, children]); const getTitleStyles = useMemo(() => { if (startAccessory && !endAccessory) { return { marginRight: `${accessoryMinWidth}px`, }; } else if (!startAccessory && endAccessory) { return { marginLeft: `${accessoryMinWidth}px`, }; } return {}; }, [accessoryMinWidth, startAccessory, endAccessory]); return ( {startAccessory && ( {startAccessory} )} {children && ( {children} )} {endAccessory && ( {endAccessory} )} ); };