import React from 'react'; import { Form, Input, Row, Col } from 'antd'; import { EasyTwinRenderer, FileInfo, FileTypeEnum, StateConfig, PointStateConfig, PoiInfoPannelTemplate, AssetInfo, ObjectPropsSyncChange, } from '@easytwin/core'; import { LockIcon } from '@/components'; import { FileCard } from '@/pages/FileManage/components'; export interface PointFormProp { initData: StateConfig; easyTwinRenderer?: EasyTwinRenderer; onValuesChanges?: (values: Pick) => void; } type FormValuesChangeType = Omit & { imgFileId?: FileInfo; }; const PointForm: React.FC = function ({ initData, easyTwinRenderer, onValuesChanges, }) { const [form] = Form.useForm(); const [fileInfo, setFileInfo] = React.useState(); const [editingData, setEditingData] = React.useState( initData as PointStateConfig, ); React.useEffect(() => { form.setFieldsValue(editingData); }, [form, editingData]); React.useEffect(() => { if (!easyTwinRenderer || !editingData || !fileInfo) return; const templateId = 'asstePointPerviewTemplate'; const id = 'asstePointPerview'; const viewport = easyTwinRenderer.getViewport(); const oldtemplate = viewport.templateController.getTemplate(templateId); if (oldtemplate) { oldtemplate.remove(); oldtemplate.dispose(); } const template = viewport.templateController.createPoiInfoPannelTemplate({ id: templateId, backgroundStyle: { url: fileInfo.url, size: { x: Number(editingData.width), y: Number(editingData.height), }, }, }); template.add({ id, position: { x: 0, y: 0, z: 0, }, rowData: [], }); viewport.update(); }, [easyTwinRenderer, editingData, fileInfo]); return (
{ const newData: PointStateConfig = { ...editingData, ...allValues, imgFileId: editingData.imgFileId, imgFileUrl: editingData.imgFileUrl, }; const { imgFileId } = allValues; if (imgFileId && typeof imgFileId !== 'string') { newData.imgFileId = imgFileId.id; newData.imgFileUrl = imgFileId.url; setFileInfo(imgFileId); } const syncAfterData = ObjectPropsSyncChange( editingData as PointStateConfig, newData, 'lockedSize', ['width', 'height'], ); setEditingData(syncAfterData); onValuesChanges?.({ config: { stateConfig: syncAfterData, }, }); }}> {/* 背景图 */} {/* 尺寸 */}
); }; export default PointForm;