import React, { useEffect, useCallback, useState } from 'react'; import { Form, Empty, message } from 'antd'; import { PlusCircleOutlined, DeleteOutlined } from '@easyv/react-icons'; import { StateInfo, UpdateStateQuery, StateConfig, StateTypeEnum } from '@easytwin/core'; import { CollapseBox, SortableTabs, BlurInput } from '@/components'; import ProjectForm from './ProjectForm'; import ModelForm from './ModelForm'; import PointLightForm from './PointLightForm'; import DirectLightForm from './DirectLightForm'; // import PointForm from './PointForm'; // import PoiPannelForm from './PoiPannelForm'; // import PoiIframeForm from './PoiIframeForm'; // import FenceForm from './FenceForm'; export interface StateManageProp { showExtraBth?: boolean; dataSource: StateInfo[]; type: StateTypeEnum; isGroup: boolean; selectKey?: string; onTabChange?: (key?: string) => void; onAdd?: () => void; onUpdate?: (state: Partial) => void; onRemove?: (key: string) => void; } export default function StateManage({ showExtraBth = true, dataSource, type, isGroup, selectKey, onTabChange, onAdd, onUpdate, onRemove, }: StateManageProp) { const [form] = Form.useForm(); const [editData, setEditData] = useState(); const [editDataConfig, setEditDataConfig] = useState(); useEffect(() => { if (selectKey === undefined && dataSource.length > 0) { onTabChange?.(dataSource[0].id); return; } const newEditData = dataSource.find((item) => item.id === selectKey); if (newEditData) { setEditData(newEditData); setEditDataConfig(newEditData.config); } }, [dataSource, selectKey]); useEffect(() => { if (editData) form.setFieldsValue(editData); }, [editData, form]); const handleStateDataFormChange = useCallback( (updateValues: Partial) => { if (editData) { onUpdate?.({ id: editData.id, rank: editData.rank, ...updateValues, }); } }, [editData, onUpdate], ); const handleTagDrapChange = (dragKey: string, rank: number) => { onUpdate?.({ id: dragKey, rank, }); }; const stateDataFromRender = () => { if (!editDataConfig) return null; const props = { dataSource: editDataConfig, onChange: (value: StateConfig) => handleStateDataFormChange({ config: value }), }; switch (type) { case StateTypeEnum.PROJECT: return ; case StateTypeEnum.MODEL: return ; case StateTypeEnum.POINTLIGHT: return ; case StateTypeEnum.DIRECTLIGHT: return ; // case StateTypeEnum.POINT: // return ; // case StateTypeEnum.POIPANNEL: // return ; // case StateTypeEnum.POIIFRAME: // return ; // case StateTypeEnum.FENCE: // return ; default: return null; } }; return ( { e.stopPropagation(); onAdd?.(); }} /> { e.stopPropagation(); if (dataSource.length === 1) { message.warn('状态不可全部删除,请至少保留一条状态'); return; } if (editData) { onRemove?.(editData.id); } }} /> ) }> {dataSource.length ? (
{editData && ( <> {/* */}
handleStateDataFormChange(allValues)}> {/* name */} {isGroup && ( )}
{stateDataFromRender()} )}
) : ( )}
); }