You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4132 lines
150 KiB
4132 lines
150 KiB
"use strict";
|
|
(self["webpackChunk"] = self["webpackChunk"] || []).push([[65491],{
|
|
|
|
/***/ 32857:
|
|
/*!********************************************************************!*\
|
|
!*** ./node_modules/@ant-design/icons-svg/es/asn/CheckOutlined.js ***!
|
|
\********************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__) {
|
|
|
|
// This icon file is generated automatically.
|
|
var CheckOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" } }] }, "name": "check", "theme": "outlined" };
|
|
/* harmony default export */ __webpack_exports__["Z"] = (CheckOutlined);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 66023:
|
|
/*!*******************************************************************!*\
|
|
!*** ./node_modules/@ant-design/icons-svg/es/asn/DownOutlined.js ***!
|
|
\*******************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__) {
|
|
|
|
// This icon file is generated automatically.
|
|
var DownOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" } }] }, "name": "down", "theme": "outlined" };
|
|
/* harmony default export */ __webpack_exports__["Z"] = (DownOutlined);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 509:
|
|
/*!*********************************************************************!*\
|
|
!*** ./node_modules/@ant-design/icons-svg/es/asn/SearchOutlined.js ***!
|
|
\*********************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__) {
|
|
|
|
// This icon file is generated automatically.
|
|
var SearchOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z" } }] }, "name": "search", "theme": "outlined" };
|
|
/* harmony default export */ __webpack_exports__["Z"] = (SearchOutlined);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 88258:
|
|
/*!********************************************************************!*\
|
|
!*** ./node_modules/antd/es/config-provider/defaultRenderEmpty.js ***!
|
|
\********************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 67294);
|
|
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ 53124);
|
|
/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../empty */ 62986);
|
|
|
|
|
|
|
|
var defaultRenderEmpty = function defaultRenderEmpty(componentName) {
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(___WEBPACK_IMPORTED_MODULE_1__/* .ConfigConsumer */ .C, null, function (_ref) {
|
|
var getPrefixCls = _ref.getPrefixCls;
|
|
var prefix = getPrefixCls('empty');
|
|
switch (componentName) {
|
|
case 'Table':
|
|
case 'List':
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_empty__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
|
|
image: _empty__WEBPACK_IMPORTED_MODULE_2__/* ["default"].PRESENTED_IMAGE_SIMPLE */ .Z.PRESENTED_IMAGE_SIMPLE
|
|
});
|
|
case 'Select':
|
|
case 'TreeSelect':
|
|
case 'Cascader':
|
|
case 'Transfer':
|
|
case 'Mentions':
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_empty__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
|
|
image: _empty__WEBPACK_IMPORTED_MODULE_2__/* ["default"].PRESENTED_IMAGE_SIMPLE */ .Z.PRESENTED_IMAGE_SIMPLE,
|
|
className: "".concat(prefix, "-small")
|
|
});
|
|
/* istanbul ignore next */
|
|
default:
|
|
// Should never hit if we take all the component into consider.
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_empty__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, null);
|
|
}
|
|
});
|
|
};
|
|
/* harmony default export */ __webpack_exports__["Z"] = (defaultRenderEmpty);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 62986:
|
|
/*!*********************************************************!*\
|
|
!*** ./node_modules/antd/es/empty/index.js + 2 modules ***!
|
|
\*********************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
|
|
// EXPORTS
|
|
__webpack_require__.d(__webpack_exports__, {
|
|
"Z": function() { return /* binding */ es_empty; }
|
|
});
|
|
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
|
var defineProperty = __webpack_require__(4942);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
|
|
var esm_extends = __webpack_require__(87462);
|
|
// EXTERNAL MODULE: ./node_modules/classnames/index.js
|
|
var classnames = __webpack_require__(94184);
|
|
var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
|
// EXTERNAL MODULE: ./node_modules/react/index.js
|
|
var react = __webpack_require__(67294);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/config-provider/context.js
|
|
var context = __webpack_require__(53124);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/locale-provider/LocaleReceiver.js + 1 modules
|
|
var LocaleReceiver = __webpack_require__(23715);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/empty/empty.js
|
|
|
|
|
|
var Empty = function Empty() {
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('empty-img-default');
|
|
return /*#__PURE__*/react.createElement("svg", {
|
|
className: prefixCls,
|
|
width: "184",
|
|
height: "152",
|
|
viewBox: "0 0 184 152",
|
|
xmlns: "http://www.w3.org/2000/svg"
|
|
}, /*#__PURE__*/react.createElement("g", {
|
|
fill: "none",
|
|
fillRule: "evenodd"
|
|
}, /*#__PURE__*/react.createElement("g", {
|
|
transform: "translate(24 31.67)"
|
|
}, /*#__PURE__*/react.createElement("ellipse", {
|
|
className: "".concat(prefixCls, "-ellipse"),
|
|
cx: "67.797",
|
|
cy: "106.89",
|
|
rx: "67.797",
|
|
ry: "12.668"
|
|
}), /*#__PURE__*/react.createElement("path", {
|
|
className: "".concat(prefixCls, "-path-1"),
|
|
d: "M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"
|
|
}), /*#__PURE__*/react.createElement("path", {
|
|
className: "".concat(prefixCls, "-path-2"),
|
|
d: "M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",
|
|
transform: "translate(13.56)"
|
|
}), /*#__PURE__*/react.createElement("path", {
|
|
className: "".concat(prefixCls, "-path-3"),
|
|
d: "M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"
|
|
}), /*#__PURE__*/react.createElement("path", {
|
|
className: "".concat(prefixCls, "-path-4"),
|
|
d: "M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"
|
|
})), /*#__PURE__*/react.createElement("path", {
|
|
className: "".concat(prefixCls, "-path-5"),
|
|
d: "M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"
|
|
}), /*#__PURE__*/react.createElement("g", {
|
|
className: "".concat(prefixCls, "-g"),
|
|
transform: "translate(149.65 15.383)"
|
|
}, /*#__PURE__*/react.createElement("ellipse", {
|
|
cx: "20.654",
|
|
cy: "3.167",
|
|
rx: "2.849",
|
|
ry: "2.815"
|
|
}), /*#__PURE__*/react.createElement("path", {
|
|
d: "M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"
|
|
}))));
|
|
};
|
|
/* harmony default export */ var empty = (Empty);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/empty/simple.js
|
|
|
|
|
|
var Simple = function Simple() {
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('empty-img-simple');
|
|
return /*#__PURE__*/react.createElement("svg", {
|
|
className: prefixCls,
|
|
width: "64",
|
|
height: "41",
|
|
viewBox: "0 0 64 41",
|
|
xmlns: "http://www.w3.org/2000/svg"
|
|
}, /*#__PURE__*/react.createElement("g", {
|
|
transform: "translate(0 1)",
|
|
fill: "none",
|
|
fillRule: "evenodd"
|
|
}, /*#__PURE__*/react.createElement("ellipse", {
|
|
className: "".concat(prefixCls, "-ellipse"),
|
|
cx: "32",
|
|
cy: "33",
|
|
rx: "32",
|
|
ry: "7"
|
|
}), /*#__PURE__*/react.createElement("g", {
|
|
className: "".concat(prefixCls, "-g"),
|
|
fillRule: "nonzero"
|
|
}, /*#__PURE__*/react.createElement("path", {
|
|
d: "M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"
|
|
}), /*#__PURE__*/react.createElement("path", {
|
|
d: "M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",
|
|
className: "".concat(prefixCls, "-path")
|
|
}))));
|
|
};
|
|
/* harmony default export */ var simple = (Simple);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/empty/index.js
|
|
|
|
|
|
var __rest = undefined && undefined.__rest || function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var defaultEmptyImg = /*#__PURE__*/react.createElement(empty, null);
|
|
var simpleEmptyImg = /*#__PURE__*/react.createElement(simple, null);
|
|
var empty_Empty = function Empty(_a) {
|
|
var className = _a.className,
|
|
customizePrefixCls = _a.prefixCls,
|
|
_a$image = _a.image,
|
|
image = _a$image === void 0 ? defaultEmptyImg : _a$image,
|
|
description = _a.description,
|
|
children = _a.children,
|
|
imageStyle = _a.imageStyle,
|
|
restProps = __rest(_a, ["className", "prefixCls", "image", "description", "children", "imageStyle"]);
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
direction = _React$useContext.direction;
|
|
return /*#__PURE__*/react.createElement(LocaleReceiver/* default */.Z, {
|
|
componentName: "Empty"
|
|
}, function (contextLocale) {
|
|
var _classNames;
|
|
var prefixCls = getPrefixCls('empty', customizePrefixCls);
|
|
var des = typeof description !== 'undefined' ? description : contextLocale.description;
|
|
var alt = typeof des === 'string' ? des : 'empty';
|
|
var imageNode = null;
|
|
if (typeof image === 'string') {
|
|
imageNode = /*#__PURE__*/react.createElement("img", {
|
|
alt: alt,
|
|
src: image
|
|
});
|
|
} else {
|
|
imageNode = image;
|
|
}
|
|
return /*#__PURE__*/react.createElement("div", (0,esm_extends/* default */.Z)({
|
|
className: classnames_default()(prefixCls, (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-normal"), image === simpleEmptyImg), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-rtl"), direction === 'rtl'), _classNames), className)
|
|
}, restProps), /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(prefixCls, "-image"),
|
|
style: imageStyle
|
|
}, imageNode), des && /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(prefixCls, "-description")
|
|
}, des), children && /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(prefixCls, "-footer")
|
|
}, children));
|
|
});
|
|
};
|
|
empty_Empty.PRESENTED_IMAGE_DEFAULT = defaultEmptyImg;
|
|
empty_Empty.PRESENTED_IMAGE_SIMPLE = simpleEmptyImg;
|
|
/* harmony default export */ var es_empty = (empty_Empty);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 81151:
|
|
/*!***************************************************************!*\
|
|
!*** ./node_modules/antd/es/empty/style/index.js + 1 modules ***!
|
|
\***************************************************************/
|
|
/***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
|
|
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/style/default.less
|
|
var style_default = __webpack_require__(43146);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/empty/style/index.less
|
|
// extracted by mini-css-extract-plugin
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/empty/style/index.js
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 95985:
|
|
/*!****************************************************************!*\
|
|
!*** ./node_modules/antd/es/select/style/index.js + 1 modules ***!
|
|
\****************************************************************/
|
|
/***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
|
|
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/style/default.less
|
|
var style_default = __webpack_require__(43146);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/select/style/index.less
|
|
// extracted by mini-css-extract-plugin
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/empty/style/index.js + 1 modules
|
|
var style = __webpack_require__(81151);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/select/style/index.js
|
|
|
|
|
|
// style dependencies
|
|
|
|
// deps-lint-skip: form, space
|
|
|
|
/***/ }),
|
|
|
|
/***/ 46163:
|
|
/*!*******************************************************!*\
|
|
!*** ./node_modules/antd/es/select/utils/iconUtil.js ***!
|
|
\*******************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "Z": function() { return /* binding */ getIcons; }
|
|
/* harmony export */ });
|
|
/* harmony import */ var _ant_design_icons_es_icons_CheckOutlined__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ant-design/icons/es/icons/CheckOutlined */ 64894);
|
|
/* harmony import */ var _ant_design_icons_es_icons_CloseCircleFilled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ant-design/icons/es/icons/CloseCircleFilled */ 17012);
|
|
/* harmony import */ var _ant_design_icons_es_icons_CloseOutlined__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ant-design/icons/es/icons/CloseOutlined */ 62208);
|
|
/* harmony import */ var _ant_design_icons_es_icons_DownOutlined__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ant-design/icons/es/icons/DownOutlined */ 13622);
|
|
/* harmony import */ var _ant_design_icons_es_icons_LoadingOutlined__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ant-design/icons/es/icons/LoadingOutlined */ 19267);
|
|
/* harmony import */ var _ant_design_icons_es_icons_SearchOutlined__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons/es/icons/SearchOutlined */ 25783);
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 67294);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getIcons(_ref) {
|
|
var suffixIcon = _ref.suffixIcon,
|
|
clearIcon = _ref.clearIcon,
|
|
menuItemSelectedIcon = _ref.menuItemSelectedIcon,
|
|
removeIcon = _ref.removeIcon,
|
|
loading = _ref.loading,
|
|
multiple = _ref.multiple,
|
|
hasFeedback = _ref.hasFeedback,
|
|
prefixCls = _ref.prefixCls,
|
|
showArrow = _ref.showArrow,
|
|
feedbackIcon = _ref.feedbackIcon;
|
|
// Clear Icon
|
|
var mergedClearIcon = clearIcon !== null && clearIcon !== void 0 ? clearIcon : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ant_design_icons_es_icons_CloseCircleFilled__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, null);
|
|
// Validation Feedback Icon
|
|
var getSuffixIconNode = function getSuffixIconNode(arrowIcon) {
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, showArrow !== false && arrowIcon, hasFeedback && feedbackIcon);
|
|
};
|
|
// Arrow item icon
|
|
var mergedSuffixIcon = null;
|
|
if (suffixIcon !== undefined) {
|
|
mergedSuffixIcon = getSuffixIconNode(suffixIcon);
|
|
} else if (loading) {
|
|
mergedSuffixIcon = getSuffixIconNode( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ant_design_icons_es_icons_LoadingOutlined__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
|
|
spin: true
|
|
}));
|
|
} else {
|
|
var iconCls = "".concat(prefixCls, "-suffix");
|
|
mergedSuffixIcon = function mergedSuffixIcon(_ref2) {
|
|
var open = _ref2.open,
|
|
showSearch = _ref2.showSearch;
|
|
if (open && showSearch) {
|
|
return getSuffixIconNode( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ant_design_icons_es_icons_SearchOutlined__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
|
|
className: iconCls
|
|
}));
|
|
}
|
|
return getSuffixIconNode( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ant_design_icons_es_icons_DownOutlined__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
|
|
className: iconCls
|
|
}));
|
|
};
|
|
}
|
|
// Checked item icon
|
|
var mergedItemIcon = null;
|
|
if (menuItemSelectedIcon !== undefined) {
|
|
mergedItemIcon = menuItemSelectedIcon;
|
|
} else if (multiple) {
|
|
mergedItemIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ant_design_icons_es_icons_CheckOutlined__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z, null);
|
|
} else {
|
|
mergedItemIcon = null;
|
|
}
|
|
var mergedRemoveIcon = null;
|
|
if (removeIcon !== undefined) {
|
|
mergedRemoveIcon = removeIcon;
|
|
} else {
|
|
mergedRemoveIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ant_design_icons_es_icons_CloseOutlined__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, null);
|
|
}
|
|
return {
|
|
clearIcon: mergedClearIcon,
|
|
suffixIcon: mergedSuffixIcon,
|
|
itemIcon: mergedItemIcon,
|
|
removeIcon: mergedRemoveIcon
|
|
};
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 64894:
|
|
/*!************************************************************************************!*\
|
|
!*** ./node_modules/antd/node_modules/@ant-design/icons/es/icons/CheckOutlined.js ***!
|
|
\************************************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ 1413);
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 67294);
|
|
/* harmony import */ var _ant_design_icons_svg_es_asn_CheckOutlined__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons-svg/es/asn/CheckOutlined */ 32857);
|
|
/* harmony import */ var _components_AntdIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/AntdIcon */ 93771);
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
|
|
|
|
|
var CheckOutlined = function CheckOutlined(props, ref) {
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_AntdIcon__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({}, props), {}, {
|
|
ref: ref,
|
|
icon: _ant_design_icons_svg_es_asn_CheckOutlined__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z
|
|
}));
|
|
};
|
|
CheckOutlined.displayName = 'CheckOutlined';
|
|
/* harmony default export */ __webpack_exports__["Z"] = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(CheckOutlined));
|
|
|
|
/***/ }),
|
|
|
|
/***/ 13622:
|
|
/*!***********************************************************************************!*\
|
|
!*** ./node_modules/antd/node_modules/@ant-design/icons/es/icons/DownOutlined.js ***!
|
|
\***********************************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ 1413);
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 67294);
|
|
/* harmony import */ var _ant_design_icons_svg_es_asn_DownOutlined__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons-svg/es/asn/DownOutlined */ 66023);
|
|
/* harmony import */ var _components_AntdIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/AntdIcon */ 93771);
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
|
|
|
|
|
var DownOutlined = function DownOutlined(props, ref) {
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_AntdIcon__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({}, props), {}, {
|
|
ref: ref,
|
|
icon: _ant_design_icons_svg_es_asn_DownOutlined__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z
|
|
}));
|
|
};
|
|
DownOutlined.displayName = 'DownOutlined';
|
|
/* harmony default export */ __webpack_exports__["Z"] = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(DownOutlined));
|
|
|
|
/***/ }),
|
|
|
|
/***/ 25783:
|
|
/*!*************************************************************************************!*\
|
|
!*** ./node_modules/antd/node_modules/@ant-design/icons/es/icons/SearchOutlined.js ***!
|
|
\*************************************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ 1413);
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 67294);
|
|
/* harmony import */ var _ant_design_icons_svg_es_asn_SearchOutlined__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons-svg/es/asn/SearchOutlined */ 509);
|
|
/* harmony import */ var _components_AntdIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/AntdIcon */ 93771);
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
|
|
|
|
|
var SearchOutlined = function SearchOutlined(props, ref) {
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_AntdIcon__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({}, props), {}, {
|
|
ref: ref,
|
|
icon: _ant_design_icons_svg_es_asn_SearchOutlined__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z
|
|
}));
|
|
};
|
|
SearchOutlined.displayName = 'SearchOutlined';
|
|
/* harmony default export */ __webpack_exports__["Z"] = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(SearchOutlined));
|
|
|
|
/***/ }),
|
|
|
|
/***/ 34243:
|
|
/*!**********************************************************!*\
|
|
!*** ./node_modules/rc-overflow/es/index.js + 4 modules ***!
|
|
\**********************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
|
|
// EXPORTS
|
|
__webpack_require__.d(__webpack_exports__, {
|
|
"Z": function() { return /* binding */ rc_overflow_es; }
|
|
});
|
|
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
|
|
var esm_extends = __webpack_require__(87462);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js
|
|
var objectSpread2 = __webpack_require__(1413);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 1 modules
|
|
var slicedToArray = __webpack_require__(97685);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
|
|
var objectWithoutProperties = __webpack_require__(45987);
|
|
// EXTERNAL MODULE: ./node_modules/react/index.js
|
|
var react = __webpack_require__(67294);
|
|
// EXTERNAL MODULE: ./node_modules/classnames/index.js
|
|
var classnames = __webpack_require__(94184);
|
|
var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
|
// EXTERNAL MODULE: ./node_modules/rc-resize-observer/es/index.js + 4 modules
|
|
var es = __webpack_require__(48555);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/hooks/useLayoutEffect.js
|
|
var useLayoutEffect = __webpack_require__(8410);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-overflow/es/Item.js
|
|
|
|
|
|
|
|
var _excluded = ["prefixCls", "invalidate", "item", "renderItem", "responsive", "responsiveDisabled", "registerSize", "itemKey", "className", "style", "children", "display", "order", "component"];
|
|
|
|
|
|
// Use shared variable to save bundle size
|
|
|
|
var UNDEFINED = undefined;
|
|
|
|
function InternalItem(props, ref) {
|
|
var prefixCls = props.prefixCls,
|
|
invalidate = props.invalidate,
|
|
item = props.item,
|
|
renderItem = props.renderItem,
|
|
responsive = props.responsive,
|
|
responsiveDisabled = props.responsiveDisabled,
|
|
registerSize = props.registerSize,
|
|
itemKey = props.itemKey,
|
|
className = props.className,
|
|
style = props.style,
|
|
children = props.children,
|
|
display = props.display,
|
|
order = props.order,
|
|
_props$component = props.component,
|
|
Component = _props$component === void 0 ? 'div' : _props$component,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(props, _excluded);
|
|
|
|
var mergedHidden = responsive && !display; // ================================ Effect ================================
|
|
|
|
function internalRegisterSize(width) {
|
|
registerSize(itemKey, width);
|
|
}
|
|
|
|
react.useEffect(function () {
|
|
return function () {
|
|
internalRegisterSize(null);
|
|
};
|
|
}, []); // ================================ Render ================================
|
|
|
|
var childNode = renderItem && item !== UNDEFINED ? renderItem(item) : children;
|
|
var overflowStyle;
|
|
|
|
if (!invalidate) {
|
|
overflowStyle = {
|
|
opacity: mergedHidden ? 0 : 1,
|
|
height: mergedHidden ? 0 : UNDEFINED,
|
|
overflowY: mergedHidden ? 'hidden' : UNDEFINED,
|
|
order: responsive ? order : UNDEFINED,
|
|
pointerEvents: mergedHidden ? 'none' : UNDEFINED,
|
|
position: mergedHidden ? 'absolute' : UNDEFINED
|
|
};
|
|
}
|
|
|
|
var overflowProps = {};
|
|
|
|
if (mergedHidden) {
|
|
overflowProps['aria-hidden'] = true;
|
|
}
|
|
|
|
var itemNode = /*#__PURE__*/react.createElement(Component, (0,esm_extends/* default */.Z)({
|
|
className: classnames_default()(!invalidate && prefixCls, className),
|
|
style: (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, overflowStyle), style)
|
|
}, overflowProps, restProps, {
|
|
ref: ref
|
|
}), childNode);
|
|
|
|
if (responsive) {
|
|
itemNode = /*#__PURE__*/react.createElement(es/* default */.Z, {
|
|
onResize: function onResize(_ref) {
|
|
var offsetWidth = _ref.offsetWidth;
|
|
internalRegisterSize(offsetWidth);
|
|
},
|
|
disabled: responsiveDisabled
|
|
}, itemNode);
|
|
}
|
|
|
|
return itemNode;
|
|
}
|
|
|
|
var Item = /*#__PURE__*/react.forwardRef(InternalItem);
|
|
Item.displayName = 'Item';
|
|
/* harmony default export */ var es_Item = (Item);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/raf.js
|
|
var raf = __webpack_require__(75164);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/hooks/useState.js
|
|
var useState = __webpack_require__(30470);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-overflow/es/hooks/useBatchFrameState.js
|
|
|
|
|
|
|
|
|
|
/**
|
|
* State generate. Return a `setState` but it will flush all state with one render to save perf.
|
|
* This is not a realization of `unstable_batchedUpdates`.
|
|
*/
|
|
|
|
function useBatchFrameState() {
|
|
var _useState = (0,useState/* default */.Z)({}),
|
|
_useState2 = (0,slicedToArray/* default */.Z)(_useState, 2),
|
|
forceUpdate = _useState2[1];
|
|
|
|
var statesRef = (0,react.useRef)([]);
|
|
var walkingIndex = 0;
|
|
var beforeFrameId = 0;
|
|
|
|
function createState(defaultValue) {
|
|
var myIndex = walkingIndex;
|
|
walkingIndex += 1; // Fill value if not exist yet
|
|
|
|
if (statesRef.current.length < myIndex + 1) {
|
|
statesRef.current[myIndex] = defaultValue;
|
|
} // Return filled as `setState`
|
|
|
|
|
|
var value = statesRef.current[myIndex];
|
|
|
|
function setValue(val) {
|
|
statesRef.current[myIndex] = typeof val === 'function' ? val(statesRef.current[myIndex]) : val;
|
|
raf/* default.cancel */.Z.cancel(beforeFrameId); // Flush with batch
|
|
|
|
beforeFrameId = (0,raf/* default */.Z)(function () {
|
|
forceUpdate({}, true);
|
|
});
|
|
}
|
|
|
|
return [value, setValue];
|
|
}
|
|
|
|
return createState;
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-overflow/es/RawItem.js
|
|
|
|
|
|
var RawItem_excluded = ["component"],
|
|
_excluded2 = ["className"],
|
|
_excluded3 = ["className"];
|
|
|
|
|
|
|
|
|
|
|
|
var InternalRawItem = function InternalRawItem(props, ref) {
|
|
var context = react.useContext(OverflowContext); // Render directly when context not provided
|
|
|
|
if (!context) {
|
|
var _props$component = props.component,
|
|
Component = _props$component === void 0 ? 'div' : _props$component,
|
|
_restProps = (0,objectWithoutProperties/* default */.Z)(props, RawItem_excluded);
|
|
|
|
return /*#__PURE__*/react.createElement(Component, (0,esm_extends/* default */.Z)({}, _restProps, {
|
|
ref: ref
|
|
}));
|
|
}
|
|
|
|
var contextClassName = context.className,
|
|
restContext = (0,objectWithoutProperties/* default */.Z)(context, _excluded2);
|
|
|
|
var className = props.className,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(props, _excluded3); // Do not pass context to sub item to avoid multiple measure
|
|
|
|
|
|
return /*#__PURE__*/react.createElement(OverflowContext.Provider, {
|
|
value: null
|
|
}, /*#__PURE__*/react.createElement(es_Item, (0,esm_extends/* default */.Z)({
|
|
ref: ref,
|
|
className: classnames_default()(contextClassName, className)
|
|
}, restContext, restProps)));
|
|
};
|
|
|
|
var RawItem = /*#__PURE__*/react.forwardRef(InternalRawItem);
|
|
RawItem.displayName = 'RawItem';
|
|
/* harmony default export */ var es_RawItem = (RawItem);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-overflow/es/Overflow.js
|
|
|
|
|
|
|
|
|
|
var Overflow_excluded = ["prefixCls", "data", "renderItem", "renderRawItem", "itemKey", "itemWidth", "ssr", "style", "className", "maxCount", "renderRest", "renderRawRest", "suffix", "component", "itemComponent", "onVisibleChange"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var OverflowContext = /*#__PURE__*/react.createContext(null);
|
|
var RESPONSIVE = 'responsive';
|
|
var INVALIDATE = 'invalidate';
|
|
|
|
function defaultRenderRest(omittedItems) {
|
|
return "+ ".concat(omittedItems.length, " ...");
|
|
}
|
|
|
|
function Overflow(props, ref) {
|
|
var _props$prefixCls = props.prefixCls,
|
|
prefixCls = _props$prefixCls === void 0 ? 'rc-overflow' : _props$prefixCls,
|
|
_props$data = props.data,
|
|
data = _props$data === void 0 ? [] : _props$data,
|
|
renderItem = props.renderItem,
|
|
renderRawItem = props.renderRawItem,
|
|
itemKey = props.itemKey,
|
|
_props$itemWidth = props.itemWidth,
|
|
itemWidth = _props$itemWidth === void 0 ? 10 : _props$itemWidth,
|
|
ssr = props.ssr,
|
|
style = props.style,
|
|
className = props.className,
|
|
maxCount = props.maxCount,
|
|
renderRest = props.renderRest,
|
|
renderRawRest = props.renderRawRest,
|
|
suffix = props.suffix,
|
|
_props$component = props.component,
|
|
Component = _props$component === void 0 ? 'div' : _props$component,
|
|
itemComponent = props.itemComponent,
|
|
onVisibleChange = props.onVisibleChange,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(props, Overflow_excluded);
|
|
|
|
var createUseState = useBatchFrameState();
|
|
var fullySSR = ssr === 'full';
|
|
|
|
var _createUseState = createUseState(null),
|
|
_createUseState2 = (0,slicedToArray/* default */.Z)(_createUseState, 2),
|
|
containerWidth = _createUseState2[0],
|
|
setContainerWidth = _createUseState2[1];
|
|
|
|
var mergedContainerWidth = containerWidth || 0;
|
|
|
|
var _createUseState3 = createUseState(new Map()),
|
|
_createUseState4 = (0,slicedToArray/* default */.Z)(_createUseState3, 2),
|
|
itemWidths = _createUseState4[0],
|
|
setItemWidths = _createUseState4[1];
|
|
|
|
var _createUseState5 = createUseState(0),
|
|
_createUseState6 = (0,slicedToArray/* default */.Z)(_createUseState5, 2),
|
|
prevRestWidth = _createUseState6[0],
|
|
setPrevRestWidth = _createUseState6[1];
|
|
|
|
var _createUseState7 = createUseState(0),
|
|
_createUseState8 = (0,slicedToArray/* default */.Z)(_createUseState7, 2),
|
|
restWidth = _createUseState8[0],
|
|
setRestWidth = _createUseState8[1];
|
|
|
|
var _createUseState9 = createUseState(0),
|
|
_createUseState10 = (0,slicedToArray/* default */.Z)(_createUseState9, 2),
|
|
suffixWidth = _createUseState10[0],
|
|
setSuffixWidth = _createUseState10[1];
|
|
|
|
var _useState = (0,react.useState)(null),
|
|
_useState2 = (0,slicedToArray/* default */.Z)(_useState, 2),
|
|
suffixFixedStart = _useState2[0],
|
|
setSuffixFixedStart = _useState2[1];
|
|
|
|
var _useState3 = (0,react.useState)(null),
|
|
_useState4 = (0,slicedToArray/* default */.Z)(_useState3, 2),
|
|
displayCount = _useState4[0],
|
|
setDisplayCount = _useState4[1];
|
|
|
|
var mergedDisplayCount = react.useMemo(function () {
|
|
if (displayCount === null && fullySSR) {
|
|
return Number.MAX_SAFE_INTEGER;
|
|
}
|
|
|
|
return displayCount || 0;
|
|
}, [displayCount, containerWidth]);
|
|
|
|
var _useState5 = (0,react.useState)(false),
|
|
_useState6 = (0,slicedToArray/* default */.Z)(_useState5, 2),
|
|
restReady = _useState6[0],
|
|
setRestReady = _useState6[1];
|
|
|
|
var itemPrefixCls = "".concat(prefixCls, "-item"); // Always use the max width to avoid blink
|
|
|
|
var mergedRestWidth = Math.max(prevRestWidth, restWidth); // ================================= Data =================================
|
|
|
|
var isResponsive = maxCount === RESPONSIVE;
|
|
var shouldResponsive = data.length && isResponsive;
|
|
var invalidate = maxCount === INVALIDATE;
|
|
/**
|
|
* When is `responsive`, we will always render rest node to get the real width of it for calculation
|
|
*/
|
|
|
|
var showRest = shouldResponsive || typeof maxCount === 'number' && data.length > maxCount;
|
|
var mergedData = (0,react.useMemo)(function () {
|
|
var items = data;
|
|
|
|
if (shouldResponsive) {
|
|
if (containerWidth === null && fullySSR) {
|
|
items = data;
|
|
} else {
|
|
items = data.slice(0, Math.min(data.length, mergedContainerWidth / itemWidth));
|
|
}
|
|
} else if (typeof maxCount === 'number') {
|
|
items = data.slice(0, maxCount);
|
|
}
|
|
|
|
return items;
|
|
}, [data, itemWidth, containerWidth, maxCount, shouldResponsive]);
|
|
var omittedItems = (0,react.useMemo)(function () {
|
|
if (shouldResponsive) {
|
|
return data.slice(mergedDisplayCount + 1);
|
|
}
|
|
|
|
return data.slice(mergedData.length);
|
|
}, [data, mergedData, shouldResponsive, mergedDisplayCount]); // ================================= Item =================================
|
|
|
|
var getKey = (0,react.useCallback)(function (item, index) {
|
|
var _ref;
|
|
|
|
if (typeof itemKey === 'function') {
|
|
return itemKey(item);
|
|
}
|
|
|
|
return (_ref = itemKey && (item === null || item === void 0 ? void 0 : item[itemKey])) !== null && _ref !== void 0 ? _ref : index;
|
|
}, [itemKey]);
|
|
var mergedRenderItem = (0,react.useCallback)(renderItem || function (item) {
|
|
return item;
|
|
}, [renderItem]);
|
|
|
|
function updateDisplayCount(count, suffixFixedStartVal, notReady) {
|
|
// React 18 will sync render even when the value is same in some case.
|
|
// We take `mergedData` as deps which may cause dead loop if it's dynamic generate.
|
|
// ref: https://github.com/ant-design/ant-design/issues/36559
|
|
if (displayCount === count && (suffixFixedStartVal === undefined || suffixFixedStartVal === suffixFixedStart)) {
|
|
return;
|
|
}
|
|
|
|
setDisplayCount(count);
|
|
|
|
if (!notReady) {
|
|
setRestReady(count < data.length - 1);
|
|
onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(count);
|
|
}
|
|
|
|
if (suffixFixedStartVal !== undefined) {
|
|
setSuffixFixedStart(suffixFixedStartVal);
|
|
}
|
|
} // ================================= Size =================================
|
|
|
|
|
|
function onOverflowResize(_, element) {
|
|
setContainerWidth(element.clientWidth);
|
|
}
|
|
|
|
function registerSize(key, width) {
|
|
setItemWidths(function (origin) {
|
|
var clone = new Map(origin);
|
|
|
|
if (width === null) {
|
|
clone.delete(key);
|
|
} else {
|
|
clone.set(key, width);
|
|
}
|
|
|
|
return clone;
|
|
});
|
|
}
|
|
|
|
function registerOverflowSize(_, width) {
|
|
setRestWidth(width);
|
|
setPrevRestWidth(restWidth);
|
|
}
|
|
|
|
function registerSuffixSize(_, width) {
|
|
setSuffixWidth(width);
|
|
} // ================================ Effect ================================
|
|
|
|
|
|
function getItemWidth(index) {
|
|
return itemWidths.get(getKey(mergedData[index], index));
|
|
}
|
|
|
|
(0,useLayoutEffect/* default */.Z)(function () {
|
|
if (mergedContainerWidth && mergedRestWidth && mergedData) {
|
|
var totalWidth = suffixWidth;
|
|
var len = mergedData.length;
|
|
var lastIndex = len - 1; // When data count change to 0, reset this since not loop will reach
|
|
|
|
if (!len) {
|
|
updateDisplayCount(0, null);
|
|
return;
|
|
}
|
|
|
|
for (var i = 0; i < len; i += 1) {
|
|
var currentItemWidth = getItemWidth(i); // Fully will always render
|
|
|
|
if (fullySSR) {
|
|
currentItemWidth = currentItemWidth || 0;
|
|
} // Break since data not ready
|
|
|
|
|
|
if (currentItemWidth === undefined) {
|
|
updateDisplayCount(i - 1, undefined, true);
|
|
break;
|
|
} // Find best match
|
|
|
|
|
|
totalWidth += currentItemWidth;
|
|
|
|
if ( // Only one means `totalWidth` is the final width
|
|
lastIndex === 0 && totalWidth <= mergedContainerWidth || // Last two width will be the final width
|
|
i === lastIndex - 1 && totalWidth + getItemWidth(lastIndex) <= mergedContainerWidth) {
|
|
// Additional check if match the end
|
|
updateDisplayCount(lastIndex, null);
|
|
break;
|
|
} else if (totalWidth + mergedRestWidth > mergedContainerWidth) {
|
|
// Can not hold all the content to show rest
|
|
updateDisplayCount(i - 1, totalWidth - currentItemWidth - suffixWidth + restWidth);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (suffix && getItemWidth(0) + suffixWidth > mergedContainerWidth) {
|
|
setSuffixFixedStart(null);
|
|
}
|
|
}
|
|
}, [mergedContainerWidth, itemWidths, restWidth, suffixWidth, getKey, mergedData]); // ================================ Render ================================
|
|
|
|
var displayRest = restReady && !!omittedItems.length;
|
|
var suffixStyle = {};
|
|
|
|
if (suffixFixedStart !== null && shouldResponsive) {
|
|
suffixStyle = {
|
|
position: 'absolute',
|
|
left: suffixFixedStart,
|
|
top: 0
|
|
};
|
|
}
|
|
|
|
var itemSharedProps = {
|
|
prefixCls: itemPrefixCls,
|
|
responsive: shouldResponsive,
|
|
component: itemComponent,
|
|
invalidate: invalidate
|
|
}; // >>>>> Choice render fun by `renderRawItem`
|
|
|
|
var internalRenderItemNode = renderRawItem ? function (item, index) {
|
|
var key = getKey(item, index);
|
|
return /*#__PURE__*/react.createElement(OverflowContext.Provider, {
|
|
key: key,
|
|
value: (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, itemSharedProps), {}, {
|
|
order: index,
|
|
item: item,
|
|
itemKey: key,
|
|
registerSize: registerSize,
|
|
display: index <= mergedDisplayCount
|
|
})
|
|
}, renderRawItem(item, index));
|
|
} : function (item, index) {
|
|
var key = getKey(item, index);
|
|
return /*#__PURE__*/react.createElement(es_Item, (0,esm_extends/* default */.Z)({}, itemSharedProps, {
|
|
order: index,
|
|
key: key,
|
|
item: item,
|
|
renderItem: mergedRenderItem,
|
|
itemKey: key,
|
|
registerSize: registerSize,
|
|
display: index <= mergedDisplayCount
|
|
}));
|
|
}; // >>>>> Rest node
|
|
|
|
var restNode;
|
|
var restContextProps = {
|
|
order: displayRest ? mergedDisplayCount : Number.MAX_SAFE_INTEGER,
|
|
className: "".concat(itemPrefixCls, "-rest"),
|
|
registerSize: registerOverflowSize,
|
|
display: displayRest
|
|
};
|
|
|
|
if (!renderRawRest) {
|
|
var mergedRenderRest = renderRest || defaultRenderRest;
|
|
restNode = /*#__PURE__*/react.createElement(es_Item, (0,esm_extends/* default */.Z)({}, itemSharedProps, restContextProps), typeof mergedRenderRest === 'function' ? mergedRenderRest(omittedItems) : mergedRenderRest);
|
|
} else if (renderRawRest) {
|
|
restNode = /*#__PURE__*/react.createElement(OverflowContext.Provider, {
|
|
value: (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, itemSharedProps), restContextProps)
|
|
}, renderRawRest(omittedItems));
|
|
}
|
|
|
|
var overflowNode = /*#__PURE__*/react.createElement(Component, (0,esm_extends/* default */.Z)({
|
|
className: classnames_default()(!invalidate && prefixCls, className),
|
|
style: style,
|
|
ref: ref
|
|
}, restProps), mergedData.map(internalRenderItemNode), showRest ? restNode : null, suffix && /*#__PURE__*/react.createElement(es_Item, (0,esm_extends/* default */.Z)({}, itemSharedProps, {
|
|
responsive: isResponsive,
|
|
responsiveDisabled: !shouldResponsive,
|
|
order: mergedDisplayCount,
|
|
className: "".concat(itemPrefixCls, "-suffix"),
|
|
registerSize: registerSuffixSize,
|
|
display: true,
|
|
style: suffixStyle
|
|
}), suffix));
|
|
|
|
if (isResponsive) {
|
|
overflowNode = /*#__PURE__*/react.createElement(es/* default */.Z, {
|
|
onResize: onOverflowResize,
|
|
disabled: !shouldResponsive
|
|
}, overflowNode);
|
|
}
|
|
|
|
return overflowNode;
|
|
}
|
|
|
|
var ForwardOverflow = /*#__PURE__*/react.forwardRef(Overflow);
|
|
ForwardOverflow.displayName = 'Overflow';
|
|
ForwardOverflow.Item = es_RawItem;
|
|
ForwardOverflow.RESPONSIVE = RESPONSIVE;
|
|
ForwardOverflow.INVALIDATE = INVALIDATE; // Convert to generic type
|
|
|
|
/* harmony default export */ var es_Overflow = (ForwardOverflow);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-overflow/es/index.js
|
|
|
|
/* harmony default export */ var rc_overflow_es = (es_Overflow);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 88708:
|
|
/*!**************************************************!*\
|
|
!*** ./node_modules/rc-select/es/hooks/useId.js ***!
|
|
\**************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "ZP": function() { return /* binding */ useId; }
|
|
/* harmony export */ });
|
|
/* unused harmony exports isBrowserClient, getUUID */
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ 97685);
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 67294);
|
|
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ 98924);
|
|
|
|
|
|
|
|
var uuid = 0;
|
|
/** Is client side and not jsdom */
|
|
|
|
var isBrowserClient = true && (0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)();
|
|
/** Get unique id for accessibility usage */
|
|
|
|
function getUUID() {
|
|
var retId; // Test never reach
|
|
|
|
/* istanbul ignore if */
|
|
|
|
if (isBrowserClient) {
|
|
retId = uuid;
|
|
uuid += 1;
|
|
} else {
|
|
retId = 'TEST_OR_SSR';
|
|
}
|
|
|
|
return retId;
|
|
}
|
|
function useId(id) {
|
|
// Inner id for accessibility usage. Only work in client side
|
|
var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__.useState(),
|
|
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(_React$useState, 2),
|
|
innerId = _React$useState2[0],
|
|
setInnerId = _React$useState2[1];
|
|
|
|
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {
|
|
setInnerId("rc_select_".concat(getUUID()));
|
|
}, []);
|
|
return id || innerId;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7752:
|
|
/*!*********************************************************!*\
|
|
!*** ./node_modules/rc-select/es/index.js + 27 modules ***!
|
|
\*********************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
|
|
// EXPORTS
|
|
__webpack_require__.d(__webpack_exports__, {
|
|
"Ac": function() { return /* reexport */ es_BaseSelect; },
|
|
"Xo": function() { return /* reexport */ es_OptGroup; },
|
|
"Wx": function() { return /* reexport */ es_Option; },
|
|
"ZP": function() { return /* binding */ rc_select_es; },
|
|
"lk": function() { return /* reexport */ useBaseProps; }
|
|
});
|
|
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
|
|
var esm_extends = __webpack_require__(87462);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules
|
|
var toConsumableArray = __webpack_require__(74902);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
|
var defineProperty = __webpack_require__(4942);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js
|
|
var objectSpread2 = __webpack_require__(1413);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 1 modules
|
|
var slicedToArray = __webpack_require__(97685);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
|
|
var objectWithoutProperties = __webpack_require__(45987);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js
|
|
var esm_typeof = __webpack_require__(71002);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/hooks/useMergedState.js
|
|
var useMergedState = __webpack_require__(21770);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/warning.js
|
|
var es_warning = __webpack_require__(80334);
|
|
// EXTERNAL MODULE: ./node_modules/react/index.js
|
|
var react = __webpack_require__(67294);
|
|
// EXTERNAL MODULE: ./node_modules/classnames/index.js
|
|
var classnames = __webpack_require__(94184);
|
|
var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/hooks/useLayoutEffect.js
|
|
var useLayoutEffect = __webpack_require__(8410);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/isMobile.js
|
|
var isMobile = __webpack_require__(53334);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/KeyCode.js
|
|
var KeyCode = __webpack_require__(15105);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/ref.js
|
|
var es_ref = __webpack_require__(42550);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useBaseProps.js
|
|
/**
|
|
* BaseSelect provide some parsed data into context.
|
|
* You can use this hooks to get them.
|
|
*/
|
|
|
|
var BaseSelectContext = /*#__PURE__*/react.createContext(null);
|
|
function useBaseProps() {
|
|
return react.useContext(BaseSelectContext);
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useDelayReset.js
|
|
|
|
|
|
/**
|
|
* Similar with `useLock`, but this hook will always execute last value.
|
|
* When set to `true`, it will keep `true` for a short time even if `false` is set.
|
|
*/
|
|
|
|
function useDelayReset() {
|
|
var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
|
|
var _React$useState = react.useState(false),
|
|
_React$useState2 = (0,slicedToArray/* default */.Z)(_React$useState, 2),
|
|
bool = _React$useState2[0],
|
|
setBool = _React$useState2[1];
|
|
|
|
var delayRef = react.useRef(null);
|
|
|
|
var cancelLatest = function cancelLatest() {
|
|
window.clearTimeout(delayRef.current);
|
|
};
|
|
|
|
react.useEffect(function () {
|
|
return cancelLatest;
|
|
}, []);
|
|
|
|
var delaySetBool = function delaySetBool(value, callback) {
|
|
cancelLatest();
|
|
delayRef.current = window.setTimeout(function () {
|
|
setBool(value);
|
|
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
}, timeout);
|
|
};
|
|
|
|
return [bool, delaySetBool, cancelLatest];
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useLock.js
|
|
|
|
/**
|
|
* Locker return cached mark.
|
|
* If set to `true`, will return `true` in a short time even if set `false`.
|
|
* If set to `false` and then set to `true`, will change to `true`.
|
|
* And after time duration, it will back to `null` automatically.
|
|
*/
|
|
|
|
function useLock() {
|
|
var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 250;
|
|
var lockRef = react.useRef(null);
|
|
var timeoutRef = react.useRef(null); // Clean up
|
|
|
|
react.useEffect(function () {
|
|
return function () {
|
|
window.clearTimeout(timeoutRef.current);
|
|
};
|
|
}, []);
|
|
|
|
function doLock(locked) {
|
|
if (locked || lockRef.current === null) {
|
|
lockRef.current = locked;
|
|
}
|
|
|
|
window.clearTimeout(timeoutRef.current);
|
|
timeoutRef.current = window.setTimeout(function () {
|
|
lockRef.current = null;
|
|
}, duration);
|
|
}
|
|
|
|
return [function () {
|
|
return lockRef.current;
|
|
}, doLock];
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useSelectTriggerControl.js
|
|
|
|
function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger) {
|
|
var propsRef = react.useRef(null);
|
|
propsRef.current = {
|
|
open: open,
|
|
triggerOpen: triggerOpen,
|
|
customizedTrigger: customizedTrigger
|
|
};
|
|
react.useEffect(function () {
|
|
function onGlobalMouseDown(event) {
|
|
var _propsRef$current;
|
|
|
|
// If trigger is customized, Trigger will take control of popupVisible
|
|
if ((_propsRef$current = propsRef.current) !== null && _propsRef$current !== void 0 && _propsRef$current.customizedTrigger) {
|
|
return;
|
|
}
|
|
|
|
var target = event.target;
|
|
|
|
if (target.shadowRoot && event.composed) {
|
|
target = event.composedPath()[0] || target;
|
|
}
|
|
|
|
if (propsRef.current.open && elements().filter(function (element) {
|
|
return element;
|
|
}).every(function (element) {
|
|
return !element.contains(target) && element !== target;
|
|
})) {
|
|
// Should trigger close
|
|
propsRef.current.triggerOpen(false);
|
|
}
|
|
}
|
|
|
|
window.addEventListener('mousedown', onGlobalMouseDown);
|
|
return function () {
|
|
return window.removeEventListener('mousedown', onGlobalMouseDown);
|
|
};
|
|
}, []);
|
|
}
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/pickAttrs.js
|
|
var pickAttrs = __webpack_require__(64217);
|
|
// EXTERNAL MODULE: ./node_modules/rc-overflow/es/index.js + 4 modules
|
|
var es = __webpack_require__(34243);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/TransBtn.js
|
|
|
|
|
|
|
|
var TransBtn = function TransBtn(_ref) {
|
|
var className = _ref.className,
|
|
customizeIcon = _ref.customizeIcon,
|
|
customizeIconProps = _ref.customizeIconProps,
|
|
_onMouseDown = _ref.onMouseDown,
|
|
onClick = _ref.onClick,
|
|
children = _ref.children;
|
|
var icon;
|
|
|
|
if (typeof customizeIcon === 'function') {
|
|
icon = customizeIcon(customizeIconProps);
|
|
} else {
|
|
icon = customizeIcon;
|
|
}
|
|
|
|
return /*#__PURE__*/react.createElement("span", {
|
|
className: className,
|
|
onMouseDown: function onMouseDown(event) {
|
|
event.preventDefault();
|
|
|
|
if (_onMouseDown) {
|
|
_onMouseDown(event);
|
|
}
|
|
},
|
|
style: {
|
|
userSelect: 'none',
|
|
WebkitUserSelect: 'none'
|
|
},
|
|
unselectable: "on",
|
|
onClick: onClick,
|
|
"aria-hidden": true
|
|
}, icon !== undefined ? icon : /*#__PURE__*/react.createElement("span", {
|
|
className: classnames_default()(className.split(/\s+/).map(function (cls) {
|
|
return "".concat(cls, "-icon");
|
|
}))
|
|
}, children));
|
|
};
|
|
|
|
/* harmony default export */ var es_TransBtn = (TransBtn);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/Selector/Input.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var Input = function Input(_ref, ref) {
|
|
var _inputNode2, _inputNode2$props;
|
|
|
|
var prefixCls = _ref.prefixCls,
|
|
id = _ref.id,
|
|
inputElement = _ref.inputElement,
|
|
disabled = _ref.disabled,
|
|
tabIndex = _ref.tabIndex,
|
|
autoFocus = _ref.autoFocus,
|
|
autoComplete = _ref.autoComplete,
|
|
editable = _ref.editable,
|
|
activeDescendantId = _ref.activeDescendantId,
|
|
value = _ref.value,
|
|
maxLength = _ref.maxLength,
|
|
_onKeyDown = _ref.onKeyDown,
|
|
_onMouseDown = _ref.onMouseDown,
|
|
_onChange = _ref.onChange,
|
|
onPaste = _ref.onPaste,
|
|
_onCompositionStart = _ref.onCompositionStart,
|
|
_onCompositionEnd = _ref.onCompositionEnd,
|
|
open = _ref.open,
|
|
attrs = _ref.attrs;
|
|
var inputNode = inputElement || /*#__PURE__*/react.createElement("input", null);
|
|
var _inputNode = inputNode,
|
|
originRef = _inputNode.ref,
|
|
originProps = _inputNode.props;
|
|
var onOriginKeyDown = originProps.onKeyDown,
|
|
onOriginChange = originProps.onChange,
|
|
onOriginMouseDown = originProps.onMouseDown,
|
|
onOriginCompositionStart = originProps.onCompositionStart,
|
|
onOriginCompositionEnd = originProps.onCompositionEnd,
|
|
style = originProps.style;
|
|
(0,es_warning/* warning */.Kp)(!('maxLength' in inputNode.props), "Passing 'maxLength' to input element directly may not work because input in BaseSelect is controlled.");
|
|
inputNode = /*#__PURE__*/react.cloneElement(inputNode, (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({
|
|
type: 'search'
|
|
}, originProps), {}, {
|
|
// Override over origin props
|
|
id: id,
|
|
ref: (0,es_ref/* composeRef */.sQ)(ref, originRef),
|
|
disabled: disabled,
|
|
tabIndex: tabIndex,
|
|
autoComplete: autoComplete || 'off',
|
|
autoFocus: autoFocus,
|
|
className: classnames_default()("".concat(prefixCls, "-selection-search-input"), (_inputNode2 = inputNode) === null || _inputNode2 === void 0 ? void 0 : (_inputNode2$props = _inputNode2.props) === null || _inputNode2$props === void 0 ? void 0 : _inputNode2$props.className),
|
|
role: 'combobox',
|
|
'aria-expanded': open,
|
|
'aria-haspopup': 'listbox',
|
|
'aria-owns': "".concat(id, "_list"),
|
|
'aria-autocomplete': 'list',
|
|
'aria-controls': "".concat(id, "_list"),
|
|
'aria-activedescendant': activeDescendantId
|
|
}, attrs), {}, {
|
|
value: editable ? value : '',
|
|
maxLength: maxLength,
|
|
readOnly: !editable,
|
|
unselectable: !editable ? 'on' : null,
|
|
style: (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, style), {}, {
|
|
opacity: editable ? null : 0
|
|
}),
|
|
onKeyDown: function onKeyDown(event) {
|
|
_onKeyDown(event);
|
|
|
|
if (onOriginKeyDown) {
|
|
onOriginKeyDown(event);
|
|
}
|
|
},
|
|
onMouseDown: function onMouseDown(event) {
|
|
_onMouseDown(event);
|
|
|
|
if (onOriginMouseDown) {
|
|
onOriginMouseDown(event);
|
|
}
|
|
},
|
|
onChange: function onChange(event) {
|
|
_onChange(event);
|
|
|
|
if (onOriginChange) {
|
|
onOriginChange(event);
|
|
}
|
|
},
|
|
onCompositionStart: function onCompositionStart(event) {
|
|
_onCompositionStart(event);
|
|
|
|
if (onOriginCompositionStart) {
|
|
onOriginCompositionStart(event);
|
|
}
|
|
},
|
|
onCompositionEnd: function onCompositionEnd(event) {
|
|
_onCompositionEnd(event);
|
|
|
|
if (onOriginCompositionEnd) {
|
|
onOriginCompositionEnd(event);
|
|
}
|
|
},
|
|
onPaste: onPaste
|
|
}));
|
|
return inputNode;
|
|
};
|
|
|
|
var RefInput = /*#__PURE__*/react.forwardRef(Input);
|
|
RefInput.displayName = 'Input';
|
|
/* harmony default export */ var Selector_Input = (RefInput);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/utils/commonUtil.js
|
|
|
|
function commonUtil_toArray(value) {
|
|
if (Array.isArray(value)) {
|
|
return value;
|
|
}
|
|
|
|
return value !== undefined ? [value] : [];
|
|
}
|
|
var isClient = typeof window !== 'undefined' && window.document && window.document.documentElement;
|
|
/** Is client side and not jsdom */
|
|
|
|
var isBrowserClient = true && isClient;
|
|
function hasValue(value) {
|
|
return value !== undefined && value !== null;
|
|
}
|
|
|
|
function isTitleType(title) {
|
|
return ['string', 'number'].includes((0,esm_typeof/* default */.Z)(title));
|
|
}
|
|
|
|
function getTitle(item) {
|
|
var title = undefined;
|
|
|
|
if (item) {
|
|
if (isTitleType(item.title)) {
|
|
title = item.title.toString();
|
|
} else if (isTitleType(item.label)) {
|
|
title = item.label.toString();
|
|
}
|
|
}
|
|
|
|
return title;
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useLayoutEffect.js
|
|
/* eslint-disable react-hooks/rules-of-hooks */
|
|
|
|
|
|
/**
|
|
* Wrap `React.useLayoutEffect` which will not throw warning message in test env
|
|
*/
|
|
|
|
function useLayoutEffect_useLayoutEffect(effect, deps) {
|
|
// Never happen in test env
|
|
if (isBrowserClient) {
|
|
/* istanbul ignore next */
|
|
react.useLayoutEffect(effect, deps);
|
|
} else {
|
|
react.useEffect(effect, deps);
|
|
}
|
|
}
|
|
/* eslint-enable */
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/Selector/MultipleSelector.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function itemKey(value) {
|
|
var _value$key;
|
|
|
|
return (_value$key = value.key) !== null && _value$key !== void 0 ? _value$key : value.value;
|
|
}
|
|
|
|
var onPreventMouseDown = function onPreventMouseDown(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
};
|
|
|
|
var SelectSelector = function SelectSelector(props) {
|
|
var id = props.id,
|
|
prefixCls = props.prefixCls,
|
|
values = props.values,
|
|
open = props.open,
|
|
searchValue = props.searchValue,
|
|
autoClearSearchValue = props.autoClearSearchValue,
|
|
inputRef = props.inputRef,
|
|
placeholder = props.placeholder,
|
|
disabled = props.disabled,
|
|
mode = props.mode,
|
|
showSearch = props.showSearch,
|
|
autoFocus = props.autoFocus,
|
|
autoComplete = props.autoComplete,
|
|
activeDescendantId = props.activeDescendantId,
|
|
tabIndex = props.tabIndex,
|
|
removeIcon = props.removeIcon,
|
|
maxTagCount = props.maxTagCount,
|
|
maxTagTextLength = props.maxTagTextLength,
|
|
_props$maxTagPlacehol = props.maxTagPlaceholder,
|
|
maxTagPlaceholder = _props$maxTagPlacehol === void 0 ? function (omittedValues) {
|
|
return "+ ".concat(omittedValues.length, " ...");
|
|
} : _props$maxTagPlacehol,
|
|
tagRender = props.tagRender,
|
|
onToggleOpen = props.onToggleOpen,
|
|
onRemove = props.onRemove,
|
|
onInputChange = props.onInputChange,
|
|
onInputPaste = props.onInputPaste,
|
|
onInputKeyDown = props.onInputKeyDown,
|
|
onInputMouseDown = props.onInputMouseDown,
|
|
onInputCompositionStart = props.onInputCompositionStart,
|
|
onInputCompositionEnd = props.onInputCompositionEnd;
|
|
var measureRef = react.useRef(null);
|
|
|
|
var _useState = (0,react.useState)(0),
|
|
_useState2 = (0,slicedToArray/* default */.Z)(_useState, 2),
|
|
inputWidth = _useState2[0],
|
|
setInputWidth = _useState2[1];
|
|
|
|
var _useState3 = (0,react.useState)(false),
|
|
_useState4 = (0,slicedToArray/* default */.Z)(_useState3, 2),
|
|
focused = _useState4[0],
|
|
setFocused = _useState4[1];
|
|
|
|
var selectionPrefixCls = "".concat(prefixCls, "-selection"); // ===================== Search ======================
|
|
|
|
var inputValue = open || mode === "multiple" && autoClearSearchValue === false || mode === 'tags' ? searchValue : '';
|
|
var inputEditable = mode === 'tags' || mode === "multiple" && autoClearSearchValue === false || showSearch && (open || focused); // We measure width and set to the input immediately
|
|
|
|
useLayoutEffect_useLayoutEffect(function () {
|
|
setInputWidth(measureRef.current.scrollWidth);
|
|
}, [inputValue]); // ===================== Render ======================
|
|
// >>> Render Selector Node. Includes Item & Rest
|
|
|
|
function defaultRenderSelector(item, content, itemDisabled, closable, onClose) {
|
|
return /*#__PURE__*/react.createElement("span", {
|
|
className: classnames_default()("".concat(selectionPrefixCls, "-item"), (0,defineProperty/* default */.Z)({}, "".concat(selectionPrefixCls, "-item-disabled"), itemDisabled)),
|
|
title: getTitle(item)
|
|
}, /*#__PURE__*/react.createElement("span", {
|
|
className: "".concat(selectionPrefixCls, "-item-content")
|
|
}, content), closable && /*#__PURE__*/react.createElement(es_TransBtn, {
|
|
className: "".concat(selectionPrefixCls, "-item-remove"),
|
|
onMouseDown: onPreventMouseDown,
|
|
onClick: onClose,
|
|
customizeIcon: removeIcon
|
|
}, "\xD7"));
|
|
}
|
|
|
|
function customizeRenderSelector(value, content, itemDisabled, closable, onClose) {
|
|
var onMouseDown = function onMouseDown(e) {
|
|
onPreventMouseDown(e);
|
|
onToggleOpen(!open);
|
|
};
|
|
|
|
return /*#__PURE__*/react.createElement("span", {
|
|
onMouseDown: onMouseDown
|
|
}, tagRender({
|
|
label: content,
|
|
value: value,
|
|
disabled: itemDisabled,
|
|
closable: closable,
|
|
onClose: onClose
|
|
}));
|
|
}
|
|
|
|
function renderItem(valueItem) {
|
|
var itemDisabled = valueItem.disabled,
|
|
label = valueItem.label,
|
|
value = valueItem.value;
|
|
var closable = !disabled && !itemDisabled;
|
|
var displayLabel = label;
|
|
|
|
if (typeof maxTagTextLength === 'number') {
|
|
if (typeof label === 'string' || typeof label === 'number') {
|
|
var strLabel = String(displayLabel);
|
|
|
|
if (strLabel.length > maxTagTextLength) {
|
|
displayLabel = "".concat(strLabel.slice(0, maxTagTextLength), "...");
|
|
}
|
|
}
|
|
}
|
|
|
|
var onClose = function onClose(event) {
|
|
if (event) event.stopPropagation();
|
|
onRemove(valueItem);
|
|
};
|
|
|
|
return typeof tagRender === 'function' ? customizeRenderSelector(value, displayLabel, itemDisabled, closable, onClose) : defaultRenderSelector(valueItem, displayLabel, itemDisabled, closable, onClose);
|
|
}
|
|
|
|
function renderRest(omittedValues) {
|
|
var content = typeof maxTagPlaceholder === 'function' ? maxTagPlaceholder(omittedValues) : maxTagPlaceholder;
|
|
return defaultRenderSelector({
|
|
title: content
|
|
}, content, false);
|
|
} // >>> Input Node
|
|
|
|
|
|
var inputNode = /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(selectionPrefixCls, "-search"),
|
|
style: {
|
|
width: inputWidth
|
|
},
|
|
onFocus: function onFocus() {
|
|
setFocused(true);
|
|
},
|
|
onBlur: function onBlur() {
|
|
setFocused(false);
|
|
}
|
|
}, /*#__PURE__*/react.createElement(Selector_Input, {
|
|
ref: inputRef,
|
|
open: open,
|
|
prefixCls: prefixCls,
|
|
id: id,
|
|
inputElement: null,
|
|
disabled: disabled,
|
|
autoFocus: autoFocus,
|
|
autoComplete: autoComplete,
|
|
editable: inputEditable,
|
|
activeDescendantId: activeDescendantId,
|
|
value: inputValue,
|
|
onKeyDown: onInputKeyDown,
|
|
onMouseDown: onInputMouseDown,
|
|
onChange: onInputChange,
|
|
onPaste: onInputPaste,
|
|
onCompositionStart: onInputCompositionStart,
|
|
onCompositionEnd: onInputCompositionEnd,
|
|
tabIndex: tabIndex,
|
|
attrs: (0,pickAttrs/* default */.Z)(props, true)
|
|
}), /*#__PURE__*/react.createElement("span", {
|
|
ref: measureRef,
|
|
className: "".concat(selectionPrefixCls, "-search-mirror"),
|
|
"aria-hidden": true
|
|
}, inputValue, "\xA0")); // >>> Selections
|
|
|
|
var selectionNode = /*#__PURE__*/react.createElement(es/* default */.Z, {
|
|
prefixCls: "".concat(selectionPrefixCls, "-overflow"),
|
|
data: values,
|
|
renderItem: renderItem,
|
|
renderRest: renderRest,
|
|
suffix: inputNode,
|
|
itemKey: itemKey,
|
|
maxCount: maxTagCount
|
|
});
|
|
return /*#__PURE__*/react.createElement(react.Fragment, null, selectionNode, !values.length && !inputValue && /*#__PURE__*/react.createElement("span", {
|
|
className: "".concat(selectionPrefixCls, "-placeholder")
|
|
}, placeholder));
|
|
};
|
|
|
|
/* harmony default export */ var MultipleSelector = (SelectSelector);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/Selector/SingleSelector.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var SingleSelector = function SingleSelector(props) {
|
|
var inputElement = props.inputElement,
|
|
prefixCls = props.prefixCls,
|
|
id = props.id,
|
|
inputRef = props.inputRef,
|
|
disabled = props.disabled,
|
|
autoFocus = props.autoFocus,
|
|
autoComplete = props.autoComplete,
|
|
activeDescendantId = props.activeDescendantId,
|
|
mode = props.mode,
|
|
open = props.open,
|
|
values = props.values,
|
|
placeholder = props.placeholder,
|
|
tabIndex = props.tabIndex,
|
|
showSearch = props.showSearch,
|
|
searchValue = props.searchValue,
|
|
activeValue = props.activeValue,
|
|
maxLength = props.maxLength,
|
|
onInputKeyDown = props.onInputKeyDown,
|
|
onInputMouseDown = props.onInputMouseDown,
|
|
onInputChange = props.onInputChange,
|
|
onInputPaste = props.onInputPaste,
|
|
onInputCompositionStart = props.onInputCompositionStart,
|
|
onInputCompositionEnd = props.onInputCompositionEnd;
|
|
|
|
var _React$useState = react.useState(false),
|
|
_React$useState2 = (0,slicedToArray/* default */.Z)(_React$useState, 2),
|
|
inputChanged = _React$useState2[0],
|
|
setInputChanged = _React$useState2[1];
|
|
|
|
var combobox = mode === 'combobox';
|
|
var inputEditable = combobox || showSearch;
|
|
var item = values[0];
|
|
var inputValue = searchValue || '';
|
|
|
|
if (combobox && activeValue && !inputChanged) {
|
|
inputValue = activeValue;
|
|
}
|
|
|
|
react.useEffect(function () {
|
|
if (combobox) {
|
|
setInputChanged(false);
|
|
}
|
|
}, [combobox, activeValue]); // Not show text when closed expect combobox mode
|
|
|
|
var hasTextInput = mode !== 'combobox' && !open && !showSearch ? false : !!inputValue; // Get title
|
|
|
|
var title = getTitle(item);
|
|
|
|
var renderPlaceholder = function renderPlaceholder() {
|
|
if (item) {
|
|
return null;
|
|
}
|
|
|
|
var hiddenStyle = hasTextInput ? {
|
|
visibility: 'hidden'
|
|
} : undefined;
|
|
return /*#__PURE__*/react.createElement("span", {
|
|
className: "".concat(prefixCls, "-selection-placeholder"),
|
|
style: hiddenStyle
|
|
}, placeholder);
|
|
};
|
|
|
|
return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("span", {
|
|
className: "".concat(prefixCls, "-selection-search")
|
|
}, /*#__PURE__*/react.createElement(Selector_Input, {
|
|
ref: inputRef,
|
|
prefixCls: prefixCls,
|
|
id: id,
|
|
open: open,
|
|
inputElement: inputElement,
|
|
disabled: disabled,
|
|
autoFocus: autoFocus,
|
|
autoComplete: autoComplete,
|
|
editable: inputEditable,
|
|
activeDescendantId: activeDescendantId,
|
|
value: inputValue,
|
|
onKeyDown: onInputKeyDown,
|
|
onMouseDown: onInputMouseDown,
|
|
onChange: function onChange(e) {
|
|
setInputChanged(true);
|
|
onInputChange(e);
|
|
},
|
|
onPaste: onInputPaste,
|
|
onCompositionStart: onInputCompositionStart,
|
|
onCompositionEnd: onInputCompositionEnd,
|
|
tabIndex: tabIndex,
|
|
attrs: (0,pickAttrs/* default */.Z)(props, true),
|
|
maxLength: combobox ? maxLength : undefined
|
|
})), !combobox && item && !hasTextInput && /*#__PURE__*/react.createElement("span", {
|
|
className: "".concat(prefixCls, "-selection-item"),
|
|
title: title
|
|
}, item.label), renderPlaceholder());
|
|
};
|
|
|
|
/* harmony default export */ var Selector_SingleSelector = (SingleSelector);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/utils/keyUtil.js
|
|
|
|
/** keyCode Judgment function */
|
|
|
|
function isValidateOpenKey(currentKeyCode) {
|
|
return ![// System function button
|
|
KeyCode/* default.ESC */.Z.ESC, KeyCode/* default.SHIFT */.Z.SHIFT, KeyCode/* default.BACKSPACE */.Z.BACKSPACE, KeyCode/* default.TAB */.Z.TAB, KeyCode/* default.WIN_KEY */.Z.WIN_KEY, KeyCode/* default.ALT */.Z.ALT, KeyCode/* default.META */.Z.META, KeyCode/* default.WIN_KEY_RIGHT */.Z.WIN_KEY_RIGHT, KeyCode/* default.CTRL */.Z.CTRL, KeyCode/* default.SEMICOLON */.Z.SEMICOLON, KeyCode/* default.EQUALS */.Z.EQUALS, KeyCode/* default.CAPS_LOCK */.Z.CAPS_LOCK, KeyCode/* default.CONTEXT_MENU */.Z.CONTEXT_MENU, // F1-F12
|
|
KeyCode/* default.F1 */.Z.F1, KeyCode/* default.F2 */.Z.F2, KeyCode/* default.F3 */.Z.F3, KeyCode/* default.F4 */.Z.F4, KeyCode/* default.F5 */.Z.F5, KeyCode/* default.F6 */.Z.F6, KeyCode/* default.F7 */.Z.F7, KeyCode/* default.F8 */.Z.F8, KeyCode/* default.F9 */.Z.F9, KeyCode/* default.F10 */.Z.F10, KeyCode/* default.F11 */.Z.F11, KeyCode/* default.F12 */.Z.F12].includes(currentKeyCode);
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/Selector/index.js
|
|
|
|
|
|
|
|
/**
|
|
* Cursor rule:
|
|
* 1. Only `showSearch` enabled
|
|
* 2. Only `open` is `true`
|
|
* 3. When typing, set `open` to `true` which hit rule of 2
|
|
*
|
|
* Accessibility:
|
|
* - https://www.w3.org/TR/wai-aria-practices/examples/combobox/aria1.1pattern/listbox-combo.html
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var Selector = function Selector(props, ref) {
|
|
var inputRef = (0,react.useRef)(null);
|
|
var compositionStatusRef = (0,react.useRef)(false);
|
|
var prefixCls = props.prefixCls,
|
|
open = props.open,
|
|
mode = props.mode,
|
|
showSearch = props.showSearch,
|
|
tokenWithEnter = props.tokenWithEnter,
|
|
autoClearSearchValue = props.autoClearSearchValue,
|
|
onSearch = props.onSearch,
|
|
onSearchSubmit = props.onSearchSubmit,
|
|
onToggleOpen = props.onToggleOpen,
|
|
onInputKeyDown = props.onInputKeyDown,
|
|
domRef = props.domRef; // ======================= Ref =======================
|
|
|
|
react.useImperativeHandle(ref, function () {
|
|
return {
|
|
focus: function focus() {
|
|
inputRef.current.focus();
|
|
},
|
|
blur: function blur() {
|
|
inputRef.current.blur();
|
|
}
|
|
};
|
|
}); // ====================== Input ======================
|
|
|
|
var _useLock = useLock(0),
|
|
_useLock2 = (0,slicedToArray/* default */.Z)(_useLock, 2),
|
|
getInputMouseDown = _useLock2[0],
|
|
setInputMouseDown = _useLock2[1];
|
|
|
|
var onInternalInputKeyDown = function onInternalInputKeyDown(event) {
|
|
var which = event.which;
|
|
|
|
if (which === KeyCode/* default.UP */.Z.UP || which === KeyCode/* default.DOWN */.Z.DOWN) {
|
|
event.preventDefault();
|
|
}
|
|
|
|
if (onInputKeyDown) {
|
|
onInputKeyDown(event);
|
|
}
|
|
|
|
if (which === KeyCode/* default.ENTER */.Z.ENTER && mode === 'tags' && !compositionStatusRef.current && !open) {
|
|
// When menu isn't open, OptionList won't trigger a value change
|
|
// So when enter is pressed, the tag's input value should be emitted here to let selector know
|
|
onSearchSubmit === null || onSearchSubmit === void 0 ? void 0 : onSearchSubmit(event.target.value);
|
|
}
|
|
|
|
if (isValidateOpenKey(which)) {
|
|
onToggleOpen(true);
|
|
}
|
|
};
|
|
/**
|
|
* We can not use `findDOMNode` sine it will get warning,
|
|
* have to use timer to check if is input element.
|
|
*/
|
|
|
|
|
|
var onInternalInputMouseDown = function onInternalInputMouseDown() {
|
|
setInputMouseDown(true);
|
|
}; // When paste come, ignore next onChange
|
|
|
|
|
|
var pastedTextRef = (0,react.useRef)(null);
|
|
|
|
var triggerOnSearch = function triggerOnSearch(value) {
|
|
if (onSearch(value, true, compositionStatusRef.current) !== false) {
|
|
onToggleOpen(true);
|
|
}
|
|
};
|
|
|
|
var onInputCompositionStart = function onInputCompositionStart() {
|
|
compositionStatusRef.current = true;
|
|
};
|
|
|
|
var onInputCompositionEnd = function onInputCompositionEnd(e) {
|
|
compositionStatusRef.current = false; // Trigger search again to support `tokenSeparators` with typewriting
|
|
|
|
if (mode !== 'combobox') {
|
|
triggerOnSearch(e.target.value);
|
|
}
|
|
};
|
|
|
|
var onInputChange = function onInputChange(event) {
|
|
var value = event.target.value; // Pasted text should replace back to origin content
|
|
|
|
if (tokenWithEnter && pastedTextRef.current && /[\r\n]/.test(pastedTextRef.current)) {
|
|
// CRLF will be treated as a single space for input element
|
|
var replacedText = pastedTextRef.current.replace(/[\r\n]+$/, '').replace(/\r\n/g, ' ').replace(/[\r\n]/g, ' ');
|
|
value = value.replace(replacedText, pastedTextRef.current);
|
|
}
|
|
|
|
pastedTextRef.current = null;
|
|
triggerOnSearch(value);
|
|
};
|
|
|
|
var onInputPaste = function onInputPaste(e) {
|
|
var clipboardData = e.clipboardData;
|
|
var value = clipboardData.getData('text');
|
|
pastedTextRef.current = value;
|
|
};
|
|
|
|
var onClick = function onClick(_ref) {
|
|
var target = _ref.target;
|
|
|
|
if (target !== inputRef.current) {
|
|
// Should focus input if click the selector
|
|
var isIE = document.body.style.msTouchAction !== undefined;
|
|
|
|
if (isIE) {
|
|
setTimeout(function () {
|
|
inputRef.current.focus();
|
|
});
|
|
} else {
|
|
inputRef.current.focus();
|
|
}
|
|
}
|
|
};
|
|
|
|
var onMouseDown = function onMouseDown(event) {
|
|
var inputMouseDown = getInputMouseDown(); // when mode is combobox, don't prevent default behavior
|
|
// https://github.com/ant-design/ant-design/issues/37320
|
|
|
|
if (event.target !== inputRef.current && !inputMouseDown && mode !== 'combobox') {
|
|
event.preventDefault();
|
|
}
|
|
|
|
if (mode !== 'combobox' && (!showSearch || !inputMouseDown) || !open) {
|
|
if (open && autoClearSearchValue !== false) {
|
|
onSearch('', true, false);
|
|
}
|
|
|
|
onToggleOpen();
|
|
}
|
|
}; // ================= Inner Selector ==================
|
|
|
|
|
|
var sharedProps = {
|
|
inputRef: inputRef,
|
|
onInputKeyDown: onInternalInputKeyDown,
|
|
onInputMouseDown: onInternalInputMouseDown,
|
|
onInputChange: onInputChange,
|
|
onInputPaste: onInputPaste,
|
|
onInputCompositionStart: onInputCompositionStart,
|
|
onInputCompositionEnd: onInputCompositionEnd
|
|
};
|
|
var selectNode = mode === 'multiple' || mode === 'tags' ? /*#__PURE__*/react.createElement(MultipleSelector, (0,esm_extends/* default */.Z)({}, props, sharedProps)) : /*#__PURE__*/react.createElement(Selector_SingleSelector, (0,esm_extends/* default */.Z)({}, props, sharedProps));
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
ref: domRef,
|
|
className: "".concat(prefixCls, "-selector"),
|
|
onClick: onClick,
|
|
onMouseDown: onMouseDown
|
|
}, selectNode);
|
|
};
|
|
|
|
var ForwardSelector = /*#__PURE__*/react.forwardRef(Selector);
|
|
ForwardSelector.displayName = 'Selector';
|
|
/* harmony default export */ var es_Selector = (ForwardSelector);
|
|
// EXTERNAL MODULE: ./node_modules/rc-trigger/es/index.js + 15 modules
|
|
var rc_trigger_es = __webpack_require__(81263);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/SelectTrigger.js
|
|
|
|
|
|
|
|
|
|
var _excluded = ["prefixCls", "disabled", "visible", "children", "popupElement", "containerWidth", "animation", "transitionName", "dropdownStyle", "dropdownClassName", "direction", "placement", "dropdownMatchSelectWidth", "dropdownRender", "dropdownAlign", "getPopupContainer", "empty", "getTriggerDOMNode", "onPopupVisibleChange", "onPopupMouseEnter"];
|
|
|
|
|
|
|
|
|
|
var getBuiltInPlacements = function getBuiltInPlacements(dropdownMatchSelectWidth) {
|
|
// Enable horizontal overflow auto-adjustment when a custom dropdown width is provided
|
|
var adjustX = dropdownMatchSelectWidth === true ? 0 : 1;
|
|
return {
|
|
bottomLeft: {
|
|
points: ['tl', 'bl'],
|
|
offset: [0, 4],
|
|
overflow: {
|
|
adjustX: adjustX,
|
|
adjustY: 1
|
|
}
|
|
},
|
|
bottomRight: {
|
|
points: ['tr', 'br'],
|
|
offset: [0, 4],
|
|
overflow: {
|
|
adjustX: adjustX,
|
|
adjustY: 1
|
|
}
|
|
},
|
|
topLeft: {
|
|
points: ['bl', 'tl'],
|
|
offset: [0, -4],
|
|
overflow: {
|
|
adjustX: adjustX,
|
|
adjustY: 1
|
|
}
|
|
},
|
|
topRight: {
|
|
points: ['br', 'tr'],
|
|
offset: [0, -4],
|
|
overflow: {
|
|
adjustX: adjustX,
|
|
adjustY: 1
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
var SelectTrigger = function SelectTrigger(props, ref) {
|
|
var prefixCls = props.prefixCls,
|
|
disabled = props.disabled,
|
|
visible = props.visible,
|
|
children = props.children,
|
|
popupElement = props.popupElement,
|
|
containerWidth = props.containerWidth,
|
|
animation = props.animation,
|
|
transitionName = props.transitionName,
|
|
dropdownStyle = props.dropdownStyle,
|
|
dropdownClassName = props.dropdownClassName,
|
|
_props$direction = props.direction,
|
|
direction = _props$direction === void 0 ? 'ltr' : _props$direction,
|
|
placement = props.placement,
|
|
dropdownMatchSelectWidth = props.dropdownMatchSelectWidth,
|
|
dropdownRender = props.dropdownRender,
|
|
dropdownAlign = props.dropdownAlign,
|
|
getPopupContainer = props.getPopupContainer,
|
|
empty = props.empty,
|
|
getTriggerDOMNode = props.getTriggerDOMNode,
|
|
onPopupVisibleChange = props.onPopupVisibleChange,
|
|
onPopupMouseEnter = props.onPopupMouseEnter,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(props, _excluded);
|
|
|
|
var dropdownPrefixCls = "".concat(prefixCls, "-dropdown");
|
|
var popupNode = popupElement;
|
|
|
|
if (dropdownRender) {
|
|
popupNode = dropdownRender(popupElement);
|
|
}
|
|
|
|
var builtInPlacements = react.useMemo(function () {
|
|
return getBuiltInPlacements(dropdownMatchSelectWidth);
|
|
}, [dropdownMatchSelectWidth]); // ===================== Motion ======================
|
|
|
|
var mergedTransitionName = animation ? "".concat(dropdownPrefixCls, "-").concat(animation) : transitionName; // ======================= Ref =======================
|
|
|
|
var popupRef = react.useRef(null);
|
|
react.useImperativeHandle(ref, function () {
|
|
return {
|
|
getPopupElement: function getPopupElement() {
|
|
return popupRef.current;
|
|
}
|
|
};
|
|
});
|
|
|
|
var popupStyle = (0,objectSpread2/* default */.Z)({
|
|
minWidth: containerWidth
|
|
}, dropdownStyle);
|
|
|
|
if (typeof dropdownMatchSelectWidth === 'number') {
|
|
popupStyle.width = dropdownMatchSelectWidth;
|
|
} else if (dropdownMatchSelectWidth) {
|
|
popupStyle.width = containerWidth;
|
|
}
|
|
|
|
return /*#__PURE__*/react.createElement(rc_trigger_es/* default */.Z, (0,esm_extends/* default */.Z)({}, restProps, {
|
|
showAction: onPopupVisibleChange ? ['click'] : [],
|
|
hideAction: onPopupVisibleChange ? ['click'] : [],
|
|
popupPlacement: placement || (direction === 'rtl' ? 'bottomRight' : 'bottomLeft'),
|
|
builtinPlacements: builtInPlacements,
|
|
prefixCls: dropdownPrefixCls,
|
|
popupTransitionName: mergedTransitionName,
|
|
popup: /*#__PURE__*/react.createElement("div", {
|
|
ref: popupRef,
|
|
onMouseEnter: onPopupMouseEnter
|
|
}, popupNode),
|
|
popupAlign: dropdownAlign,
|
|
popupVisible: visible,
|
|
getPopupContainer: getPopupContainer,
|
|
popupClassName: classnames_default()(dropdownClassName, (0,defineProperty/* default */.Z)({}, "".concat(dropdownPrefixCls, "-empty"), empty)),
|
|
popupStyle: popupStyle,
|
|
getTriggerDOMNode: getTriggerDOMNode,
|
|
onPopupVisibleChange: onPopupVisibleChange
|
|
}), children);
|
|
};
|
|
|
|
var RefSelectTrigger = /*#__PURE__*/react.forwardRef(SelectTrigger);
|
|
RefSelectTrigger.displayName = 'SelectTrigger';
|
|
/* harmony default export */ var es_SelectTrigger = (RefSelectTrigger);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toArray.js
|
|
var esm_toArray = __webpack_require__(84506);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/utils/valueUtil.js
|
|
|
|
|
|
|
|
|
|
|
|
function getKey(data, index) {
|
|
var key = data.key;
|
|
var value;
|
|
|
|
if ('value' in data) {
|
|
value = data.value;
|
|
}
|
|
|
|
if (key !== null && key !== undefined) {
|
|
return key;
|
|
}
|
|
|
|
if (value !== undefined) {
|
|
return value;
|
|
}
|
|
|
|
return "rc-index-key-".concat(index);
|
|
}
|
|
|
|
function fillFieldNames(fieldNames, childrenAsData) {
|
|
var _ref = fieldNames || {},
|
|
label = _ref.label,
|
|
value = _ref.value,
|
|
options = _ref.options;
|
|
|
|
return {
|
|
label: label || (childrenAsData ? 'children' : 'label'),
|
|
value: value || 'value',
|
|
options: options || 'options'
|
|
};
|
|
}
|
|
/**
|
|
* Flat options into flatten list.
|
|
* We use `optionOnly` here is aim to avoid user use nested option group.
|
|
* Here is simply set `key` to the index if not provided.
|
|
*/
|
|
|
|
function flattenOptions(options) {
|
|
var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
fieldNames = _ref2.fieldNames,
|
|
childrenAsData = _ref2.childrenAsData;
|
|
|
|
var flattenList = [];
|
|
|
|
var _fillFieldNames = fillFieldNames(fieldNames, false),
|
|
fieldLabel = _fillFieldNames.label,
|
|
fieldValue = _fillFieldNames.value,
|
|
fieldOptions = _fillFieldNames.options;
|
|
|
|
function dig(list, isGroupOption) {
|
|
list.forEach(function (data) {
|
|
var label = data[fieldLabel];
|
|
|
|
if (isGroupOption || !(fieldOptions in data)) {
|
|
var value = data[fieldValue]; // Option
|
|
|
|
flattenList.push({
|
|
key: getKey(data, flattenList.length),
|
|
groupOption: isGroupOption,
|
|
data: data,
|
|
label: label,
|
|
value: value
|
|
});
|
|
} else {
|
|
var grpLabel = label;
|
|
|
|
if (grpLabel === undefined && childrenAsData) {
|
|
grpLabel = data.label;
|
|
} // Option Group
|
|
|
|
|
|
flattenList.push({
|
|
key: getKey(data, flattenList.length),
|
|
group: true,
|
|
data: data,
|
|
label: grpLabel
|
|
});
|
|
dig(data[fieldOptions], true);
|
|
}
|
|
});
|
|
}
|
|
|
|
dig(options, false);
|
|
return flattenList;
|
|
}
|
|
/**
|
|
* Inject `props` into `option` for legacy usage
|
|
*/
|
|
|
|
function injectPropsWithOption(option) {
|
|
var newOption = (0,objectSpread2/* default */.Z)({}, option);
|
|
|
|
if (!('props' in newOption)) {
|
|
Object.defineProperty(newOption, 'props', {
|
|
get: function get() {
|
|
(0,es_warning/* default */.ZP)(false, 'Return type is option instead of Option instance. Please read value directly instead of reading from `props`.');
|
|
return newOption;
|
|
}
|
|
});
|
|
}
|
|
|
|
return newOption;
|
|
}
|
|
function getSeparatedContent(text, tokens) {
|
|
if (!tokens || !tokens.length) {
|
|
return null;
|
|
}
|
|
|
|
var match = false;
|
|
|
|
function separate(str, _ref3) {
|
|
var _ref4 = (0,esm_toArray/* default */.Z)(_ref3),
|
|
token = _ref4[0],
|
|
restTokens = _ref4.slice(1);
|
|
|
|
if (!token) {
|
|
return [str];
|
|
}
|
|
|
|
var list = str.split(token);
|
|
match = match || list.length > 1;
|
|
return list.reduce(function (prevList, unitStr) {
|
|
return [].concat((0,toConsumableArray/* default */.Z)(prevList), (0,toConsumableArray/* default */.Z)(separate(unitStr, restTokens)));
|
|
}, []).filter(function (unit) {
|
|
return unit;
|
|
});
|
|
}
|
|
|
|
var list = separate(text, tokens);
|
|
return match ? list : null;
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/BaseSelect.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var BaseSelect_excluded = ["id", "prefixCls", "className", "showSearch", "tagRender", "direction", "omitDomProps", "displayValues", "onDisplayValuesChange", "emptyOptions", "notFoundContent", "onClear", "mode", "disabled", "loading", "getInputElement", "getRawInputElement", "open", "defaultOpen", "onDropdownVisibleChange", "activeValue", "onActiveValueChange", "activeDescendantId", "searchValue", "autoClearSearchValue", "onSearch", "onSearchSplit", "tokenSeparators", "allowClear", "showArrow", "inputIcon", "clearIcon", "OptionList", "animation", "transitionName", "dropdownStyle", "dropdownClassName", "dropdownMatchSelectWidth", "dropdownRender", "dropdownAlign", "placement", "getPopupContainer", "showAction", "onFocus", "onBlur", "onKeyUp", "onKeyDown", "onMouseDown"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var DEFAULT_OMIT_PROPS = ['value', 'onChange', 'removeIcon', 'placeholder', 'autoFocus', 'maxTagCount', 'maxTagTextLength', 'maxTagPlaceholder', 'choiceTransitionName', 'onInputKeyDown', 'onPopupScroll', 'tabIndex'];
|
|
function BaseSelect_isMultiple(mode) {
|
|
return mode === 'tags' || mode === 'multiple';
|
|
}
|
|
var BaseSelect = /*#__PURE__*/react.forwardRef(function (props, ref) {
|
|
var _customizeRawInputEle, _classNames2;
|
|
|
|
var id = props.id,
|
|
prefixCls = props.prefixCls,
|
|
className = props.className,
|
|
showSearch = props.showSearch,
|
|
tagRender = props.tagRender,
|
|
direction = props.direction,
|
|
omitDomProps = props.omitDomProps,
|
|
displayValues = props.displayValues,
|
|
onDisplayValuesChange = props.onDisplayValuesChange,
|
|
emptyOptions = props.emptyOptions,
|
|
_props$notFoundConten = props.notFoundContent,
|
|
notFoundContent = _props$notFoundConten === void 0 ? 'Not Found' : _props$notFoundConten,
|
|
onClear = props.onClear,
|
|
mode = props.mode,
|
|
disabled = props.disabled,
|
|
loading = props.loading,
|
|
getInputElement = props.getInputElement,
|
|
getRawInputElement = props.getRawInputElement,
|
|
open = props.open,
|
|
defaultOpen = props.defaultOpen,
|
|
onDropdownVisibleChange = props.onDropdownVisibleChange,
|
|
activeValue = props.activeValue,
|
|
onActiveValueChange = props.onActiveValueChange,
|
|
activeDescendantId = props.activeDescendantId,
|
|
searchValue = props.searchValue,
|
|
autoClearSearchValue = props.autoClearSearchValue,
|
|
onSearch = props.onSearch,
|
|
onSearchSplit = props.onSearchSplit,
|
|
tokenSeparators = props.tokenSeparators,
|
|
allowClear = props.allowClear,
|
|
showArrow = props.showArrow,
|
|
inputIcon = props.inputIcon,
|
|
clearIcon = props.clearIcon,
|
|
OptionList = props.OptionList,
|
|
animation = props.animation,
|
|
transitionName = props.transitionName,
|
|
dropdownStyle = props.dropdownStyle,
|
|
dropdownClassName = props.dropdownClassName,
|
|
dropdownMatchSelectWidth = props.dropdownMatchSelectWidth,
|
|
dropdownRender = props.dropdownRender,
|
|
dropdownAlign = props.dropdownAlign,
|
|
placement = props.placement,
|
|
getPopupContainer = props.getPopupContainer,
|
|
_props$showAction = props.showAction,
|
|
showAction = _props$showAction === void 0 ? [] : _props$showAction,
|
|
onFocus = props.onFocus,
|
|
onBlur = props.onBlur,
|
|
onKeyUp = props.onKeyUp,
|
|
onKeyDown = props.onKeyDown,
|
|
onMouseDown = props.onMouseDown,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(props, BaseSelect_excluded); // ============================== MISC ==============================
|
|
|
|
|
|
var multiple = BaseSelect_isMultiple(mode);
|
|
var mergedShowSearch = (showSearch !== undefined ? showSearch : multiple) || mode === 'combobox';
|
|
|
|
var domProps = (0,objectSpread2/* default */.Z)({}, restProps);
|
|
|
|
DEFAULT_OMIT_PROPS.forEach(function (propName) {
|
|
delete domProps[propName];
|
|
});
|
|
omitDomProps === null || omitDomProps === void 0 ? void 0 : omitDomProps.forEach(function (propName) {
|
|
delete domProps[propName];
|
|
}); // ============================= Mobile =============================
|
|
|
|
var _React$useState = react.useState(false),
|
|
_React$useState2 = (0,slicedToArray/* default */.Z)(_React$useState, 2),
|
|
mobile = _React$useState2[0],
|
|
setMobile = _React$useState2[1];
|
|
|
|
react.useEffect(function () {
|
|
// Only update on the client side
|
|
setMobile((0,isMobile/* default */.Z)());
|
|
}, []); // ============================== Refs ==============================
|
|
|
|
var containerRef = react.useRef(null);
|
|
var selectorDomRef = react.useRef(null);
|
|
var triggerRef = react.useRef(null);
|
|
var selectorRef = react.useRef(null);
|
|
var listRef = react.useRef(null);
|
|
/** Used for component focused management */
|
|
|
|
var _useDelayReset = useDelayReset(),
|
|
_useDelayReset2 = (0,slicedToArray/* default */.Z)(_useDelayReset, 3),
|
|
mockFocused = _useDelayReset2[0],
|
|
setMockFocused = _useDelayReset2[1],
|
|
cancelSetMockFocused = _useDelayReset2[2]; // =========================== Imperative ===========================
|
|
|
|
|
|
react.useImperativeHandle(ref, function () {
|
|
var _selectorRef$current, _selectorRef$current2;
|
|
|
|
return {
|
|
focus: (_selectorRef$current = selectorRef.current) === null || _selectorRef$current === void 0 ? void 0 : _selectorRef$current.focus,
|
|
blur: (_selectorRef$current2 = selectorRef.current) === null || _selectorRef$current2 === void 0 ? void 0 : _selectorRef$current2.blur,
|
|
scrollTo: function scrollTo(arg) {
|
|
var _listRef$current;
|
|
|
|
return (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.scrollTo(arg);
|
|
}
|
|
};
|
|
}); // ========================== Search Value ==========================
|
|
|
|
var mergedSearchValue = react.useMemo(function () {
|
|
var _displayValues$;
|
|
|
|
if (mode !== 'combobox') {
|
|
return searchValue;
|
|
}
|
|
|
|
var val = (_displayValues$ = displayValues[0]) === null || _displayValues$ === void 0 ? void 0 : _displayValues$.value;
|
|
return typeof val === 'string' || typeof val === 'number' ? String(val) : '';
|
|
}, [searchValue, mode, displayValues]); // ========================== Custom Input ==========================
|
|
// Only works in `combobox`
|
|
|
|
var customizeInputElement = mode === 'combobox' && typeof getInputElement === 'function' && getInputElement() || null; // Used for customize replacement for `rc-cascader`
|
|
|
|
var customizeRawInputElement = typeof getRawInputElement === 'function' && getRawInputElement();
|
|
var customizeRawInputRef = (0,es_ref/* useComposeRef */.x1)(selectorDomRef, customizeRawInputElement === null || customizeRawInputElement === void 0 ? void 0 : (_customizeRawInputEle = customizeRawInputElement.props) === null || _customizeRawInputEle === void 0 ? void 0 : _customizeRawInputEle.ref); // ============================== Open ==============================
|
|
|
|
var _useMergedState = (0,useMergedState/* default */.Z)(undefined, {
|
|
defaultValue: defaultOpen,
|
|
value: open
|
|
}),
|
|
_useMergedState2 = (0,slicedToArray/* default */.Z)(_useMergedState, 2),
|
|
innerOpen = _useMergedState2[0],
|
|
setInnerOpen = _useMergedState2[1];
|
|
|
|
var mergedOpen = innerOpen; // Not trigger `open` in `combobox` when `notFoundContent` is empty
|
|
|
|
var emptyListContent = !notFoundContent && emptyOptions;
|
|
|
|
if (disabled || emptyListContent && mergedOpen && mode === 'combobox') {
|
|
mergedOpen = false;
|
|
}
|
|
|
|
var triggerOpen = emptyListContent ? false : mergedOpen;
|
|
var onToggleOpen = react.useCallback(function (newOpen) {
|
|
var nextOpen = newOpen !== undefined ? newOpen : !mergedOpen;
|
|
|
|
if (!disabled) {
|
|
setInnerOpen(nextOpen);
|
|
|
|
if (mergedOpen !== nextOpen) {
|
|
onDropdownVisibleChange === null || onDropdownVisibleChange === void 0 ? void 0 : onDropdownVisibleChange(nextOpen);
|
|
}
|
|
}
|
|
}, [disabled, mergedOpen, setInnerOpen, onDropdownVisibleChange]); // ============================= Search =============================
|
|
|
|
var tokenWithEnter = react.useMemo(function () {
|
|
return (tokenSeparators || []).some(function (tokenSeparator) {
|
|
return ['\n', '\r\n'].includes(tokenSeparator);
|
|
});
|
|
}, [tokenSeparators]);
|
|
|
|
var onInternalSearch = function onInternalSearch(searchText, fromTyping, isCompositing) {
|
|
var ret = true;
|
|
var newSearchText = searchText;
|
|
onActiveValueChange === null || onActiveValueChange === void 0 ? void 0 : onActiveValueChange(null); // Check if match the `tokenSeparators`
|
|
|
|
var patchLabels = isCompositing ? null : getSeparatedContent(searchText, tokenSeparators); // Ignore combobox since it's not split-able
|
|
|
|
if (mode !== 'combobox' && patchLabels) {
|
|
newSearchText = '';
|
|
onSearchSplit === null || onSearchSplit === void 0 ? void 0 : onSearchSplit(patchLabels); // Should close when paste finish
|
|
|
|
onToggleOpen(false); // Tell Selector that break next actions
|
|
|
|
ret = false;
|
|
}
|
|
|
|
if (onSearch && mergedSearchValue !== newSearchText) {
|
|
onSearch(newSearchText, {
|
|
source: fromTyping ? 'typing' : 'effect'
|
|
});
|
|
}
|
|
|
|
return ret;
|
|
}; // Only triggered when menu is closed & mode is tags
|
|
// If menu is open, OptionList will take charge
|
|
// If mode isn't tags, press enter is not meaningful when you can't see any option
|
|
|
|
|
|
var onInternalSearchSubmit = function onInternalSearchSubmit(searchText) {
|
|
// prevent empty tags from appearing when you click the Enter button
|
|
if (!searchText || !searchText.trim()) {
|
|
return;
|
|
}
|
|
|
|
onSearch(searchText, {
|
|
source: 'submit'
|
|
});
|
|
}; // Close will clean up single mode search text
|
|
|
|
|
|
react.useEffect(function () {
|
|
if (!mergedOpen && !multiple && mode !== 'combobox') {
|
|
onInternalSearch('', false, false);
|
|
}
|
|
}, [mergedOpen]); // ============================ Disabled ============================
|
|
// Close dropdown & remove focus state when disabled change
|
|
|
|
react.useEffect(function () {
|
|
if (innerOpen && disabled) {
|
|
setInnerOpen(false);
|
|
}
|
|
|
|
if (disabled) {
|
|
setMockFocused(false);
|
|
}
|
|
}, [disabled]); // ============================ Keyboard ============================
|
|
|
|
/**
|
|
* We record input value here to check if can press to clean up by backspace
|
|
* - null: Key is not down, this is reset by key up
|
|
* - true: Search text is empty when first time backspace down
|
|
* - false: Search text is not empty when first time backspace down
|
|
*/
|
|
|
|
var _useLock = useLock(),
|
|
_useLock2 = (0,slicedToArray/* default */.Z)(_useLock, 2),
|
|
getClearLock = _useLock2[0],
|
|
setClearLock = _useLock2[1]; // KeyDown
|
|
|
|
|
|
var onInternalKeyDown = function onInternalKeyDown(event) {
|
|
var clearLock = getClearLock();
|
|
var which = event.which;
|
|
|
|
if (which === KeyCode/* default.ENTER */.Z.ENTER) {
|
|
// Do not submit form when type in the input
|
|
if (mode !== 'combobox') {
|
|
event.preventDefault();
|
|
} // We only manage open state here, close logic should handle by list component
|
|
|
|
|
|
if (!mergedOpen) {
|
|
onToggleOpen(true);
|
|
}
|
|
}
|
|
|
|
setClearLock(!!mergedSearchValue); // Remove value by `backspace`
|
|
|
|
if (which === KeyCode/* default.BACKSPACE */.Z.BACKSPACE && !clearLock && multiple && !mergedSearchValue && displayValues.length) {
|
|
var cloneDisplayValues = (0,toConsumableArray/* default */.Z)(displayValues);
|
|
|
|
var removedDisplayValue = null;
|
|
|
|
for (var i = cloneDisplayValues.length - 1; i >= 0; i -= 1) {
|
|
var current = cloneDisplayValues[i];
|
|
|
|
if (!current.disabled) {
|
|
cloneDisplayValues.splice(i, 1);
|
|
removedDisplayValue = current;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (removedDisplayValue) {
|
|
onDisplayValuesChange(cloneDisplayValues, {
|
|
type: 'remove',
|
|
values: [removedDisplayValue]
|
|
});
|
|
}
|
|
}
|
|
|
|
for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
rest[_key - 1] = arguments[_key];
|
|
}
|
|
|
|
if (mergedOpen && listRef.current) {
|
|
var _listRef$current2;
|
|
|
|
(_listRef$current2 = listRef.current).onKeyDown.apply(_listRef$current2, [event].concat(rest));
|
|
}
|
|
|
|
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown.apply(void 0, [event].concat(rest));
|
|
}; // KeyUp
|
|
|
|
|
|
var onInternalKeyUp = function onInternalKeyUp(event) {
|
|
for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
rest[_key2 - 1] = arguments[_key2];
|
|
}
|
|
|
|
if (mergedOpen && listRef.current) {
|
|
var _listRef$current3;
|
|
|
|
(_listRef$current3 = listRef.current).onKeyUp.apply(_listRef$current3, [event].concat(rest));
|
|
}
|
|
|
|
onKeyUp === null || onKeyUp === void 0 ? void 0 : onKeyUp.apply(void 0, [event].concat(rest));
|
|
}; // ============================ Selector ============================
|
|
|
|
|
|
var onSelectorRemove = function onSelectorRemove(val) {
|
|
var newValues = displayValues.filter(function (i) {
|
|
return i !== val;
|
|
});
|
|
onDisplayValuesChange(newValues, {
|
|
type: 'remove',
|
|
values: [val]
|
|
});
|
|
}; // ========================== Focus / Blur ==========================
|
|
|
|
/** Record real focus status */
|
|
|
|
|
|
var focusRef = react.useRef(false);
|
|
|
|
var onContainerFocus = function onContainerFocus() {
|
|
setMockFocused(true);
|
|
|
|
if (!disabled) {
|
|
if (onFocus && !focusRef.current) {
|
|
onFocus.apply(void 0, arguments);
|
|
} // `showAction` should handle `focus` if set
|
|
|
|
|
|
if (showAction.includes('focus')) {
|
|
onToggleOpen(true);
|
|
}
|
|
}
|
|
|
|
focusRef.current = true;
|
|
};
|
|
|
|
var onContainerBlur = function onContainerBlur() {
|
|
setMockFocused(false, function () {
|
|
focusRef.current = false;
|
|
onToggleOpen(false);
|
|
});
|
|
|
|
if (disabled) {
|
|
return;
|
|
}
|
|
|
|
if (mergedSearchValue) {
|
|
// `tags` mode should move `searchValue` into values
|
|
if (mode === 'tags') {
|
|
onSearch(mergedSearchValue, {
|
|
source: 'submit'
|
|
});
|
|
} else if (mode === 'multiple') {
|
|
// `multiple` mode only clean the search value but not trigger event
|
|
onSearch('', {
|
|
source: 'blur'
|
|
});
|
|
}
|
|
}
|
|
|
|
if (onBlur) {
|
|
onBlur.apply(void 0, arguments);
|
|
}
|
|
}; // Give focus back of Select
|
|
|
|
|
|
var activeTimeoutIds = [];
|
|
react.useEffect(function () {
|
|
return function () {
|
|
activeTimeoutIds.forEach(function (timeoutId) {
|
|
return clearTimeout(timeoutId);
|
|
});
|
|
activeTimeoutIds.splice(0, activeTimeoutIds.length);
|
|
};
|
|
}, []);
|
|
|
|
var onInternalMouseDown = function onInternalMouseDown(event) {
|
|
var _triggerRef$current;
|
|
|
|
var target = event.target;
|
|
var popupElement = (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.getPopupElement(); // We should give focus back to selector if clicked item is not focusable
|
|
|
|
if (popupElement && popupElement.contains(target)) {
|
|
var timeoutId = setTimeout(function () {
|
|
var index = activeTimeoutIds.indexOf(timeoutId);
|
|
|
|
if (index !== -1) {
|
|
activeTimeoutIds.splice(index, 1);
|
|
}
|
|
|
|
cancelSetMockFocused();
|
|
|
|
if (!mobile && !popupElement.contains(document.activeElement)) {
|
|
var _selectorRef$current3;
|
|
|
|
(_selectorRef$current3 = selectorRef.current) === null || _selectorRef$current3 === void 0 ? void 0 : _selectorRef$current3.focus();
|
|
}
|
|
});
|
|
activeTimeoutIds.push(timeoutId);
|
|
}
|
|
|
|
for (var _len3 = arguments.length, restArgs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
|
restArgs[_key3 - 1] = arguments[_key3];
|
|
}
|
|
|
|
onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown.apply(void 0, [event].concat(restArgs));
|
|
}; // ============================ Dropdown ============================
|
|
|
|
|
|
var _React$useState3 = react.useState(null),
|
|
_React$useState4 = (0,slicedToArray/* default */.Z)(_React$useState3, 2),
|
|
containerWidth = _React$useState4[0],
|
|
setContainerWidth = _React$useState4[1];
|
|
|
|
var _React$useState5 = react.useState({}),
|
|
_React$useState6 = (0,slicedToArray/* default */.Z)(_React$useState5, 2),
|
|
forceUpdate = _React$useState6[1]; // We need force update here since popup dom is render async
|
|
|
|
|
|
function onPopupMouseEnter() {
|
|
forceUpdate({});
|
|
}
|
|
|
|
(0,useLayoutEffect/* default */.Z)(function () {
|
|
if (triggerOpen) {
|
|
var _containerRef$current;
|
|
|
|
var newWidth = Math.ceil((_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.offsetWidth);
|
|
|
|
if (containerWidth !== newWidth && !Number.isNaN(newWidth)) {
|
|
setContainerWidth(newWidth);
|
|
}
|
|
}
|
|
}, [triggerOpen]); // Used for raw custom input trigger
|
|
|
|
var onTriggerVisibleChange;
|
|
|
|
if (customizeRawInputElement) {
|
|
onTriggerVisibleChange = function onTriggerVisibleChange(newOpen) {
|
|
onToggleOpen(newOpen);
|
|
};
|
|
} // Close when click on non-select element
|
|
|
|
|
|
useSelectTriggerControl(function () {
|
|
var _triggerRef$current2;
|
|
|
|
return [containerRef.current, (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : _triggerRef$current2.getPopupElement()];
|
|
}, triggerOpen, onToggleOpen, !!customizeRawInputElement); // ============================ Context =============================
|
|
|
|
var baseSelectContext = react.useMemo(function () {
|
|
return (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, props), {}, {
|
|
notFoundContent: notFoundContent,
|
|
open: mergedOpen,
|
|
triggerOpen: triggerOpen,
|
|
id: id,
|
|
showSearch: mergedShowSearch,
|
|
multiple: multiple,
|
|
toggleOpen: onToggleOpen
|
|
});
|
|
}, [props, notFoundContent, triggerOpen, mergedOpen, id, mergedShowSearch, multiple, onToggleOpen]); // ==================================================================
|
|
// == Render ==
|
|
// ==================================================================
|
|
// ============================= Arrow ==============================
|
|
|
|
var mergedShowArrow = showArrow !== undefined ? showArrow : loading || !multiple && mode !== 'combobox';
|
|
var arrowNode;
|
|
|
|
if (mergedShowArrow) {
|
|
arrowNode = /*#__PURE__*/react.createElement(es_TransBtn, {
|
|
className: classnames_default()("".concat(prefixCls, "-arrow"), (0,defineProperty/* default */.Z)({}, "".concat(prefixCls, "-arrow-loading"), loading)),
|
|
customizeIcon: inputIcon,
|
|
customizeIconProps: {
|
|
loading: loading,
|
|
searchValue: mergedSearchValue,
|
|
open: mergedOpen,
|
|
focused: mockFocused,
|
|
showSearch: mergedShowSearch
|
|
}
|
|
});
|
|
} // ============================= Clear ==============================
|
|
|
|
|
|
var clearNode;
|
|
|
|
var onClearMouseDown = function onClearMouseDown() {
|
|
var _selectorRef$current4;
|
|
|
|
onClear === null || onClear === void 0 ? void 0 : onClear();
|
|
(_selectorRef$current4 = selectorRef.current) === null || _selectorRef$current4 === void 0 ? void 0 : _selectorRef$current4.focus();
|
|
onDisplayValuesChange([], {
|
|
type: 'clear',
|
|
values: displayValues
|
|
});
|
|
onInternalSearch('', false, false);
|
|
};
|
|
|
|
if (!disabled && allowClear && (displayValues.length || mergedSearchValue) && !(mode === 'combobox' && mergedSearchValue === '')) {
|
|
clearNode = /*#__PURE__*/react.createElement(es_TransBtn, {
|
|
className: "".concat(prefixCls, "-clear"),
|
|
onMouseDown: onClearMouseDown,
|
|
customizeIcon: clearIcon
|
|
}, "\xD7");
|
|
} // =========================== OptionList ===========================
|
|
|
|
|
|
var optionList = /*#__PURE__*/react.createElement(OptionList, {
|
|
ref: listRef
|
|
}); // ============================= Select =============================
|
|
|
|
var mergedClassName = classnames_default()(prefixCls, className, (_classNames2 = {}, (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-focused"), mockFocused), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-multiple"), multiple), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-single"), !multiple), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-allow-clear"), allowClear), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-show-arrow"), mergedShowArrow), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-disabled"), disabled), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-loading"), loading), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-open"), mergedOpen), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-customize-input"), customizeInputElement), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-show-search"), mergedShowSearch), _classNames2)); // >>> Selector
|
|
|
|
var selectorNode = /*#__PURE__*/react.createElement(es_SelectTrigger, {
|
|
ref: triggerRef,
|
|
disabled: disabled,
|
|
prefixCls: prefixCls,
|
|
visible: triggerOpen,
|
|
popupElement: optionList,
|
|
containerWidth: containerWidth,
|
|
animation: animation,
|
|
transitionName: transitionName,
|
|
dropdownStyle: dropdownStyle,
|
|
dropdownClassName: dropdownClassName,
|
|
direction: direction,
|
|
dropdownMatchSelectWidth: dropdownMatchSelectWidth,
|
|
dropdownRender: dropdownRender,
|
|
dropdownAlign: dropdownAlign,
|
|
placement: placement,
|
|
getPopupContainer: getPopupContainer,
|
|
empty: emptyOptions,
|
|
getTriggerDOMNode: function getTriggerDOMNode() {
|
|
return selectorDomRef.current;
|
|
},
|
|
onPopupVisibleChange: onTriggerVisibleChange,
|
|
onPopupMouseEnter: onPopupMouseEnter
|
|
}, customizeRawInputElement ? /*#__PURE__*/react.cloneElement(customizeRawInputElement, {
|
|
ref: customizeRawInputRef
|
|
}) : /*#__PURE__*/react.createElement(es_Selector, (0,esm_extends/* default */.Z)({}, props, {
|
|
domRef: selectorDomRef,
|
|
prefixCls: prefixCls,
|
|
inputElement: customizeInputElement,
|
|
ref: selectorRef,
|
|
id: id,
|
|
showSearch: mergedShowSearch,
|
|
autoClearSearchValue: autoClearSearchValue,
|
|
mode: mode,
|
|
activeDescendantId: activeDescendantId,
|
|
tagRender: tagRender,
|
|
values: displayValues,
|
|
open: mergedOpen,
|
|
onToggleOpen: onToggleOpen,
|
|
activeValue: activeValue,
|
|
searchValue: mergedSearchValue,
|
|
onSearch: onInternalSearch,
|
|
onSearchSubmit: onInternalSearchSubmit,
|
|
onRemove: onSelectorRemove,
|
|
tokenWithEnter: tokenWithEnter
|
|
}))); // >>> Render
|
|
|
|
var renderNode; // Render raw
|
|
|
|
if (customizeRawInputElement) {
|
|
renderNode = selectorNode;
|
|
} else {
|
|
renderNode = /*#__PURE__*/react.createElement("div", (0,esm_extends/* default */.Z)({
|
|
className: mergedClassName
|
|
}, domProps, {
|
|
ref: containerRef,
|
|
onMouseDown: onInternalMouseDown,
|
|
onKeyDown: onInternalKeyDown,
|
|
onKeyUp: onInternalKeyUp,
|
|
onFocus: onContainerFocus,
|
|
onBlur: onContainerBlur
|
|
}), mockFocused && !mergedOpen && /*#__PURE__*/react.createElement("span", {
|
|
style: {
|
|
width: 0,
|
|
height: 0,
|
|
position: 'absolute',
|
|
overflow: 'hidden',
|
|
opacity: 0
|
|
},
|
|
"aria-live": "polite"
|
|
}, "".concat(displayValues.map(function (_ref) {
|
|
var label = _ref.label,
|
|
value = _ref.value;
|
|
return ['number', 'string'].includes((0,esm_typeof/* default */.Z)(label)) ? label : value;
|
|
}).join(', '))), selectorNode, arrowNode, clearNode);
|
|
}
|
|
|
|
return /*#__PURE__*/react.createElement(BaseSelectContext.Provider, {
|
|
value: baseSelectContext
|
|
}, renderNode);
|
|
}); // Set display name for dev
|
|
|
|
if (false) {}
|
|
|
|
/* harmony default export */ var es_BaseSelect = (BaseSelect);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useCache.js
|
|
|
|
|
|
|
|
/**
|
|
* Cache `value` related LabeledValue & options.
|
|
*/
|
|
/* harmony default export */ var useCache = (function (labeledValues, valueOptions) {
|
|
var cacheRef = react.useRef({
|
|
values: new Map(),
|
|
options: new Map()
|
|
});
|
|
var filledLabeledValues = react.useMemo(function () {
|
|
var _cacheRef$current = cacheRef.current,
|
|
prevValueCache = _cacheRef$current.values,
|
|
prevOptionCache = _cacheRef$current.options; // Fill label by cache
|
|
|
|
var patchedValues = labeledValues.map(function (item) {
|
|
if (item.label === undefined) {
|
|
var _prevValueCache$get;
|
|
|
|
return (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, item), {}, {
|
|
label: (_prevValueCache$get = prevValueCache.get(item.value)) === null || _prevValueCache$get === void 0 ? void 0 : _prevValueCache$get.label
|
|
});
|
|
}
|
|
|
|
return item;
|
|
}); // Refresh cache
|
|
|
|
var valueCache = new Map();
|
|
var optionCache = new Map();
|
|
patchedValues.forEach(function (item) {
|
|
valueCache.set(item.value, item);
|
|
optionCache.set(item.value, valueOptions.get(item.value) || prevOptionCache.get(item.value));
|
|
});
|
|
cacheRef.current.values = valueCache;
|
|
cacheRef.current.options = optionCache;
|
|
return patchedValues;
|
|
}, [labeledValues, valueOptions]);
|
|
var getOption = react.useCallback(function (val) {
|
|
return valueOptions.get(val) || cacheRef.current.options.get(val);
|
|
}, [valueOptions]);
|
|
return [filledLabeledValues, getOption];
|
|
});
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useFilterOptions.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function includes(test, search) {
|
|
return commonUtil_toArray(test).join('').toUpperCase().includes(search);
|
|
}
|
|
|
|
/* harmony default export */ var useFilterOptions = (function (options, fieldNames, searchValue, filterOption, optionFilterProp) {
|
|
return react.useMemo(function () {
|
|
if (!searchValue || filterOption === false) {
|
|
return options;
|
|
}
|
|
|
|
var fieldOptions = fieldNames.options,
|
|
fieldLabel = fieldNames.label,
|
|
fieldValue = fieldNames.value;
|
|
var filteredOptions = [];
|
|
var customizeFilter = typeof filterOption === 'function';
|
|
var upperSearch = searchValue.toUpperCase();
|
|
var filterFunc = customizeFilter ? filterOption : function (_, option) {
|
|
// Use provided `optionFilterProp`
|
|
if (optionFilterProp) {
|
|
return includes(option[optionFilterProp], upperSearch);
|
|
} // Auto select `label` or `value` by option type
|
|
|
|
|
|
if (option[fieldOptions]) {
|
|
// hack `fieldLabel` since `OptionGroup` children is not `label`
|
|
return includes(option[fieldLabel !== 'children' ? fieldLabel : 'label'], upperSearch);
|
|
}
|
|
|
|
return includes(option[fieldValue], upperSearch);
|
|
};
|
|
var wrapOption = customizeFilter ? function (opt) {
|
|
return injectPropsWithOption(opt);
|
|
} : function (opt) {
|
|
return opt;
|
|
};
|
|
options.forEach(function (item) {
|
|
// Group should check child options
|
|
if (item[fieldOptions]) {
|
|
// Check group first
|
|
var matchGroup = filterFunc(searchValue, wrapOption(item));
|
|
|
|
if (matchGroup) {
|
|
filteredOptions.push(item);
|
|
} else {
|
|
// Check option
|
|
var subOptions = item[fieldOptions].filter(function (subItem) {
|
|
return filterFunc(searchValue, wrapOption(subItem));
|
|
});
|
|
|
|
if (subOptions.length) {
|
|
filteredOptions.push((0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, item), {}, (0,defineProperty/* default */.Z)({}, fieldOptions, subOptions)));
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (filterFunc(searchValue, wrapOption(item))) {
|
|
filteredOptions.push(item);
|
|
}
|
|
});
|
|
return filteredOptions;
|
|
}, [options, filterOption, optionFilterProp, searchValue, fieldNames]);
|
|
});
|
|
// EXTERNAL MODULE: ./node_modules/rc-select/es/hooks/useId.js
|
|
var useId = __webpack_require__(88708);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/Children/toArray.js
|
|
var Children_toArray = __webpack_require__(50344);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/utils/legacyUtil.js
|
|
|
|
|
|
var legacyUtil_excluded = ["children", "value"],
|
|
_excluded2 = ["children"];
|
|
|
|
|
|
|
|
function convertNodeToOption(node) {
|
|
var _ref = node,
|
|
key = _ref.key,
|
|
_ref$props = _ref.props,
|
|
children = _ref$props.children,
|
|
value = _ref$props.value,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(_ref$props, legacyUtil_excluded);
|
|
|
|
return (0,objectSpread2/* default */.Z)({
|
|
key: key,
|
|
value: value !== undefined ? value : key,
|
|
children: children
|
|
}, restProps);
|
|
}
|
|
|
|
function legacyUtil_convertChildrenToData(nodes) {
|
|
var optionOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
return (0,Children_toArray/* default */.Z)(nodes).map(function (node, index) {
|
|
if (! /*#__PURE__*/react.isValidElement(node) || !node.type) {
|
|
return null;
|
|
}
|
|
|
|
var _ref2 = node,
|
|
isSelectOptGroup = _ref2.type.isSelectOptGroup,
|
|
key = _ref2.key,
|
|
_ref2$props = _ref2.props,
|
|
children = _ref2$props.children,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(_ref2$props, _excluded2);
|
|
|
|
if (optionOnly || !isSelectOptGroup) {
|
|
return convertNodeToOption(node);
|
|
}
|
|
|
|
return (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({
|
|
key: "__RC_SELECT_GRP__".concat(key === null ? index : key, "__"),
|
|
label: key
|
|
}, restProps), {}, {
|
|
options: legacyUtil_convertChildrenToData(children)
|
|
});
|
|
}).filter(function (data) {
|
|
return data;
|
|
});
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useOptions.js
|
|
|
|
|
|
/**
|
|
* Parse `children` to `options` if `options` is not provided.
|
|
* Then flatten the `options`.
|
|
*/
|
|
|
|
function useOptions(options, children, fieldNames, optionFilterProp, optionLabelProp) {
|
|
return react.useMemo(function () {
|
|
var mergedOptions = options;
|
|
var childrenAsData = !options;
|
|
|
|
if (childrenAsData) {
|
|
mergedOptions = legacyUtil_convertChildrenToData(children);
|
|
}
|
|
|
|
var valueOptions = new Map();
|
|
var labelOptions = new Map();
|
|
|
|
var setLabelOptions = function setLabelOptions(labelOptionsMap, option, key) {
|
|
if (key && typeof key === 'string') {
|
|
labelOptionsMap.set(option[key], option);
|
|
}
|
|
};
|
|
|
|
function dig(optionList) {
|
|
var isChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
|
|
// for loop to speed up collection speed
|
|
for (var i = 0; i < optionList.length; i += 1) {
|
|
var option = optionList[i];
|
|
|
|
if (!option[fieldNames.options] || isChildren) {
|
|
valueOptions.set(option[fieldNames.value], option);
|
|
setLabelOptions(labelOptions, option, fieldNames.label); // https://github.com/ant-design/ant-design/issues/35304
|
|
|
|
setLabelOptions(labelOptions, option, optionFilterProp);
|
|
setLabelOptions(labelOptions, option, optionLabelProp);
|
|
} else {
|
|
dig(option[fieldNames.options], true);
|
|
}
|
|
}
|
|
}
|
|
|
|
dig(mergedOptions);
|
|
return {
|
|
options: mergedOptions,
|
|
valueOptions: valueOptions,
|
|
labelOptions: labelOptions
|
|
};
|
|
}, [options, children, fieldNames, optionFilterProp, optionLabelProp]);
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/hooks/useRefFunc.js
|
|
|
|
/**
|
|
* Same as `React.useCallback` but always return a memoized function
|
|
* but redirect to real function.
|
|
*/
|
|
|
|
function useRefFunc(callback) {
|
|
var funcRef = react.useRef();
|
|
funcRef.current = callback;
|
|
var cacheFn = react.useCallback(function () {
|
|
return funcRef.current.apply(funcRef, arguments);
|
|
}, []);
|
|
return cacheFn;
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/OptGroup.js
|
|
/* istanbul ignore file */
|
|
|
|
/** This is a placeholder, not real render in dom */
|
|
var OptGroup = function OptGroup() {
|
|
return null;
|
|
};
|
|
|
|
OptGroup.isSelectOptGroup = true;
|
|
/* harmony default export */ var es_OptGroup = (OptGroup);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/Option.js
|
|
/* istanbul ignore file */
|
|
|
|
/** This is a placeholder, not real render in dom */
|
|
var Option = function Option() {
|
|
return null;
|
|
};
|
|
|
|
Option.isSelectOption = true;
|
|
/* harmony default export */ var es_Option = (Option);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/omit.js
|
|
var omit = __webpack_require__(98423);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/hooks/useMemo.js
|
|
var useMemo = __webpack_require__(56982);
|
|
// EXTERNAL MODULE: ./node_modules/rc-virtual-list/es/index.js + 14 modules
|
|
var rc_virtual_list_es = __webpack_require__(73453);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/utils/platformUtil.js
|
|
/* istanbul ignore file */
|
|
function isPlatformMac() {
|
|
return /(mac\sos|macintosh)/i.test(navigator.appVersion);
|
|
}
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/SelectContext.js
|
|
|
|
var SelectContext = /*#__PURE__*/react.createContext(null);
|
|
/* harmony default export */ var es_SelectContext = (SelectContext);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/OptionList.js
|
|
|
|
|
|
|
|
|
|
|
|
var OptionList_excluded = ["disabled", "title", "children", "style", "className"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function OptionList_isTitleType(content) {
|
|
return typeof content === 'string' || typeof content === 'number';
|
|
}
|
|
/**
|
|
* Using virtual list of option display.
|
|
* Will fallback to dom if use customize render.
|
|
*/
|
|
|
|
|
|
var OptionList = function OptionList(_, ref) {
|
|
var _useBaseProps = useBaseProps(),
|
|
prefixCls = _useBaseProps.prefixCls,
|
|
id = _useBaseProps.id,
|
|
open = _useBaseProps.open,
|
|
multiple = _useBaseProps.multiple,
|
|
mode = _useBaseProps.mode,
|
|
searchValue = _useBaseProps.searchValue,
|
|
toggleOpen = _useBaseProps.toggleOpen,
|
|
notFoundContent = _useBaseProps.notFoundContent,
|
|
onPopupScroll = _useBaseProps.onPopupScroll;
|
|
|
|
var _React$useContext = react.useContext(es_SelectContext),
|
|
flattenOptions = _React$useContext.flattenOptions,
|
|
onActiveValue = _React$useContext.onActiveValue,
|
|
defaultActiveFirstOption = _React$useContext.defaultActiveFirstOption,
|
|
onSelect = _React$useContext.onSelect,
|
|
menuItemSelectedIcon = _React$useContext.menuItemSelectedIcon,
|
|
rawValues = _React$useContext.rawValues,
|
|
fieldNames = _React$useContext.fieldNames,
|
|
virtual = _React$useContext.virtual,
|
|
listHeight = _React$useContext.listHeight,
|
|
listItemHeight = _React$useContext.listItemHeight;
|
|
|
|
var itemPrefixCls = "".concat(prefixCls, "-item");
|
|
var memoFlattenOptions = (0,useMemo/* default */.Z)(function () {
|
|
return flattenOptions;
|
|
}, [open, flattenOptions], function (prev, next) {
|
|
return next[0] && prev[1] !== next[1];
|
|
}); // =========================== List ===========================
|
|
|
|
var listRef = react.useRef(null);
|
|
|
|
var onListMouseDown = function onListMouseDown(event) {
|
|
event.preventDefault();
|
|
};
|
|
|
|
var scrollIntoView = function scrollIntoView(args) {
|
|
if (listRef.current) {
|
|
listRef.current.scrollTo(typeof args === 'number' ? {
|
|
index: args
|
|
} : args);
|
|
}
|
|
}; // ========================== Active ==========================
|
|
|
|
|
|
var getEnabledActiveIndex = function getEnabledActiveIndex(index) {
|
|
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
var len = memoFlattenOptions.length;
|
|
|
|
for (var i = 0; i < len; i += 1) {
|
|
var current = (index + i * offset + len) % len;
|
|
var _memoFlattenOptions$c = memoFlattenOptions[current],
|
|
group = _memoFlattenOptions$c.group,
|
|
data = _memoFlattenOptions$c.data;
|
|
|
|
if (!group && !data.disabled) {
|
|
return current;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
};
|
|
|
|
var _React$useState = react.useState(function () {
|
|
return getEnabledActiveIndex(0);
|
|
}),
|
|
_React$useState2 = (0,slicedToArray/* default */.Z)(_React$useState, 2),
|
|
activeIndex = _React$useState2[0],
|
|
setActiveIndex = _React$useState2[1];
|
|
|
|
var setActive = function setActive(index) {
|
|
var fromKeyboard = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
setActiveIndex(index);
|
|
var info = {
|
|
source: fromKeyboard ? 'keyboard' : 'mouse'
|
|
}; // Trigger active event
|
|
|
|
var flattenItem = memoFlattenOptions[index];
|
|
|
|
if (!flattenItem) {
|
|
onActiveValue(null, -1, info);
|
|
return;
|
|
}
|
|
|
|
onActiveValue(flattenItem.value, index, info);
|
|
}; // Auto active first item when list length or searchValue changed
|
|
|
|
|
|
(0,react.useEffect)(function () {
|
|
setActive(defaultActiveFirstOption !== false ? getEnabledActiveIndex(0) : -1);
|
|
}, [memoFlattenOptions.length, searchValue]); // https://github.com/ant-design/ant-design/issues/34975
|
|
|
|
var isSelected = react.useCallback(function (value) {
|
|
return rawValues.has(value) && mode !== 'combobox';
|
|
}, [mode, (0,toConsumableArray/* default */.Z)(rawValues).toString(), rawValues.size]); // Auto scroll to item position in single mode
|
|
|
|
(0,react.useEffect)(function () {
|
|
/**
|
|
* React will skip `onChange` when component update.
|
|
* `setActive` function will call root accessibility state update which makes re-render.
|
|
* So we need to delay to let Input component trigger onChange first.
|
|
*/
|
|
var timeoutId = setTimeout(function () {
|
|
if (!multiple && open && rawValues.size === 1) {
|
|
var value = Array.from(rawValues)[0];
|
|
var index = memoFlattenOptions.findIndex(function (_ref) {
|
|
var data = _ref.data;
|
|
return data.value === value;
|
|
});
|
|
|
|
if (index !== -1) {
|
|
setActive(index);
|
|
scrollIntoView(index);
|
|
}
|
|
}
|
|
}); // Force trigger scrollbar visible when open
|
|
|
|
if (open) {
|
|
var _listRef$current;
|
|
|
|
(_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.scrollTo(undefined);
|
|
}
|
|
|
|
return function () {
|
|
return clearTimeout(timeoutId);
|
|
};
|
|
}, [open, searchValue]); // ========================== Values ==========================
|
|
|
|
var onSelectValue = function onSelectValue(value) {
|
|
if (value !== undefined) {
|
|
onSelect(value, {
|
|
selected: !rawValues.has(value)
|
|
});
|
|
} // Single mode should always close by select
|
|
|
|
|
|
if (!multiple) {
|
|
toggleOpen(false);
|
|
}
|
|
}; // ========================= Keyboard =========================
|
|
|
|
|
|
react.useImperativeHandle(ref, function () {
|
|
return {
|
|
onKeyDown: function onKeyDown(event) {
|
|
var which = event.which,
|
|
ctrlKey = event.ctrlKey;
|
|
|
|
switch (which) {
|
|
// >>> Arrow keys & ctrl + n/p on Mac
|
|
case KeyCode/* default.N */.Z.N:
|
|
case KeyCode/* default.P */.Z.P:
|
|
case KeyCode/* default.UP */.Z.UP:
|
|
case KeyCode/* default.DOWN */.Z.DOWN:
|
|
{
|
|
var offset = 0;
|
|
|
|
if (which === KeyCode/* default.UP */.Z.UP) {
|
|
offset = -1;
|
|
} else if (which === KeyCode/* default.DOWN */.Z.DOWN) {
|
|
offset = 1;
|
|
} else if (isPlatformMac() && ctrlKey) {
|
|
if (which === KeyCode/* default.N */.Z.N) {
|
|
offset = 1;
|
|
} else if (which === KeyCode/* default.P */.Z.P) {
|
|
offset = -1;
|
|
}
|
|
}
|
|
|
|
if (offset !== 0) {
|
|
var nextActiveIndex = getEnabledActiveIndex(activeIndex + offset, offset);
|
|
scrollIntoView(nextActiveIndex);
|
|
setActive(nextActiveIndex, true);
|
|
}
|
|
|
|
break;
|
|
}
|
|
// >>> Select
|
|
|
|
case KeyCode/* default.ENTER */.Z.ENTER:
|
|
{
|
|
// value
|
|
var item = memoFlattenOptions[activeIndex];
|
|
|
|
if (item && !item.data.disabled) {
|
|
onSelectValue(item.value);
|
|
} else {
|
|
onSelectValue(undefined);
|
|
}
|
|
|
|
if (open) {
|
|
event.preventDefault();
|
|
}
|
|
|
|
break;
|
|
}
|
|
// >>> Close
|
|
|
|
case KeyCode/* default.ESC */.Z.ESC:
|
|
{
|
|
toggleOpen(false);
|
|
|
|
if (open) {
|
|
event.stopPropagation();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
onKeyUp: function onKeyUp() {},
|
|
scrollTo: function scrollTo(index) {
|
|
scrollIntoView(index);
|
|
}
|
|
};
|
|
}); // ========================== Render ==========================
|
|
|
|
if (memoFlattenOptions.length === 0) {
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
role: "listbox",
|
|
id: "".concat(id, "_list"),
|
|
className: "".concat(itemPrefixCls, "-empty"),
|
|
onMouseDown: onListMouseDown
|
|
}, notFoundContent);
|
|
}
|
|
|
|
var omitFieldNameList = Object.keys(fieldNames).map(function (key) {
|
|
return fieldNames[key];
|
|
});
|
|
|
|
var getLabel = function getLabel(item) {
|
|
return item.label;
|
|
};
|
|
|
|
var renderItem = function renderItem(index) {
|
|
var item = memoFlattenOptions[index];
|
|
if (!item) return null;
|
|
var itemData = item.data || {};
|
|
var value = itemData.value;
|
|
var group = item.group;
|
|
var attrs = (0,pickAttrs/* default */.Z)(itemData, true);
|
|
var mergedLabel = getLabel(item);
|
|
return item ? /*#__PURE__*/react.createElement("div", (0,esm_extends/* default */.Z)({
|
|
"aria-label": typeof mergedLabel === 'string' && !group ? mergedLabel : null
|
|
}, attrs, {
|
|
key: index,
|
|
role: group ? 'presentation' : 'option',
|
|
id: "".concat(id, "_list_").concat(index),
|
|
"aria-selected": isSelected(value)
|
|
}), value) : null;
|
|
};
|
|
|
|
return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
|
|
role: "listbox",
|
|
id: "".concat(id, "_list"),
|
|
style: {
|
|
height: 0,
|
|
width: 0,
|
|
overflow: 'hidden'
|
|
}
|
|
}, renderItem(activeIndex - 1), renderItem(activeIndex), renderItem(activeIndex + 1)), /*#__PURE__*/react.createElement(rc_virtual_list_es/* default */.Z, {
|
|
itemKey: "key",
|
|
ref: listRef,
|
|
data: memoFlattenOptions,
|
|
height: listHeight,
|
|
itemHeight: listItemHeight,
|
|
fullHeight: false,
|
|
onMouseDown: onListMouseDown,
|
|
onScroll: onPopupScroll,
|
|
virtual: virtual
|
|
}, function (item, itemIndex) {
|
|
var _classNames;
|
|
|
|
var group = item.group,
|
|
groupOption = item.groupOption,
|
|
data = item.data,
|
|
label = item.label,
|
|
value = item.value;
|
|
var key = data.key; // Group
|
|
|
|
if (group) {
|
|
var _data$title;
|
|
|
|
var groupTitle = (_data$title = data.title) !== null && _data$title !== void 0 ? _data$title : OptionList_isTitleType(label) ? label.toString() : undefined;
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: classnames_default()(itemPrefixCls, "".concat(itemPrefixCls, "-group")),
|
|
title: groupTitle
|
|
}, label !== undefined ? label : key);
|
|
}
|
|
|
|
var disabled = data.disabled,
|
|
title = data.title,
|
|
children = data.children,
|
|
style = data.style,
|
|
className = data.className,
|
|
otherProps = (0,objectWithoutProperties/* default */.Z)(data, OptionList_excluded);
|
|
|
|
var passedProps = (0,omit/* default */.Z)(otherProps, omitFieldNameList); // Option
|
|
|
|
var selected = isSelected(value);
|
|
var optionPrefixCls = "".concat(itemPrefixCls, "-option");
|
|
var optionClassName = classnames_default()(itemPrefixCls, optionPrefixCls, className, (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(optionPrefixCls, "-grouped"), groupOption), (0,defineProperty/* default */.Z)(_classNames, "".concat(optionPrefixCls, "-active"), activeIndex === itemIndex && !disabled), (0,defineProperty/* default */.Z)(_classNames, "".concat(optionPrefixCls, "-disabled"), disabled), (0,defineProperty/* default */.Z)(_classNames, "".concat(optionPrefixCls, "-selected"), selected), _classNames));
|
|
var mergedLabel = getLabel(item);
|
|
var iconVisible = !menuItemSelectedIcon || typeof menuItemSelectedIcon === 'function' || selected; // https://github.com/ant-design/ant-design/issues/34145
|
|
|
|
var content = typeof mergedLabel === 'number' ? mergedLabel : mergedLabel || value; // https://github.com/ant-design/ant-design/issues/26717
|
|
|
|
var optionTitle = OptionList_isTitleType(content) ? content.toString() : undefined;
|
|
|
|
if (title !== undefined) {
|
|
optionTitle = title;
|
|
}
|
|
|
|
return /*#__PURE__*/react.createElement("div", (0,esm_extends/* default */.Z)({}, (0,pickAttrs/* default */.Z)(passedProps), {
|
|
"aria-selected": selected,
|
|
className: optionClassName,
|
|
title: optionTitle,
|
|
onMouseMove: function onMouseMove() {
|
|
if (activeIndex === itemIndex || disabled) {
|
|
return;
|
|
}
|
|
|
|
setActive(itemIndex);
|
|
},
|
|
onClick: function onClick() {
|
|
if (!disabled) {
|
|
onSelectValue(value);
|
|
}
|
|
},
|
|
style: style
|
|
}), /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(optionPrefixCls, "-content")
|
|
}, content), /*#__PURE__*/react.isValidElement(menuItemSelectedIcon) || selected, iconVisible && /*#__PURE__*/react.createElement(es_TransBtn, {
|
|
className: "".concat(itemPrefixCls, "-option-state"),
|
|
customizeIcon: menuItemSelectedIcon,
|
|
customizeIconProps: {
|
|
isSelected: selected
|
|
}
|
|
}, selected ? '✓' : null));
|
|
}));
|
|
};
|
|
|
|
var RefOptionList = /*#__PURE__*/react.forwardRef(OptionList);
|
|
RefOptionList.displayName = 'OptionList';
|
|
/* harmony default export */ var es_OptionList = (RefOptionList);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/utils/warningPropsUtil.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function warningProps(props) {
|
|
var mode = props.mode,
|
|
options = props.options,
|
|
children = props.children,
|
|
backfill = props.backfill,
|
|
allowClear = props.allowClear,
|
|
placeholder = props.placeholder,
|
|
getInputElement = props.getInputElement,
|
|
showSearch = props.showSearch,
|
|
onSearch = props.onSearch,
|
|
defaultOpen = props.defaultOpen,
|
|
autoFocus = props.autoFocus,
|
|
labelInValue = props.labelInValue,
|
|
value = props.value,
|
|
inputValue = props.inputValue,
|
|
optionLabelProp = props.optionLabelProp;
|
|
var multiple = isMultiple(mode);
|
|
var mergedShowSearch = showSearch !== undefined ? showSearch : multiple || mode === 'combobox';
|
|
var mergedOptions = options || convertChildrenToData(children); // `tags` should not set option as disabled
|
|
|
|
warning(mode !== 'tags' || mergedOptions.every(function (opt) {
|
|
return !opt.disabled;
|
|
}), 'Please avoid setting option to disabled in tags mode since user can always type text as tag.'); // `combobox` & `tags` should option be `string` type
|
|
|
|
if (mode === 'tags' || mode === 'combobox') {
|
|
var hasNumberValue = mergedOptions.some(function (item) {
|
|
if (item.options) {
|
|
return item.options.some(function (opt) {
|
|
return typeof ('value' in opt ? opt.value : opt.key) === 'number';
|
|
});
|
|
}
|
|
|
|
return typeof ('value' in item ? item.value : item.key) === 'number';
|
|
});
|
|
warning(!hasNumberValue, '`value` of Option should not use number type when `mode` is `tags` or `combobox`.');
|
|
} // `combobox` should not use `optionLabelProp`
|
|
|
|
|
|
warning(mode !== 'combobox' || !optionLabelProp, '`combobox` mode not support `optionLabelProp`. Please set `value` on Option directly.'); // Only `combobox` support `backfill`
|
|
|
|
warning(mode === 'combobox' || !backfill, '`backfill` only works with `combobox` mode.'); // Only `combobox` support `getInputElement`
|
|
|
|
warning(mode === 'combobox' || !getInputElement, '`getInputElement` only work with `combobox` mode.'); // Customize `getInputElement` should not use `allowClear` & `placeholder`
|
|
|
|
noteOnce(mode !== 'combobox' || !getInputElement || !allowClear || !placeholder, 'Customize `getInputElement` should customize clear and placeholder logic instead of configuring `allowClear` and `placeholder`.'); // `onSearch` should use in `combobox` or `showSearch`
|
|
|
|
if (onSearch && !mergedShowSearch && mode !== 'combobox' && mode !== 'tags') {
|
|
warning(false, '`onSearch` should work with `showSearch` instead of use alone.');
|
|
}
|
|
|
|
noteOnce(!defaultOpen || autoFocus, '`defaultOpen` makes Select open without focus which means it will not close by click outside. You can set `autoFocus` if needed.');
|
|
|
|
if (value !== undefined && value !== null) {
|
|
var values = toArray(value);
|
|
warning(!labelInValue || values.every(function (val) {
|
|
return _typeof(val) === 'object' && ('key' in val || 'value' in val);
|
|
}), '`value` should in shape of `{ value: string | number, label?: ReactNode }` when you set `labelInValue` to `true`');
|
|
warning(!multiple || Array.isArray(value), '`value` should be array when `mode` is `multiple` or `tags`');
|
|
} // Syntactic sugar should use correct children type
|
|
|
|
|
|
if (children) {
|
|
var invalidateChildType = null;
|
|
toNodeArray(children).some(function (node) {
|
|
if (! /*#__PURE__*/React.isValidElement(node) || !node.type) {
|
|
return false;
|
|
}
|
|
|
|
var _ref = node,
|
|
type = _ref.type;
|
|
|
|
if (type.isSelectOption) {
|
|
return false;
|
|
}
|
|
|
|
if (type.isSelectOptGroup) {
|
|
var allChildrenValid = toNodeArray(node.props.children).every(function (subNode) {
|
|
if (! /*#__PURE__*/React.isValidElement(subNode) || !node.type || subNode.type.isSelectOption) {
|
|
return true;
|
|
}
|
|
|
|
invalidateChildType = subNode.type;
|
|
return false;
|
|
});
|
|
|
|
if (allChildrenValid) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
invalidateChildType = type;
|
|
return true;
|
|
});
|
|
|
|
if (invalidateChildType) {
|
|
warning(false, "`children` should be `Select.Option` or `Select.OptGroup` instead of `".concat(invalidateChildType.displayName || invalidateChildType.name || invalidateChildType, "`."));
|
|
}
|
|
|
|
warning(inputValue === undefined, '`inputValue` is deprecated, please use `searchValue` instead.');
|
|
}
|
|
} // value in Select option should not be null
|
|
// note: OptGroup has options too
|
|
|
|
|
|
function warningNullOptions(options, fieldNames) {
|
|
if (options) {
|
|
var recursiveOptions = function recursiveOptions(optionsList) {
|
|
var inGroup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
|
|
for (var i = 0; i < optionsList.length; i++) {
|
|
var option = optionsList[i];
|
|
|
|
if (option[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value] === null) {
|
|
warning(false, '`value` in Select options should not be `null`.');
|
|
return true;
|
|
}
|
|
|
|
if (!inGroup && Array.isArray(option[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.options]) && recursiveOptions(option[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.options], true)) {
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
recursiveOptions(options);
|
|
}
|
|
}
|
|
/* harmony default export */ var warningPropsUtil = ((/* unused pure expression or super */ null && (warningProps)));
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/Select.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var Select_excluded = ["id", "mode", "prefixCls", "backfill", "fieldNames", "inputValue", "searchValue", "onSearch", "autoClearSearchValue", "onSelect", "onDeselect", "dropdownMatchSelectWidth", "filterOption", "filterSort", "optionFilterProp", "optionLabelProp", "options", "children", "defaultActiveFirstOption", "menuItemSelectedIcon", "virtual", "listHeight", "listItemHeight", "value", "defaultValue", "labelInValue", "onChange"];
|
|
|
|
/**
|
|
* To match accessibility requirement, we always provide an input in the component.
|
|
* Other element will not set `tabIndex` to avoid `onBlur` sequence problem.
|
|
* For focused select, we set `aria-live="polite"` to update the accessibility content.
|
|
*
|
|
* ref:
|
|
* - keyboard: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role#Keyboard_interactions
|
|
*
|
|
* New api:
|
|
* - listHeight
|
|
* - listItemHeight
|
|
* - component
|
|
*
|
|
* Remove deprecated api:
|
|
* - multiple
|
|
* - tags
|
|
* - combobox
|
|
* - firstActiveValue
|
|
* - dropdownMenuStyle
|
|
* - openClassName (Not list in api)
|
|
*
|
|
* Update:
|
|
* - `backfill` only support `combobox` mode
|
|
* - `combobox` mode not support `labelInValue` since it's meaningless
|
|
* - `getInputElement` only support `combobox` mode
|
|
* - `onChange` return OptionData instead of ReactNode
|
|
* - `filterOption` `onChange` `onSelect` accept OptionData instead of ReactNode
|
|
* - `combobox` mode trigger `onChange` will get `undefined` if no `value` match in Option
|
|
* - `combobox` mode not support `optionLabelProp`
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var OMIT_DOM_PROPS = ['inputValue'];
|
|
|
|
function isRawValue(value) {
|
|
return !value || (0,esm_typeof/* default */.Z)(value) !== 'object';
|
|
}
|
|
|
|
var Select = /*#__PURE__*/react.forwardRef(function (props, ref) {
|
|
var id = props.id,
|
|
mode = props.mode,
|
|
_props$prefixCls = props.prefixCls,
|
|
prefixCls = _props$prefixCls === void 0 ? 'rc-select' : _props$prefixCls,
|
|
backfill = props.backfill,
|
|
fieldNames = props.fieldNames,
|
|
inputValue = props.inputValue,
|
|
searchValue = props.searchValue,
|
|
onSearch = props.onSearch,
|
|
_props$autoClearSearc = props.autoClearSearchValue,
|
|
autoClearSearchValue = _props$autoClearSearc === void 0 ? true : _props$autoClearSearc,
|
|
onSelect = props.onSelect,
|
|
onDeselect = props.onDeselect,
|
|
_props$dropdownMatchS = props.dropdownMatchSelectWidth,
|
|
dropdownMatchSelectWidth = _props$dropdownMatchS === void 0 ? true : _props$dropdownMatchS,
|
|
filterOption = props.filterOption,
|
|
filterSort = props.filterSort,
|
|
optionFilterProp = props.optionFilterProp,
|
|
optionLabelProp = props.optionLabelProp,
|
|
options = props.options,
|
|
children = props.children,
|
|
defaultActiveFirstOption = props.defaultActiveFirstOption,
|
|
menuItemSelectedIcon = props.menuItemSelectedIcon,
|
|
virtual = props.virtual,
|
|
_props$listHeight = props.listHeight,
|
|
listHeight = _props$listHeight === void 0 ? 200 : _props$listHeight,
|
|
_props$listItemHeight = props.listItemHeight,
|
|
listItemHeight = _props$listItemHeight === void 0 ? 20 : _props$listItemHeight,
|
|
value = props.value,
|
|
defaultValue = props.defaultValue,
|
|
labelInValue = props.labelInValue,
|
|
onChange = props.onChange,
|
|
restProps = (0,objectWithoutProperties/* default */.Z)(props, Select_excluded);
|
|
|
|
var mergedId = (0,useId/* default */.ZP)(id);
|
|
var multiple = BaseSelect_isMultiple(mode);
|
|
var childrenAsData = !!(!options && children);
|
|
var mergedFilterOption = react.useMemo(function () {
|
|
if (filterOption === undefined && mode === 'combobox') {
|
|
return false;
|
|
}
|
|
|
|
return filterOption;
|
|
}, [filterOption, mode]); // ========================= FieldNames =========================
|
|
|
|
var mergedFieldNames = react.useMemo(function () {
|
|
return fillFieldNames(fieldNames, childrenAsData);
|
|
},
|
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
[// We stringify fieldNames to avoid unnecessary re-renders.
|
|
JSON.stringify(fieldNames), childrenAsData]
|
|
/* eslint-enable react-hooks/exhaustive-deps */
|
|
); // =========================== Search ===========================
|
|
|
|
var _useMergedState = (0,useMergedState/* default */.Z)('', {
|
|
value: searchValue !== undefined ? searchValue : inputValue,
|
|
postState: function postState(search) {
|
|
return search || '';
|
|
}
|
|
}),
|
|
_useMergedState2 = (0,slicedToArray/* default */.Z)(_useMergedState, 2),
|
|
mergedSearchValue = _useMergedState2[0],
|
|
setSearchValue = _useMergedState2[1]; // =========================== Option ===========================
|
|
|
|
|
|
var parsedOptions = useOptions(options, children, mergedFieldNames, optionFilterProp, optionLabelProp);
|
|
var valueOptions = parsedOptions.valueOptions,
|
|
labelOptions = parsedOptions.labelOptions,
|
|
mergedOptions = parsedOptions.options; // ========================= Wrap Value =========================
|
|
|
|
var convert2LabelValues = react.useCallback(function (draftValues) {
|
|
// Convert to array
|
|
var valueList = commonUtil_toArray(draftValues); // Convert to labelInValue type
|
|
|
|
return valueList.map(function (val) {
|
|
var rawValue;
|
|
var rawLabel;
|
|
var rawKey;
|
|
var rawDisabled;
|
|
var rawTitle; // Fill label & value
|
|
|
|
if (isRawValue(val)) {
|
|
rawValue = val;
|
|
} else {
|
|
var _val$value;
|
|
|
|
rawKey = val.key;
|
|
rawLabel = val.label;
|
|
rawValue = (_val$value = val.value) !== null && _val$value !== void 0 ? _val$value : rawKey;
|
|
}
|
|
|
|
var option = valueOptions.get(rawValue);
|
|
|
|
if (option) {
|
|
var _option$key;
|
|
|
|
// Fill missing props
|
|
if (rawLabel === undefined) rawLabel = option === null || option === void 0 ? void 0 : option[optionLabelProp || mergedFieldNames.label];
|
|
if (rawKey === undefined) rawKey = (_option$key = option === null || option === void 0 ? void 0 : option.key) !== null && _option$key !== void 0 ? _option$key : rawValue;
|
|
rawDisabled = option === null || option === void 0 ? void 0 : option.disabled;
|
|
rawTitle = option === null || option === void 0 ? void 0 : option.title; // Warning if label not same as provided
|
|
|
|
if (false) { var optionLabel; }
|
|
}
|
|
|
|
return {
|
|
label: rawLabel,
|
|
value: rawValue,
|
|
key: rawKey,
|
|
disabled: rawDisabled,
|
|
title: rawTitle
|
|
};
|
|
});
|
|
}, [mergedFieldNames, optionLabelProp, valueOptions]); // =========================== Values ===========================
|
|
|
|
var _useMergedState3 = (0,useMergedState/* default */.Z)(defaultValue, {
|
|
value: value
|
|
}),
|
|
_useMergedState4 = (0,slicedToArray/* default */.Z)(_useMergedState3, 2),
|
|
internalValue = _useMergedState4[0],
|
|
setInternalValue = _useMergedState4[1]; // Merged value with LabelValueType
|
|
|
|
|
|
var rawLabeledValues = react.useMemo(function () {
|
|
var _values$;
|
|
|
|
var values = convert2LabelValues(internalValue); // combobox no need save value when it's no value
|
|
|
|
if (mode === 'combobox' && !((_values$ = values[0]) !== null && _values$ !== void 0 && _values$.value)) {
|
|
return [];
|
|
}
|
|
|
|
return values;
|
|
}, [internalValue, convert2LabelValues, mode]); // Fill label with cache to avoid option remove
|
|
|
|
var _useCache = useCache(rawLabeledValues, valueOptions),
|
|
_useCache2 = (0,slicedToArray/* default */.Z)(_useCache, 2),
|
|
mergedValues = _useCache2[0],
|
|
getMixedOption = _useCache2[1];
|
|
|
|
var displayValues = react.useMemo(function () {
|
|
// `null` need show as placeholder instead
|
|
// https://github.com/ant-design/ant-design/issues/25057
|
|
if (!mode && mergedValues.length === 1) {
|
|
var firstValue = mergedValues[0];
|
|
|
|
if (firstValue.value === null && (firstValue.label === null || firstValue.label === undefined)) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
return mergedValues.map(function (item) {
|
|
var _item$label;
|
|
|
|
return (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, item), {}, {
|
|
label: (_item$label = item.label) !== null && _item$label !== void 0 ? _item$label : item.value
|
|
});
|
|
});
|
|
}, [mode, mergedValues]);
|
|
/** Convert `displayValues` to raw value type set */
|
|
|
|
var rawValues = react.useMemo(function () {
|
|
return new Set(mergedValues.map(function (val) {
|
|
return val.value;
|
|
}));
|
|
}, [mergedValues]);
|
|
react.useEffect(function () {
|
|
if (mode === 'combobox') {
|
|
var _mergedValues$;
|
|
|
|
var strValue = (_mergedValues$ = mergedValues[0]) === null || _mergedValues$ === void 0 ? void 0 : _mergedValues$.value;
|
|
setSearchValue(hasValue(strValue) ? String(strValue) : '');
|
|
}
|
|
}, [mergedValues]); // ======================= Display Option =======================
|
|
// Create a placeholder item if not exist in `options`
|
|
|
|
var createTagOption = useRefFunc(function (val, label) {
|
|
var _ref;
|
|
|
|
var mergedLabel = label !== null && label !== void 0 ? label : val;
|
|
return _ref = {}, (0,defineProperty/* default */.Z)(_ref, mergedFieldNames.value, val), (0,defineProperty/* default */.Z)(_ref, mergedFieldNames.label, mergedLabel), _ref;
|
|
}); // Fill tag as option if mode is `tags`
|
|
|
|
var filledTagOptions = react.useMemo(function () {
|
|
if (mode !== 'tags') {
|
|
return mergedOptions;
|
|
} // >>> Tag mode
|
|
|
|
|
|
var cloneOptions = (0,toConsumableArray/* default */.Z)(mergedOptions); // Check if value exist in options (include new patch item)
|
|
|
|
|
|
var existOptions = function existOptions(val) {
|
|
return valueOptions.has(val);
|
|
}; // Fill current value as option
|
|
|
|
|
|
(0,toConsumableArray/* default */.Z)(mergedValues).sort(function (a, b) {
|
|
return a.value < b.value ? -1 : 1;
|
|
}).forEach(function (item) {
|
|
var val = item.value;
|
|
|
|
if (!existOptions(val)) {
|
|
cloneOptions.push(createTagOption(val, item.label));
|
|
}
|
|
});
|
|
|
|
return cloneOptions;
|
|
}, [createTagOption, mergedOptions, valueOptions, mergedValues, mode]);
|
|
var filteredOptions = useFilterOptions(filledTagOptions, mergedFieldNames, mergedSearchValue, mergedFilterOption, optionFilterProp); // Fill options with search value if needed
|
|
|
|
var filledSearchOptions = react.useMemo(function () {
|
|
if (mode !== 'tags' || !mergedSearchValue || filteredOptions.some(function (item) {
|
|
return item[optionFilterProp || 'value'] === mergedSearchValue;
|
|
})) {
|
|
return filteredOptions;
|
|
} // Fill search value as option
|
|
|
|
|
|
return [createTagOption(mergedSearchValue)].concat((0,toConsumableArray/* default */.Z)(filteredOptions));
|
|
}, [createTagOption, optionFilterProp, mode, filteredOptions, mergedSearchValue]);
|
|
var orderedFilteredOptions = react.useMemo(function () {
|
|
if (!filterSort) {
|
|
return filledSearchOptions;
|
|
}
|
|
|
|
return (0,toConsumableArray/* default */.Z)(filledSearchOptions).sort(function (a, b) {
|
|
return filterSort(a, b);
|
|
});
|
|
}, [filledSearchOptions, filterSort]);
|
|
var displayOptions = react.useMemo(function () {
|
|
return flattenOptions(orderedFilteredOptions, {
|
|
fieldNames: mergedFieldNames,
|
|
childrenAsData: childrenAsData
|
|
});
|
|
}, [orderedFilteredOptions, mergedFieldNames, childrenAsData]); // =========================== Change ===========================
|
|
|
|
var triggerChange = function triggerChange(values) {
|
|
var labeledValues = convert2LabelValues(values);
|
|
setInternalValue(labeledValues);
|
|
|
|
if (onChange && ( // Trigger event only when value changed
|
|
labeledValues.length !== mergedValues.length || labeledValues.some(function (newVal, index) {
|
|
var _mergedValues$index;
|
|
|
|
return ((_mergedValues$index = mergedValues[index]) === null || _mergedValues$index === void 0 ? void 0 : _mergedValues$index.value) !== (newVal === null || newVal === void 0 ? void 0 : newVal.value);
|
|
}))) {
|
|
var returnValues = labelInValue ? labeledValues : labeledValues.map(function (v) {
|
|
return v.value;
|
|
});
|
|
var returnOptions = labeledValues.map(function (v) {
|
|
return injectPropsWithOption(getMixedOption(v.value));
|
|
});
|
|
onChange( // Value
|
|
multiple ? returnValues : returnValues[0], // Option
|
|
multiple ? returnOptions : returnOptions[0]);
|
|
}
|
|
}; // ======================= Accessibility ========================
|
|
|
|
|
|
var _React$useState = react.useState(null),
|
|
_React$useState2 = (0,slicedToArray/* default */.Z)(_React$useState, 2),
|
|
activeValue = _React$useState2[0],
|
|
setActiveValue = _React$useState2[1];
|
|
|
|
var _React$useState3 = react.useState(0),
|
|
_React$useState4 = (0,slicedToArray/* default */.Z)(_React$useState3, 2),
|
|
accessibilityIndex = _React$useState4[0],
|
|
setAccessibilityIndex = _React$useState4[1];
|
|
|
|
var mergedDefaultActiveFirstOption = defaultActiveFirstOption !== undefined ? defaultActiveFirstOption : mode !== 'combobox';
|
|
var onActiveValue = react.useCallback(function (active, index) {
|
|
var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
_ref2$source = _ref2.source,
|
|
source = _ref2$source === void 0 ? 'keyboard' : _ref2$source;
|
|
|
|
setAccessibilityIndex(index);
|
|
|
|
if (backfill && mode === 'combobox' && active !== null && source === 'keyboard') {
|
|
setActiveValue(String(active));
|
|
}
|
|
}, [backfill, mode]); // ========================= OptionList =========================
|
|
|
|
var triggerSelect = function triggerSelect(val, selected, type) {
|
|
var getSelectEnt = function getSelectEnt() {
|
|
var _option$key2;
|
|
|
|
var option = getMixedOption(val);
|
|
return [labelInValue ? {
|
|
label: option === null || option === void 0 ? void 0 : option[mergedFieldNames.label],
|
|
value: val,
|
|
key: (_option$key2 = option === null || option === void 0 ? void 0 : option.key) !== null && _option$key2 !== void 0 ? _option$key2 : val
|
|
} : val, injectPropsWithOption(option)];
|
|
};
|
|
|
|
if (selected && onSelect) {
|
|
var _getSelectEnt = getSelectEnt(),
|
|
_getSelectEnt2 = (0,slicedToArray/* default */.Z)(_getSelectEnt, 2),
|
|
wrappedValue = _getSelectEnt2[0],
|
|
_option = _getSelectEnt2[1];
|
|
|
|
onSelect(wrappedValue, _option);
|
|
} else if (!selected && onDeselect && type !== 'clear') {
|
|
var _getSelectEnt3 = getSelectEnt(),
|
|
_getSelectEnt4 = (0,slicedToArray/* default */.Z)(_getSelectEnt3, 2),
|
|
_wrappedValue = _getSelectEnt4[0],
|
|
_option2 = _getSelectEnt4[1];
|
|
|
|
onDeselect(_wrappedValue, _option2);
|
|
}
|
|
}; // Used for OptionList selection
|
|
|
|
|
|
var onInternalSelect = useRefFunc(function (val, info) {
|
|
var cloneValues; // Single mode always trigger select only with option list
|
|
|
|
var mergedSelect = multiple ? info.selected : true;
|
|
|
|
if (mergedSelect) {
|
|
cloneValues = multiple ? [].concat((0,toConsumableArray/* default */.Z)(mergedValues), [val]) : [val];
|
|
} else {
|
|
cloneValues = mergedValues.filter(function (v) {
|
|
return v.value !== val;
|
|
});
|
|
}
|
|
|
|
triggerChange(cloneValues);
|
|
triggerSelect(val, mergedSelect); // Clean search value if single or configured
|
|
|
|
if (mode === 'combobox') {
|
|
// setSearchValue(String(val));
|
|
setActiveValue('');
|
|
} else if (!BaseSelect_isMultiple || autoClearSearchValue) {
|
|
setSearchValue('');
|
|
setActiveValue('');
|
|
}
|
|
}); // ======================= Display Change =======================
|
|
// BaseSelect display values change
|
|
|
|
var onDisplayValuesChange = function onDisplayValuesChange(nextValues, info) {
|
|
triggerChange(nextValues);
|
|
var type = info.type,
|
|
values = info.values;
|
|
|
|
if (type === 'remove' || type === 'clear') {
|
|
values.forEach(function (item) {
|
|
triggerSelect(item.value, false, type);
|
|
});
|
|
}
|
|
}; // =========================== Search ===========================
|
|
|
|
|
|
var onInternalSearch = function onInternalSearch(searchText, info) {
|
|
setSearchValue(searchText);
|
|
setActiveValue(null); // [Submit] Tag mode should flush input
|
|
|
|
if (info.source === 'submit') {
|
|
var formatted = (searchText || '').trim(); // prevent empty tags from appearing when you click the Enter button
|
|
|
|
if (formatted) {
|
|
var newRawValues = Array.from(new Set([].concat((0,toConsumableArray/* default */.Z)(rawValues), [formatted])));
|
|
triggerChange(newRawValues);
|
|
triggerSelect(formatted, true);
|
|
setSearchValue('');
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (info.source !== 'blur') {
|
|
if (mode === 'combobox') {
|
|
triggerChange(searchText);
|
|
}
|
|
|
|
onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchText);
|
|
}
|
|
};
|
|
|
|
var onInternalSearchSplit = function onInternalSearchSplit(words) {
|
|
var patchValues = words;
|
|
|
|
if (mode !== 'tags') {
|
|
patchValues = words.map(function (word) {
|
|
var opt = labelOptions.get(word);
|
|
return opt === null || opt === void 0 ? void 0 : opt.value;
|
|
}).filter(function (val) {
|
|
return val !== undefined;
|
|
});
|
|
}
|
|
|
|
var newRawValues = Array.from(new Set([].concat((0,toConsumableArray/* default */.Z)(rawValues), (0,toConsumableArray/* default */.Z)(patchValues))));
|
|
triggerChange(newRawValues);
|
|
newRawValues.forEach(function (newRawValue) {
|
|
triggerSelect(newRawValue, true);
|
|
});
|
|
}; // ========================== Context ===========================
|
|
|
|
|
|
var selectContext = react.useMemo(function () {
|
|
var realVirtual = virtual !== false && dropdownMatchSelectWidth !== false;
|
|
return (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, parsedOptions), {}, {
|
|
flattenOptions: displayOptions,
|
|
onActiveValue: onActiveValue,
|
|
defaultActiveFirstOption: mergedDefaultActiveFirstOption,
|
|
onSelect: onInternalSelect,
|
|
menuItemSelectedIcon: menuItemSelectedIcon,
|
|
rawValues: rawValues,
|
|
fieldNames: mergedFieldNames,
|
|
virtual: realVirtual,
|
|
listHeight: listHeight,
|
|
listItemHeight: listItemHeight,
|
|
childrenAsData: childrenAsData
|
|
});
|
|
}, [parsedOptions, displayOptions, onActiveValue, mergedDefaultActiveFirstOption, onInternalSelect, menuItemSelectedIcon, rawValues, mergedFieldNames, virtual, dropdownMatchSelectWidth, listHeight, listItemHeight, childrenAsData]); // ========================== Warning ===========================
|
|
|
|
if (false) {} // ==============================================================
|
|
// == Render ==
|
|
// ==============================================================
|
|
|
|
|
|
return /*#__PURE__*/react.createElement(es_SelectContext.Provider, {
|
|
value: selectContext
|
|
}, /*#__PURE__*/react.createElement(es_BaseSelect, (0,esm_extends/* default */.Z)({}, restProps, {
|
|
// >>> MISC
|
|
id: mergedId,
|
|
prefixCls: prefixCls,
|
|
ref: ref,
|
|
omitDomProps: OMIT_DOM_PROPS,
|
|
mode: mode // >>> Values
|
|
,
|
|
displayValues: displayValues,
|
|
onDisplayValuesChange: onDisplayValuesChange // >>> Search
|
|
,
|
|
searchValue: mergedSearchValue,
|
|
onSearch: onInternalSearch,
|
|
autoClearSearchValue: autoClearSearchValue,
|
|
onSearchSplit: onInternalSearchSplit,
|
|
dropdownMatchSelectWidth: dropdownMatchSelectWidth // >>> OptionList
|
|
,
|
|
OptionList: es_OptionList,
|
|
emptyOptions: !displayOptions.length // >>> Accessibility
|
|
,
|
|
activeValue: activeValue,
|
|
activeDescendantId: "".concat(mergedId, "_list_").concat(accessibilityIndex)
|
|
})));
|
|
});
|
|
|
|
if (false) {}
|
|
|
|
var TypedSelect = Select;
|
|
TypedSelect.Option = es_Option;
|
|
TypedSelect.OptGroup = es_OptGroup;
|
|
/* harmony default export */ var es_Select = (TypedSelect);
|
|
;// CONCATENATED MODULE: ./node_modules/rc-select/es/index.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* harmony default export */ var rc_select_es = (es_Select);
|
|
|
|
/***/ })
|
|
|
|
}]); |