index.tsx
2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import React, { memo, useRef, useContext, useState } from 'react';
import { Drawer, Button } from 'antd';
import {
IDrawerComponent,
BuilderContext,
useHistory,
useDrawer,
} from '@qx/flow';
import { QxIcon } from '@/components';
import './index.less';
import cls from 'classnames';
import commonStyles from '@/components/header/index.module.less';
// 头部相关
import FlowHeader from '../header';
import FlowNameEditor from '../name-editor';
import { merge } from 'lodash-es';
const ConfigDrawerContainer: React.FC<ConfigDrawerContainerProps> = (props) => {
const configRef = useRef<any>();
const { selectedNode, setSelectedNode, onChange, nodes } =
useContext(BuilderContext);
const [showEdit, setShowEdit] = useState<boolean>(false);
const { pushHistory } = useHistory();
const { saveDrawer } = useDrawer();
const handleChange = async (values: any, extra: Record<string, any>) => {
if (selectedNode) {
selectedNode.data = values;
try {
await configRef.current?.validateFields?.();
selectedNode.validateStatusError = false;
} catch (error) {
selectedNode.validateStatusError = true;
}
merge(setSelectedNode, extra);
onChange([...nodes], 'config-change');
}
};
const handleClose = () => {
if (selectedNode) {
selectedNode.configuring = false;
}
setSelectedNode(undefined);
pushHistory();
onChange([...nodes], 'close-drawer');
};
// console.log('数据展示 nodes ===', nodes);
// console.log('数据展示 selectedNode ===', selectedNode);
return (
<Drawer
{...props}
title={null}
closable={false}
maskClosable={true}
drawerStyle={{
boxShadow: '-4px 0 16px 0 rgba(36, 40, 53, 0.1)',
}}
width={480}
destroyOnClose={true}
className={'qx-df-start-setting-drawer'}
onClose={handleClose}
>
<FlowHeader
extraStyles={{ padding: '0 24px' }}
renderLeft={
<FlowNameEditor
nodeName={selectedNode?.name || ''}
nodeIcon={<QxIcon type={'icon-two-dimensional-code'} />}
editTitle={showEdit}
setEditTitle={setShowEdit}
onChange={(val) => {
if (selectedNode) {
selectedNode.name = val;
onChange([...nodes], 'config-change');
}
}}
/>
}
renderRight={
<Button
className={cls(commonStyles['qx-data-flow__modal-close'])}
type="text"
onClick={handleClose}
icon={<QxIcon type={'icon-close'} />}
/>
}
/>
{props.children &&
React.cloneElement(props.children as React.ReactElement, {
ref: configRef,
onChange: handleChange,
})}
</Drawer>
);
};
interface ConfigDrawerContainerProps extends IDrawerComponent {}
export default memo(ConfigDrawerContainer);