import React, { useEffect, useState } from 'react' import { requestIdle } from '@designable/shared' import { observer } from '@formily/reactive-react' import { TextWidget, IconWidget } from '../widgets' import { usePrefix, useWorkbench } from '../hooks' import cls from 'classnames' export interface ISettingPanelProps { title?: React.ReactNode extra?: React.ReactNode } export const SettingsPanel: React.FC = observer((props) => { const prefix = usePrefix('settings-panel') const workbench = useWorkbench() const [innerVisible, setInnerVisible] = useState(true) const [pinning, setPinning] = useState(false) const [visible, setVisible] = useState(true) useEffect(() => { if (visible || workbench.type === 'DESIGNABLE') { if (!innerVisible) { requestIdle(() => { requestAnimationFrame(() => { setInnerVisible(true) }) }) } } }, [visible, workbench.type]) if (workbench.type !== 'DESIGNABLE') { if (innerVisible) setInnerVisible(false) return null } if (!visible) { if (innerVisible) setInnerVisible(false) return (
{ setVisible(true) }} >
) } return (
{props.title}
{props.extra}
{!pinning && ( { setPinning(!pinning) }} /> )} {pinning && ( { setPinning(!pinning) }} /> )} { setVisible(false) }} />
{innerVisible && props.children}
) })