import { ISchema, observer } from '@formily/react'; import { Button, Dropdown, Menu } from 'antd'; import React, { createContext, useContext, useState } from 'react'; import { useDesignable } from '../schema-component/hooks'; import { SchemaInitializerButtonProps, SchemaInitializerItemComponent, SchemaInitializerItemOptions, SchemaInitializerItemProps } from './types'; const defaultWrap = (s: ISchema) => s; export const SchemaInitializerItemContext = createContext(null); export const SchemaInitializer = () => null; SchemaInitializer.Button = observer((props: SchemaInitializerButtonProps) => { const { insert, wrap = defaultWrap, items = [], insertPosition, dropdown, ...others } = props; let { insertAdjacent, findComponent } = useDesignable(); const [visible, setVisible] = useState(false); const insertSchema = (schema) => { if (props.insert) { props.insert(wrap(schema)); } else { insertAdjacent(insertPosition, wrap(schema)); } }; const menu = ( {items?.map((item, indexA) => { if (item.type === 'divider') { return ; } if (item.type === 'item' && item.component) { const Component = findComponent(item.component); return ( Component && ( ) ); } return ( item?.children?.length > 0 && ( {item?.children?.map((child, indexB) => { if (!child.component) { return null; } const Component = findComponent(child.component); return ( Component && ( ) ); })} ) ); })} ); console.log('others', others); return ( { setVisible(visible); }} {...dropdown} overlay={menu} >