import * as _ from 'lodash'; import * as React from 'react'; import { Box, Menu, Input } from '@fluentui/react-northstar'; import { SearchIcon } from '@fluentui/react-icons-northstar'; import { ComponentInfo } from '../componentInfo/types'; import { componentInfoContext } from '../componentInfo/componentInfoContext'; import { EXCLUDED_COMPONENTS } from '../config'; export type ListDisplayModes = 'Display Name' | 'Rendered'; export type ListProps = { onDragStart?: (componentInfo: ComponentInfo, e: MouseEvent) => void; style?: React.CSSProperties; }; export const List: React.FunctionComponent = ({ onDragStart, style }) => { const [displayMode, setDisplayMode] = React.useState('Display Name'); const [filter, setFilter] = React.useState(''); const filterRegexp = new RegExp(filter, 'i'); const handleMouseDown = React.useCallback( componentInfo => e => { if (onDragStart) onDragStart(componentInfo, e); }, [onDragStart], ); const handleFilterChange = React.useCallback((e, { value }) => { setFilter(value); }, []); const [supportedComponents, unsupportedComponents] = _.partition( _.values(componentInfoContext.byDisplayName), ({ displayName }) => { return !EXCLUDED_COMPONENTS.some(name => name === displayName); }, ); return (
{ setDisplayMode(props['data-display-mode']); }} /> } clearable placeholder="Search..." onChange={handleFilterChange} value={filter} /> {supportedComponents .filter(info => info.displayName.match(filterRegexp)) .map(info => ( {displayMode === 'Rendered' && (
{info.displayName}
{/* FIXME {React.createElement(resolveComponent(info.displayName), resolveDraggingProps(info.displayName))} */}
)} {displayMode === 'Display Name' && info.displayName}
))} {unsupportedComponents .filter(info => info.displayName.match(filterRegexp)) .map(info => ( {info.displayName} ))}
); };