import { Icons as IconList } from '@websolutespa/bom-mixer-icons'; import { createElement, FunctionComponent, Suspense, useMemo, useState } from 'react'; import { Card, Code, Container, Flex, Media, Modal, Text } from '../../components'; import { UIComponentProps } from '../../components/types'; import { Input } from '../../forms'; type Props = { }; export type IIcon = { key: string; component: FunctionComponent; }; export type IconsProps = UIComponentProps; export const Icons: React.FC = (props: IconsProps) => { const [showModal, setShowModal] = useState(false); const [icon, setIcon] = useState(null); const onSetIcon = (icon: IIcon | null = null) => { const visible = icon !== null; // console.log('onSetIcon', icon, visible); setShowModal(visible); if (visible) { setIcon(icon); } }; const iconsList = useMemo(() => { return Object.keys(IconList).map((key) => { return { key, component: IconList[key as keyof typeof IconList] as unknown as FunctionComponent }; }); }, []); const [visibleIcons, setVisibleIcons] = useState(iconsList); function onSearch(event: React.ChangeEvent) { const query = event.target.value.toLowerCase(); // console.log(query); const icons = iconsList.filter(x => x.key.toLowerCase().indexOf(query) !== -1); setVisibleIcons(icons); } return ( <> Search Icon {visibleIcons.map(icon => ( onSetIcon(icon)} variant="alfa" flexGrow="1" width="180px" padding="0.5rem" border="2px solid var(--color-neutral-200)" hoverable> Loading...}>{createElement(icon.component, {})} {icon.key} ))} onSetIcon(null)}> {icon && icon.key} {icon && Loading...}>{createElement(icon.component, {})} } {`import { ${icon && icon.key} } from '@websolutespa/bom-mixer-icons';`} Close ); };