import { FormButtonGroup, FormDialog, FormDrawer, FormItem, FormLayout, Reset, Submit } from '@formily/antd'; import { createForm, Field, ObjectField, onFormValuesChange } from '@formily/core'; import { FieldContext, FormContext, observer, RecursionField, Schema, SchemaOptionsContext, useField, useFieldSchema, useForm } from '@formily/react'; import { Dropdown, Menu, Modal, Select, Switch } from 'antd'; import React, { createContext, useContext, useMemo, useState } from 'react'; import { SchemaComponentOptions, useAttach, useDesignable } from '..'; export interface SettingsFormContextProps { field?: Field; fieldSchema?: Schema; dropdownVisible?: boolean; setDropdownVisible?: (v: boolean) => void; dn?: any; } export const SettingsFormContext = createContext(null); export const useSettingsFormContext = () => { return useContext(SettingsFormContext); }; export const SettingsForm: any = observer((props: any) => { const dn = useDesignable(); const field = useField(); const fieldSchema = useFieldSchema(); const [dropdownVisible, setDropdownVisible] = useState(false); const settingsFormSchema = useMemo(() => new Schema(props.schema), []); const form = useMemo( () => createForm({ initialValues: fieldSchema.toJSON(), effects(form) { onFormValuesChange((form) => { dn.patch(form.values); console.log('form.values', form.values); }); }, }), [], ); const f = useAttach(form.createVoidField({ ...field.props, basePath: '' })); return ( setDropdownVisible(visible)} overlayStyle={{ width: 200 }} overlay={ {settingsFormSchema.mapProperties((s, key) => { return ; })} } > 配置 ); }); SettingsForm.Divider = () => { return ; }; SettingsForm.Remove = (props) => { const field = useField(); const { dn, setDropdownVisible } = useSettingsFormContext(); return ( { setDropdownVisible(false); Modal.confirm({ title: 'Are you sure delete this task?', content: 'Some descriptions', okText: 'Yes', okType: 'danger', cancelText: 'No', ...props.confirm, onOk() { dn.remove(); console.log('OK'); }, onCancel() { console.log('Cancel'); }, }); }} > {field.title} ); }; SettingsForm.Switch = observer(() => { const field = useField(); return ( { field.value = !field.value; }} >
{field.title}
); }); SettingsForm.Select = observer((props) => { const field = useField(); const [open, setOpen] = useState(false); return ( !open && setOpen(true)}>
{field.title}