149 lines
6.4 KiB
JavaScript
149 lines
6.4 KiB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
var _excluded = ["radioType", "renderFormItem", "mode", "render", "label", "light"];
|
|
import { LoadingOutlined } from '@ant-design/icons';
|
|
import { useIntl } from '@ant-design/pro-provider';
|
|
import { FieldLabel, compatibleBorder, objectToMap, proFieldParsingText } from '@ant-design/pro-utils';
|
|
import { Cascader, ConfigProvider } from 'antd';
|
|
import classNames from 'classnames';
|
|
import React, { useContext, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
import { useFieldFetchData } from "../Select";
|
|
|
|
// 兼容代码-----------
|
|
import "antd/es/cascader/style";
|
|
//----------------------
|
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
/**
|
|
* 级联选择组件
|
|
*
|
|
* @param param0
|
|
* @param ref
|
|
*/
|
|
var FieldCascader = function FieldCascader(_ref, ref) {
|
|
var _rest$fieldProps2;
|
|
var radioType = _ref.radioType,
|
|
renderFormItem = _ref.renderFormItem,
|
|
mode = _ref.mode,
|
|
render = _ref.render,
|
|
label = _ref.label,
|
|
light = _ref.light,
|
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
var _useContext = useContext(ConfigProvider.ConfigContext),
|
|
getPrefixCls = _useContext.getPrefixCls;
|
|
var layoutClassName = getPrefixCls('pro-field-cascader');
|
|
var _useFieldFetchData = useFieldFetchData(rest),
|
|
_useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 3),
|
|
loading = _useFieldFetchData2[0],
|
|
options = _useFieldFetchData2[1],
|
|
_fetchData = _useFieldFetchData2[2];
|
|
var intl = useIntl();
|
|
var cascaderRef = useRef();
|
|
var _useState = useState(false),
|
|
_useState2 = _slicedToArray(_useState, 2),
|
|
open = _useState2[0],
|
|
setOpen = _useState2[1];
|
|
useImperativeHandle(ref, function () {
|
|
return _objectSpread(_objectSpread({}, cascaderRef.current || {}), {}, {
|
|
fetchData: function fetchData(keyWord) {
|
|
return _fetchData(keyWord);
|
|
}
|
|
});
|
|
}, [_fetchData]);
|
|
var optionsValueEnum = useMemo(function () {
|
|
var _rest$fieldProps;
|
|
if (mode !== 'read') return;
|
|
/**
|
|
* Support cascader fieldNames
|
|
*
|
|
* @see https://ant.design/components/cascader-cn/#header
|
|
*/
|
|
var _ref2 = ((_rest$fieldProps = rest.fieldProps) === null || _rest$fieldProps === void 0 ? void 0 : _rest$fieldProps.fieldNames) || {},
|
|
_ref2$value = _ref2.value,
|
|
valuePropsName = _ref2$value === void 0 ? 'value' : _ref2$value,
|
|
_ref2$label = _ref2.label,
|
|
labelPropsName = _ref2$label === void 0 ? 'label' : _ref2$label,
|
|
_ref2$children = _ref2.children,
|
|
childrenPropsName = _ref2$children === void 0 ? 'children' : _ref2$children;
|
|
var valuesMap = new Map();
|
|
var traverseOptions = function traverseOptions(_options) {
|
|
if (!(_options !== null && _options !== void 0 && _options.length)) {
|
|
return valuesMap;
|
|
}
|
|
var length = _options.length;
|
|
var i = 0;
|
|
while (i < length) {
|
|
var cur = _options[i++];
|
|
valuesMap.set(cur[valuePropsName], cur[labelPropsName]);
|
|
traverseOptions(cur[childrenPropsName]);
|
|
}
|
|
return valuesMap;
|
|
};
|
|
return traverseOptions(options);
|
|
}, [mode, options, (_rest$fieldProps2 = rest.fieldProps) === null || _rest$fieldProps2 === void 0 ? void 0 : _rest$fieldProps2.fieldNames]);
|
|
if (mode === 'read') {
|
|
var dom = /*#__PURE__*/_jsx(_Fragment, {
|
|
children: proFieldParsingText(rest.text, objectToMap(rest.valueEnum || optionsValueEnum))
|
|
});
|
|
if (render) {
|
|
var _render;
|
|
return (_render = render(rest.text, _objectSpread({
|
|
mode: mode
|
|
}, rest.fieldProps), dom)) !== null && _render !== void 0 ? _render : null;
|
|
}
|
|
return dom;
|
|
}
|
|
if (mode === 'edit') {
|
|
var _rest$fieldProps3, _rest$fieldProps5;
|
|
var _dom = /*#__PURE__*/_jsx(Cascader, _objectSpread(_objectSpread(_objectSpread({}, compatibleBorder(!light)), {}, {
|
|
ref: cascaderRef,
|
|
open: open,
|
|
suffixIcon: loading ? /*#__PURE__*/_jsx(LoadingOutlined, {}) : undefined,
|
|
placeholder: intl.getMessage('tableForm.selectPlaceholder', '请选择'),
|
|
allowClear: ((_rest$fieldProps3 = rest.fieldProps) === null || _rest$fieldProps3 === void 0 ? void 0 : _rest$fieldProps3.allowClear) !== false
|
|
}, rest.fieldProps), {}, {
|
|
onDropdownVisibleChange: function onDropdownVisibleChange(isOpen) {
|
|
var _rest$fieldProps4, _rest$fieldProps4$onD;
|
|
rest === null || rest === void 0 || (_rest$fieldProps4 = rest.fieldProps) === null || _rest$fieldProps4 === void 0 || (_rest$fieldProps4$onD = _rest$fieldProps4.onDropdownVisibleChange) === null || _rest$fieldProps4$onD === void 0 || _rest$fieldProps4$onD.call(_rest$fieldProps4, isOpen);
|
|
setOpen(isOpen);
|
|
},
|
|
className: classNames((_rest$fieldProps5 = rest.fieldProps) === null || _rest$fieldProps5 === void 0 ? void 0 : _rest$fieldProps5.className, layoutClassName),
|
|
options: options
|
|
}));
|
|
if (renderFormItem) {
|
|
var _renderFormItem;
|
|
_dom = (_renderFormItem = renderFormItem(rest.text, _objectSpread(_objectSpread({
|
|
mode: mode
|
|
}, rest.fieldProps), {}, {
|
|
options: options,
|
|
loading: loading
|
|
}), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;
|
|
}
|
|
if (light) {
|
|
var _rest$fieldProps6 = rest.fieldProps,
|
|
disabled = _rest$fieldProps6.disabled,
|
|
value = _rest$fieldProps6.value;
|
|
var notEmpty = !!value && (value === null || value === void 0 ? void 0 : value.length) !== 0;
|
|
return /*#__PURE__*/_jsx(FieldLabel, {
|
|
label: label,
|
|
disabled: disabled,
|
|
bordered: rest.bordered,
|
|
value: notEmpty || open ? _dom : null,
|
|
style: notEmpty ? {
|
|
paddingInlineEnd: 0
|
|
} : undefined,
|
|
allowClear: false,
|
|
downIcon: notEmpty || open ? false : undefined,
|
|
onClick: function onClick() {
|
|
var _rest$fieldProps7, _rest$fieldProps7$onD;
|
|
setOpen(true);
|
|
rest === null || rest === void 0 || (_rest$fieldProps7 = rest.fieldProps) === null || _rest$fieldProps7 === void 0 || (_rest$fieldProps7$onD = _rest$fieldProps7.onDropdownVisibleChange) === null || _rest$fieldProps7$onD === void 0 || _rest$fieldProps7$onD.call(_rest$fieldProps7, true);
|
|
}
|
|
});
|
|
}
|
|
return _dom;
|
|
}
|
|
return null;
|
|
};
|
|
export default /*#__PURE__*/React.forwardRef(FieldCascader); |