import React, { useMemo } from 'react' import { createForm } from '@formily/core' import { Form } from '@formily/antd-v5' import { observer } from '@formily/react' import { requestIdle, cancelIdle } from '@pind/designable-shared' import { usePrefix, useSelected, useOperation, useSelectedNode, useWorkbench, IconWidget, NodePathWidget, } from '@pind/designable-react' import { SchemaField } from './SchemaField' import { ISettingFormProps } from './types' import { SettingsFormContext } from './shared/context' import { useLocales, useSnapshot } from './effects' import { Empty } from 'antd' import cls from 'classnames' import './styles.less' const GlobalState = { idleRequest: 0, } export const SettingsForm: React.FC = observer( (props) => { const workbench = useWorkbench() const currentWorkspace = workbench?.activeWorkspace || workbench?.currentWorkspace const currentWorkspaceId = currentWorkspace?.id const operation = useOperation(currentWorkspaceId) const node = useSelectedNode(currentWorkspaceId) const selected = useSelected(currentWorkspaceId) const prefix = usePrefix('settings-form') const schema = node?.designerProps?.propsSchema const isEmpty = !( node && node.designerProps?.propsSchema && selected.length === 1 ) const form = useMemo(() => { return createForm({ initialValues: node?.designerProps?.defaultProps, values: node?.props, effects(form) { useLocales(node) useSnapshot(operation) props.effects?.(form) }, }) }, [node, node?.props, schema, operation, isEmpty]) const render = () => { if (!isEmpty) { return (
) } return (
) } return (
{!isEmpty && }
{render()}
) }, { scheduler: (update) => { cancelIdle(GlobalState.idleRequest) GlobalState.idleRequest = requestIdle(update, { timeout: 500, }) }, } )