export interface IScrollspyMenuItem { title: string; target?: string; active?: boolean; children?: IScrollspyMenuItem[]; } export interface IScrollspyMenuItems extends Array {} export interface IScrollspyMenuProps { items: IScrollspyMenuItem[]; } const ScrollspyMenu = ({ items }: IScrollspyMenuProps) => { const buildAnchor = (item: IScrollspyMenuItem, index: number, indent: boolean = false) => { return (
{item.title}
); }; const buildSubAnchors = (items: IScrollspyMenuItems) => { return items.map((item, index) => { return buildAnchor(item, index, true); }); }; const renderChildren = (items: IScrollspyMenuItems) => { return items.map((item, index) => { if (item.children) { return (
{item.title}
{buildSubAnchors(item.children)}
); } else { return buildAnchor(item, index); } }); }; return (
{renderChildren(items)}
); }; export { ScrollspyMenu };