@cqsjjb/jjb-react-admin-component 3.3.1-beta.6 → 3.3.1-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,312 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ import MD5 from 'spark-md5';
3
+ import React from 'react';
4
+ import { Tooltip, Button, message } from 'antd';
5
+ import { DeleteOutlined, PaperClipOutlined } from '@ant-design/icons';
6
+ import { getAppKey, getToken, isHttpUrl } from '../tools/index.js';
7
+ import { tools } from '@cqsjjb/jjb-common-lib';
8
+ import './index.less';
9
+ const {
10
+ toObject,
11
+ isPromise,
12
+ isFunction,
13
+ parseObject
14
+ } = tools;
15
+ const prefixCls = window.process?.env?.app?.antd['ant-prefix'] || 'ant';
16
+ class FileUploader extends React.Component {
17
+ state = {
18
+ loading: false
19
+ };
20
+ inputFile = /*#__PURE__*/React.createRef();
21
+
22
+ /**
23
+ * @description http配置
24
+ * @returns {{headers: object, fieldName: string, data: object, action: string, url: string}}
25
+ */
26
+ get httpConfig() {
27
+ const {
28
+ data = {},
29
+ action,
30
+ headers = {},
31
+ fieldName = 'file'
32
+ } = this.props;
33
+ const {
34
+ API_HOST
35
+ } = window.process.env.app;
36
+ return {
37
+ url: isHttpUrl(action) ? action : `${API_HOST}${action}`,
38
+ data,
39
+ action,
40
+ headers: {
41
+ ...tools.toObject(headers),
42
+ token: getToken(),
43
+ appKey: getAppKey()
44
+ },
45
+ fieldName
46
+ };
47
+ }
48
+
49
+ /**
50
+ * @description 填充值
51
+ * @returns {string[]}
52
+ */
53
+ get value() {
54
+ const {
55
+ value
56
+ } = this.props;
57
+ return Array.isArray(value) ? value : value ? [value] : [];
58
+ }
59
+
60
+ /**
61
+ * @description 获取禁用状态
62
+ * @return {boolean}
63
+ */
64
+ get disabled() {
65
+ const {
66
+ multiple = false,
67
+ maxCount = 99,
68
+ disabled = false
69
+ } = this.props;
70
+ if (disabled) {
71
+ return disabled;
72
+ }
73
+ if (!multiple && this.value.length) {
74
+ return true;
75
+ }
76
+ if (multiple && this.value.length === maxCount) {
77
+ return true;
78
+ }
79
+ }
80
+
81
+ /**
82
+ * @description 验证文件类型
83
+ * @param fileType {string}
84
+ * @param accept {string}
85
+ * @returns {Promise<never>|Promise<void>}
86
+ */
87
+ verifyFileAccept(fileType, accept) {
88
+ const {
89
+ onBeforeUploadVerifyAccept
90
+ } = this.props;
91
+ if (onBeforeUploadVerifyAccept) {
92
+ const fn = onBeforeUploadVerifyAccept(fileType, accept);
93
+ if (fn instanceof Promise) {
94
+ return fn;
95
+ } else {
96
+ return Promise.reject('onBeforeUploadVerifyAccept 应该返回Promise.');
97
+ }
98
+ } else {
99
+ if (accept !== '*') {
100
+ const acceptSplit = accept.split(',').filter(value => !!value);
101
+ if (!acceptSplit.includes(fileType)) {
102
+ message.error(`上传文件格式错误,支持${acceptSplit.join('、')}`);
103
+ return Promise.reject();
104
+ } else {
105
+ return Promise.resolve();
106
+ }
107
+ } else {
108
+ return Promise.resolve();
109
+ }
110
+ }
111
+ }
112
+
113
+ /**
114
+ * @description 验证文件大小
115
+ * @param fileSize {number}
116
+ * @param maxSize {number}
117
+ * @returns {Promise<never>|Promise<void>}
118
+ */
119
+ verifyFileSize(fileSize, maxSize) {
120
+ const {
121
+ onBeforeUploadVerifySize
122
+ } = this.props;
123
+ if (onBeforeUploadVerifySize) {
124
+ const fn = onBeforeUploadVerifySize(fileSize, maxSize);
125
+ if (fn instanceof Promise) {
126
+ return fn;
127
+ } else {
128
+ return Promise.reject('onBeforeUploadVerifySize 应该返回Promise.');
129
+ }
130
+ } else {
131
+ if (fileSize / 1024 > maxSize) {
132
+ message.error(`上传文件大小超过最大值(${maxSize / 1024}MB),请重新选择`);
133
+ return Promise.reject();
134
+ } else {
135
+ return Promise.resolve();
136
+ }
137
+ }
138
+ }
139
+
140
+ /**
141
+ * @description 发起上传请求
142
+ * @param file {File}
143
+ * @returns {Promise<{url: string, fileName: string, respDesc: string}>}
144
+ */
145
+ onFormRequest(file) {
146
+ const {
147
+ customRequest
148
+ } = this.props;
149
+ return new Promise((resolve, reject) => {
150
+ const xhr = new XMLHttpRequest();
151
+ const md5 = new MD5();
152
+ const form = new FormData();
153
+ //
154
+ const fn = () => this.setState({
155
+ loading: true
156
+ }, () => {
157
+ xhr.open('POST', this.httpConfig.url);
158
+ Object.keys(this.httpConfig.headers).forEach(key => xhr.setRequestHeader(key, this.httpConfig.headers[key]));
159
+ xhr.onreadystatechange = () => {
160
+ if (xhr.readyState === 4 && xhr.status === 200) {
161
+ this.setState({
162
+ loading: false
163
+ }, () => {
164
+ const res = parseObject(xhr.responseText);
165
+ if (isFunction(customRequest)) {
166
+ const fn = customRequest(res);
167
+ if (isPromise(fn)) {
168
+ fn.then(value => resolve({
169
+ url: value
170
+ }));
171
+ }
172
+ } else {
173
+ if (res.respCode && res.respCode === '0000' || res.success) {
174
+ const result = toObject(res.data);
175
+ message.success('上传成功!');
176
+ resolve(result);
177
+ } else {
178
+ message.error(res.respDesc || res.errMessage || '未知错误,上传失败,请检查!');
179
+ reject(res);
180
+ }
181
+ }
182
+ });
183
+ }
184
+ };
185
+ form.append(this.httpConfig.fieldName, file);
186
+ Object.keys(this.httpConfig.data).forEach(key => form.append(key, this.httpConfig.data[key]));
187
+ xhr.send(form);
188
+ });
189
+ const read = new FileReader();
190
+ read.onload = e => {
191
+ md5.appendBinary(e.target.result);
192
+ form.append('md5', md5.end());
193
+ fn();
194
+ };
195
+ read.readAsDataURL(file);
196
+ });
197
+ }
198
+
199
+ /**
200
+ * @description 回调
201
+ * @param value {string}
202
+ */
203
+ onChange(value) {
204
+ const {
205
+ onChange
206
+ } = this.props;
207
+ onChange && onChange(value || undefined);
208
+ }
209
+
210
+ /**
211
+ * @description 删除
212
+ * @param sup {number}
213
+ */
214
+ onDelete(sup) {
215
+ this.onChange(this.props.multiple ? this.value.filter((_, sub) => sub !== sup) : undefined);
216
+ }
217
+
218
+ /**
219
+ * @description 上传
220
+ * @param target {{files: FileList, value: any}}
221
+ */
222
+ onUpload({
223
+ target
224
+ }) {
225
+ const file = target.files[0];
226
+ const {
227
+ size: fileSize,
228
+ type: fileType
229
+ } = file;
230
+ const {
231
+ accept = '*',
232
+ multiple = false,
233
+ size: maxSize = 5120
234
+ } = this.props;
235
+ this.verifyFileAccept(fileType, accept).then(() => this.verifyFileSize(fileSize, maxSize).then(() => this.onFormRequest(file).then(res => {
236
+ const data = {
237
+ fileId: res.fileId || res.url,
238
+ fileUrl: res.fileUrl || res.fileName
239
+ };
240
+ this.onChange(multiple ? [...this.value, data] : data);
241
+ })));
242
+ target.value = null;
243
+ }
244
+ render() {
245
+ const {
246
+ accept = '*',
247
+ preview = false,
248
+ showDelete = true,
249
+ buttonProps = {},
250
+ // ---------
251
+ children
252
+ } = this.props;
253
+ const {
254
+ loading
255
+ } = this.state;
256
+ return /*#__PURE__*/React.createElement("div", {
257
+ className: `${prefixCls}_file-uploader_`
258
+ }, /*#__PURE__*/React.createElement(Button, _extends({}, tools.toObject(buttonProps), {
259
+ loading: loading,
260
+ disabled: this.disabled,
261
+ className: `${prefixCls}_file-uploader-select_`,
262
+ onClick: () => this.inputFile.current.click()
263
+ }), /*#__PURE__*/React.createElement("input", {
264
+ ref: this.inputFile,
265
+ type: "file",
266
+ style: {
267
+ display: 'none'
268
+ },
269
+ accept: accept,
270
+ disabled: this.disabled,
271
+ onChange: e => this.onUpload(e)
272
+ }), /*#__PURE__*/React.createElement("span", null, children)), this.value.map((value, index) => {
273
+ const $value = value?.fileUrl;
274
+ return /*#__PURE__*/React.createElement("div", {
275
+ key: index,
276
+ className: `${prefixCls}-upload-list-text-container`
277
+ }, /*#__PURE__*/React.createElement("div", {
278
+ className: `${prefixCls}-upload-list-item ${prefixCls}-upload-list-item-list-type-text`
279
+ }, /*#__PURE__*/React.createElement("div", {
280
+ className: `${prefixCls}-upload-list-item-info`
281
+ }, /*#__PURE__*/React.createElement("span", {
282
+ className: `${prefixCls}-upload-span`
283
+ }, /*#__PURE__*/React.createElement("div", {
284
+ className: `${prefixCls}-upload-text-icon`
285
+ }, /*#__PURE__*/React.createElement(PaperClipOutlined, null)), /*#__PURE__*/React.createElement("span", {
286
+ style: {
287
+ paddingRight: 22
288
+ },
289
+ className: `${prefixCls}-upload-list-item-name`
290
+ }, preview ? /*#__PURE__*/React.createElement("a", {
291
+ href: $value,
292
+ target: "_blank"
293
+ }, $value) : $value), showDelete && /*#__PURE__*/React.createElement("span", {
294
+ className: `${prefixCls}-upload-list-item-card-actions`
295
+ }, /*#__PURE__*/React.createElement(Tooltip, {
296
+ title: "\u5220\u9664",
297
+ placement: "left"
298
+ }, /*#__PURE__*/React.createElement(DeleteOutlined, {
299
+ onClick: () => this.onDelete(index)
300
+ })))))));
301
+ }));
302
+ }
303
+ }
304
+ export default FileUploader;
305
+ export const getValueProps = value => ({
306
+ value: value ? {
307
+ fileUrl: value
308
+ } : undefined
309
+ });
310
+ export const getValueFromEvent = file => {
311
+ return file?.fileUrl;
312
+ };
@@ -0,0 +1,313 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ import React, { useState, useEffect, Fragment } from 'react';
3
+ import { tools } from '@cqsjjb/jjb-common-lib';
4
+ import { FileOutlined, LinkOutlined } from '@ant-design/icons';
5
+ import { Modal, Descriptions, Empty, Image, Tooltip, Spin, Table, Space, TreeSelect } from 'antd';
6
+ const formilyItemMargin = new Map([['small', 8], ['middle', 12], ['default', 16]]);
7
+ const IS_PDF_REG = /\.pdf$/;
8
+ const IS_VIDEO_REG = /\.(mp4|ogg|mkv|webm)$/;
9
+ export default function FormilyDescriptions({
10
+ schema,
11
+ values,
12
+ ...props
13
+ }) {
14
+ const [regions, setRegions] = useState([]);
15
+ useEffect(() => {
16
+ fetch(`${window.process.env.app.API_HOST}/system/operation/regions`, {
17
+ headers: {
18
+ token: sessionStorage.token
19
+ }
20
+ }).then(res => res.json()).then(res => {
21
+ if (res.success) setRegions(res.data);
22
+ });
23
+ }, []);
24
+ const dataSource = tools.getDynamicFormilyFields(schema, values, {
25
+ regions
26
+ });
27
+ if (!dataSource.length) return /*#__PURE__*/React.createElement(Empty, {
28
+ image: Empty.PRESENTED_IMAGE_SIMPLE
29
+ });
30
+ return /*#__PURE__*/React.createElement(DescriptionsRender, _extends({
31
+ dataSource: dataSource
32
+ }, props));
33
+ }
34
+ export function DescriptionsRender({
35
+ dataSource,
36
+ size = 'default',
37
+ ...props
38
+ }) {
39
+ return dataSource.map((item, index) => {
40
+ const isLast = index === dataSource.length - 1;
41
+ const marginBottom = isLast ? 0 : formilyItemMargin.get(size);
42
+ const items = item.fromComponentEnum === 'GRID_FORM' ? item.children.map((child, childIndex) => ({
43
+ key: childIndex,
44
+ span: child.formType === 'Table' ? props.column : 1,
45
+ label: child.name,
46
+ children: /*#__PURE__*/React.createElement(ItemRender, _extends({
47
+ data: child
48
+ }, props))
49
+ })) : [{
50
+ key: 1,
51
+ label: item.name,
52
+ children: /*#__PURE__*/React.createElement(ItemRender, _extends({
53
+ data: item
54
+ }, props))
55
+ }];
56
+ return /*#__PURE__*/React.createElement(Descriptions, {
57
+ key: index,
58
+ size: size,
59
+ style: {
60
+ marginBottom
61
+ },
62
+ items: items,
63
+ colon: props.colon,
64
+ title: props.title,
65
+ extra: props.extra,
66
+ layout: props.layout || 'vertical',
67
+ column: props.column,
68
+ labelStyle: props.labelStyle,
69
+ contentStyle: props.contentStyle
70
+ });
71
+ });
72
+ }
73
+ export function ItemRender({
74
+ data,
75
+ imageWidth,
76
+ imageHeight,
77
+ imagePreview,
78
+ extraFileLink,
79
+ ...props
80
+ }) {
81
+ const [open, setOpen] = useState(false);
82
+ const [previewUrl, setPreviewUrl] = useState('');
83
+ const handlePreview = url => {
84
+ setPreviewUrl(url);
85
+ setOpen(true);
86
+ };
87
+ const renderContent = () => {
88
+ if (tools.isArray(data.value)) {
89
+ if (tools.isStringArray(data.value) || tools.isNumberArray(data.value)) {
90
+ return data.value.join('、');
91
+ }
92
+ if (tools.isObjectArray(data.value)) {
93
+ return data.formType === 'Table' ? /*#__PURE__*/React.createElement(RenderTable, {
94
+ columns: data.tableColumns,
95
+ dataSource: data.value,
96
+ imageWidth: imageWidth,
97
+ imageHeight: imageHeight,
98
+ imagePreview: imagePreview,
99
+ extraFileLink: extraFileLink,
100
+ onPreview: handlePreview
101
+ }) : data.value.map((file, index) => /*#__PURE__*/React.createElement(RenderFileItem, {
102
+ key: index,
103
+ url: file.url,
104
+ name: file.name,
105
+ isImage: file.isImage,
106
+ imageWidth: imageWidth,
107
+ imageHeight: imageHeight,
108
+ imagePreview: imagePreview,
109
+ extraFileLink: extraFileLink,
110
+ onPreview: () => handlePreview(file.url)
111
+ }));
112
+ }
113
+ return tools.textPlaceholder();
114
+ }
115
+ return /*#__PURE__*/React.createElement(RenderText, {
116
+ name: data.name,
117
+ value: data.value,
118
+ maxTagCount: props.maxTagCount,
119
+ renderItemText: props.renderItemText
120
+ });
121
+ };
122
+ return /*#__PURE__*/React.createElement(Fragment, null, renderContent(), /*#__PURE__*/React.createElement(Modal, {
123
+ destroyOnClose: true,
124
+ title: "\u67E5\u770B\u6587\u4EF6",
125
+ open: open,
126
+ width: 1100,
127
+ footer: null,
128
+ onCancel: () => setOpen(false)
129
+ }, IS_PDF_REG.test(previewUrl) && /*#__PURE__*/React.createElement("embed", {
130
+ src: previewUrl,
131
+ width: "100%",
132
+ height: 600
133
+ }), IS_VIDEO_REG.test(previewUrl) && /*#__PURE__*/React.createElement("video", {
134
+ controls: true,
135
+ src: previewUrl,
136
+ width: "100%",
137
+ height: 350
138
+ })));
139
+ }
140
+ export function RenderText({
141
+ value,
142
+ name,
143
+ maxTagCount = 1,
144
+ renderItemText
145
+ }) {
146
+ const [text, setText] = useState();
147
+ const [options, setOptions] = useState([]);
148
+ const [loading, setLoading] = useState(false);
149
+ useEffect(() => {
150
+ if (!value) return;
151
+ if (value.load) {
152
+ setLoading(true);
153
+ value.load().then(res => res.json()).then(res => {
154
+ if (res.success) {
155
+ setOptions(res.data);
156
+ setText(value?.selected?.map(i => `${i.key}&${i.label}`));
157
+ }
158
+ setLoading(false);
159
+ });
160
+ } else {
161
+ setText(value);
162
+ }
163
+ }, [value]);
164
+ if (Array.isArray(text)) {
165
+ return /*#__PURE__*/React.createElement("div", {
166
+ style: {
167
+ gap: 6,
168
+ width: '100%',
169
+ display: 'flex',
170
+ minHeight: 22,
171
+ flexDirection: 'column'
172
+ }
173
+ }, /*#__PURE__*/React.createElement(Spin, {
174
+ spinning: loading
175
+ }, /*#__PURE__*/React.createElement(TreeSelect, {
176
+ treeCheckable: true,
177
+ treeDefaultExpandAll: true,
178
+ style: {
179
+ width: '100%'
180
+ },
181
+ value: text,
182
+ variant: "borderless",
183
+ treeData: options,
184
+ showSearch: false,
185
+ maxTagCount: maxTagCount
186
+ })));
187
+ }
188
+ return renderItemText ? renderItemText({
189
+ text,
190
+ name
191
+ }) : tools.textPlaceholder(text);
192
+ }
193
+ export function RenderFileItem(props) {
194
+ const {
195
+ isImage,
196
+ url,
197
+ name,
198
+ imageWidth,
199
+ imageHeight,
200
+ imagePreview,
201
+ extraFileLink,
202
+ onPreview
203
+ } = props;
204
+ return isImage ? /*#__PURE__*/React.createElement(RenderImage, {
205
+ url: url,
206
+ imageWidth: imageWidth,
207
+ imageHeight: imageHeight,
208
+ imagePreview: imagePreview,
209
+ extraFileLink: extraFileLink
210
+ }) : /*#__PURE__*/React.createElement(Tooltip, {
211
+ title: url
212
+ }, IS_PDF_REG.test(url) || IS_VIDEO_REG.test(url) ? /*#__PURE__*/React.createElement(RenderValidFile, {
213
+ url: url,
214
+ name: name,
215
+ onPreview: onPreview,
216
+ extraFileLink: extraFileLink
217
+ }) : /*#__PURE__*/React.createElement(RenderInvalidFile, {
218
+ url: url,
219
+ name: name
220
+ }));
221
+ }
222
+ export function RenderImage({
223
+ url,
224
+ imageWidth,
225
+ imageHeight,
226
+ imagePreview,
227
+ extraFileLink
228
+ }) {
229
+ return /*#__PURE__*/React.createElement("span", {
230
+ style: {
231
+ display: 'inline-block',
232
+ marginRight: 4,
233
+ marginBottom: 4
234
+ }
235
+ }, /*#__PURE__*/React.createElement(Image, {
236
+ src: url,
237
+ width: imageWidth || 64,
238
+ height: imageHeight || 64,
239
+ preview: extraFileLink ? {
240
+ visible: false,
241
+ onVisibleChange: () => window.open(url)
242
+ } : imagePreview
243
+ }));
244
+ }
245
+ export function RenderValidFile({
246
+ url,
247
+ name,
248
+ extraFileLink,
249
+ onPreview
250
+ }) {
251
+ const handleClick = () => extraFileLink ? window.open(url) : onPreview();
252
+ return /*#__PURE__*/React.createElement("a", {
253
+ style: {
254
+ gap: 4,
255
+ display: 'flex',
256
+ alignItems: 'center'
257
+ },
258
+ onClick: handleClick
259
+ }, /*#__PURE__*/React.createElement(FileOutlined, null), name);
260
+ }
261
+ export function RenderInvalidFile({
262
+ url,
263
+ name
264
+ }) {
265
+ return /*#__PURE__*/React.createElement("a", {
266
+ href: url,
267
+ target: "_blank",
268
+ style: {
269
+ gap: 4,
270
+ display: 'flex',
271
+ alignItems: 'center'
272
+ }
273
+ }, /*#__PURE__*/React.createElement(LinkOutlined, null), name);
274
+ }
275
+ export function RenderTable({
276
+ columns,
277
+ dataSource,
278
+ imageWidth,
279
+ imageHeight,
280
+ imagePreview,
281
+ extraFileLink,
282
+ onPreview
283
+ }) {
284
+ const renderColumn = col => {
285
+ const originalRender = col.render;
286
+ col.render = row => {
287
+ if (tools.isNumberArray(row) || tools.isStringArray(row)) return row.join(',');
288
+ if (tools.isUploadFileListArray(row)) {
289
+ return /*#__PURE__*/React.createElement(Space, {
290
+ direction: "vertical"
291
+ }, tools.getDynamicUploadFileList(row).map((file, index) => /*#__PURE__*/React.createElement(RenderFileItem, {
292
+ key: index,
293
+ url: file.url,
294
+ name: file.name,
295
+ isImage: file.isImage,
296
+ imageWidth: imageWidth,
297
+ imageHeight: imageHeight,
298
+ imagePreview: imagePreview,
299
+ extraFileLink: extraFileLink,
300
+ onPreview: () => onPreview(file.url)
301
+ })));
302
+ }
303
+ if (tools.isObject(row)) return '数据错误';
304
+ return originalRender ? originalRender(row) : row;
305
+ };
306
+ return col;
307
+ };
308
+ return /*#__PURE__*/React.createElement(Table, {
309
+ rowKey: (record, index) => index,
310
+ columns: columns.map(renderColumn),
311
+ dataSource: dataSource
312
+ });
313
+ }
@@ -0,0 +1,58 @@
1
+ import React, { useEffect, useRef, useState, forwardRef, useImperativeHandle } from 'react';
2
+ import Renderer from '@cqsjjb-formily/renderer';
3
+ import { http, tools } from '@cqsjjb/jjb-common-lib';
4
+ const FormilyRenderer = /*#__PURE__*/forwardRef((props, ref) => {
5
+ const {
6
+ code,
7
+ style,
8
+ initialValues = {},
9
+ disabledFields = [],
10
+ getRef
11
+ } = props;
12
+ const formRef = useRef(null);
13
+ const [schema, setSchema] = useState({});
14
+
15
+ // 暴露 formRef 给父组件
16
+ useImperativeHandle(ref, () => formRef.current);
17
+ useEffect(() => {
18
+ let isMounted = true;
19
+
20
+ // 获取设计配置
21
+ http.Get(`/design/designs/${code}`).then(res => {
22
+ if (isMounted && res.success) {
23
+ const {
24
+ config
25
+ } = res.data;
26
+ setSchema(tools.parseObject(config));
27
+ }
28
+ });
29
+ return () => {
30
+ isMounted = false;
31
+ };
32
+ }, [code]);
33
+ useEffect(() => {
34
+ if (!formRef.current || !Object.keys(schema).length) return;
35
+
36
+ // 设置初始值
37
+ formRef.current.setValues(initialValues);
38
+
39
+ // 禁用字段
40
+ tools.toArray(disabledFields).forEach(field => {
41
+ const f = formRef.current.fields[field];
42
+ if (f) {
43
+ f.required = false;
44
+ f.disabled = true;
45
+ }
46
+ });
47
+
48
+ // 返回 formRef 给父组件
49
+ getRef && getRef(formRef);
50
+ }, [schema, initialValues, disabledFields, getRef]);
51
+ return /*#__PURE__*/React.createElement("div", {
52
+ style: style
53
+ }, /*#__PURE__*/React.createElement(Renderer, {
54
+ ref: formRef,
55
+ schema: schema
56
+ }));
57
+ });
58
+ export default FormilyRenderer;