import toArray from 'rc-util/lib/Children/toArray'; import { isValidElement, useMemo } from 'react'; import { RtSplitterPanelProps } from '../components/rt-splitter-panel/rt-splitter-panel.types'; function getCollapsible(collapsible?: RtSplitterPanelProps['collapsible']) { if (collapsible && typeof collapsible === 'object') { return collapsible; } const mergedCollapsible = !!collapsible; return { start: mergedCollapsible, end: mergedCollapsible, }; } export type ItemType = Omit & { collapsible: { start?: boolean; end?: boolean; }; }; export default function useItems(children: React.ReactNode): ItemType[] { const items = useMemo( () => toArray(children) .filter(isValidElement) .map((node) => { const { props } = node as React.ReactElement; const { collapsible, ...restProps } = props; return { ...restProps, collapsible: getCollapsible(collapsible), }; }), [children] ); return items; }