import React, {ReactNode} from "react"; import {mapValues, values} from "lodash"; import {componentCategories} from "./tree/components"; import {ProBadge} from "./ProBadge"; export type SelectableListProps = { categorizedItems: Record categoryData: Record, itemRenderer: { customRender: (item: Item, selectItem: () => void) => React.ReactNode; example?: (item: Item) => ReactNode, icon?: (item: Item, defaults: {className: string}) => any, content: (item: Item) => ReactNode, renderProBadge?: (item: Item) => boolean }, onSelect: (item: Item) => void, } export function SelectableList({categorizedItems, categoryData, itemRenderer, onSelect}: SelectableListProps) { return
{values(mapValues(categorizedItems, (items, category) => { if (!items?.length) { return null; } return
{componentCategories[category]?.label ?? componentCategories[category]}
{items.map((item) => { const example = itemRenderer.example?.(item) const selectItem = () => onSelect(item) if (itemRenderer?.customRender) { return itemRenderer.customRender(item, selectItem) } return
{example}
})}
}))}
}