one-design-next 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cascader/index.d.ts +2 -6
- package/dist/cascader/index.js +28 -143
- package/dist/layout/huxuan-layout.js +2 -6
- package/package.json +1 -1
package/dist/cascader/index.d.ts
CHANGED
|
@@ -44,12 +44,8 @@ export interface BaseCascaderProps extends Omit<RcCascaderProps<DefaultOptionTyp
|
|
|
44
44
|
separator?: string;
|
|
45
45
|
/** 自定义下拉列表中每一项的渲染(rc-cascader 原生支持) */
|
|
46
46
|
optionRender?: (option: DefaultOptionType) => React.ReactNode;
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
* - `true`:选中非叶节点并关闭下拉
|
|
50
|
-
* - `'keep-open'`:选中非叶节点并触发 onChange,但保持下拉展开(子菜单继续展开)
|
|
51
|
-
*/
|
|
52
|
-
changeOnSelect?: boolean | 'keep-open';
|
|
47
|
+
/** 点击非叶节点内容区域时也触发 onChange(下拉保持展开,子菜单继续展开) */
|
|
48
|
+
changeOnSelect?: boolean;
|
|
53
49
|
}
|
|
54
50
|
export type CascaderProps<V = (string | number)[] | null> = BaseCascaderProps & {
|
|
55
51
|
mode?: 'single' | 'multiple';
|
package/dist/cascader/index.js
CHANGED
|
@@ -3,11 +3,10 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
3
3
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
4
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
5
5
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
7
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (_e) { function e(_x) { return _e.apply(this, arguments); } e.toString = function () { return _e.toString(); }; return e; }(function (e) { throw e; }), f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function (_e2) { function e(_x2) { return _e2.apply(this, arguments); } e.toString = function () { return _e2.toString(); }; return e; }(function (e) { didErr = true; err = e; }), f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
9
6
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
7
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
8
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
9
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
10
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
11
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
12
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -90,41 +89,6 @@ function CascaderInner(_ref) {
|
|
|
90
89
|
var processedOptions = React.useMemo(function () {
|
|
91
90
|
return processOptions(options, mergedFieldNames, optionPopoverProps);
|
|
92
91
|
}, [options, mergedFieldNames, optionPopoverProps]);
|
|
93
|
-
|
|
94
|
-
// 根据完整路径从 processedOptions 中查找对应的 option 对象
|
|
95
|
-
var resolvePathOptions = React.useCallback(function (fullPath) {
|
|
96
|
-
var result = [];
|
|
97
|
-
var currentOptions = processedOptions;
|
|
98
|
-
var vField = mergedFieldNames.value || 'value';
|
|
99
|
-
var cField = mergedFieldNames.children || 'children';
|
|
100
|
-
var _iterator = _createForOfIteratorHelper(fullPath),
|
|
101
|
-
_step;
|
|
102
|
-
try {
|
|
103
|
-
var _loop = function _loop() {
|
|
104
|
-
var val = _step.value;
|
|
105
|
-
if (!currentOptions) return 0; // break
|
|
106
|
-
var found = currentOptions.find(function (opt) {
|
|
107
|
-
return opt[vField] === val;
|
|
108
|
-
});
|
|
109
|
-
if (found) {
|
|
110
|
-
result.push(found);
|
|
111
|
-
currentOptions = found[cField];
|
|
112
|
-
} else {
|
|
113
|
-
return 0; // break
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
_ret;
|
|
117
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
118
|
-
_ret = _loop();
|
|
119
|
-
if (_ret === 0) break;
|
|
120
|
-
}
|
|
121
|
-
} catch (err) {
|
|
122
|
-
_iterator.e(err);
|
|
123
|
-
} finally {
|
|
124
|
-
_iterator.f();
|
|
125
|
-
}
|
|
126
|
-
return result;
|
|
127
|
-
}, [processedOptions, mergedFieldNames]);
|
|
128
92
|
var prefixCls = 'odn-select';
|
|
129
93
|
var _useIcons = useIcons(_objectSpread(_objectSpread({}, restProps), {}, {
|
|
130
94
|
hasFeedback: false,
|
|
@@ -211,70 +175,6 @@ function CascaderInner(_ref) {
|
|
|
211
175
|
}
|
|
212
176
|
};
|
|
213
177
|
|
|
214
|
-
// 单选模式下 pathKey → 带类型的 fullPath 映射,用于事件委托时还原路径
|
|
215
|
-
var pathKeyMap = React.useMemo(function () {
|
|
216
|
-
if (mode !== 'single') return null;
|
|
217
|
-
var SPLIT = '__RC_CASCADER_SPLIT__';
|
|
218
|
-
var map = new Map();
|
|
219
|
-
var traverse = function traverse(opts) {
|
|
220
|
-
if (!opts) return;
|
|
221
|
-
var _iterator2 = _createForOfIteratorHelper(opts),
|
|
222
|
-
_step2;
|
|
223
|
-
try {
|
|
224
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
225
|
-
var opt = _step2.value;
|
|
226
|
-
var fullPath = opt.__fullPath__;
|
|
227
|
-
if (fullPath) {
|
|
228
|
-
map.set(fullPath.join(SPLIT), fullPath);
|
|
229
|
-
}
|
|
230
|
-
var cField = mergedFieldNames.children || 'children';
|
|
231
|
-
var children = opt[cField];
|
|
232
|
-
if (children && Array.isArray(children)) traverse(children);
|
|
233
|
-
}
|
|
234
|
-
} catch (err) {
|
|
235
|
-
_iterator2.e(err);
|
|
236
|
-
} finally {
|
|
237
|
-
_iterator2.f();
|
|
238
|
-
}
|
|
239
|
-
};
|
|
240
|
-
traverse(processedOptions);
|
|
241
|
-
return map;
|
|
242
|
-
}, [mode, processedOptions, mergedFieldNames]);
|
|
243
|
-
|
|
244
|
-
// 单选模式下:通过 onClickCapture 在 dropdown 层面拦截点击
|
|
245
|
-
// 点击展开图标区域 → 放行,由 rc-cascader 处理展开
|
|
246
|
-
// 点击其他区域(内容 / padding) → 拦截,手动选中 + 关闭
|
|
247
|
-
var handleSingleSelectCapture = React.useCallback(function (e) {
|
|
248
|
-
if (!pathKeyMap) return;
|
|
249
|
-
var target = e.target;
|
|
250
|
-
var expandIcon = target.closest('.odn-cascader-menu-item-expand-icon');
|
|
251
|
-
var menuItem = target.closest('.odn-cascader-menu-item');
|
|
252
|
-
if (!menuItem || expandIcon) return;
|
|
253
|
-
if (menuItem.classList.contains('odn-cascader-menu-item-disabled')) return;
|
|
254
|
-
if (menuItem.getAttribute('title') === 'divider') return;
|
|
255
|
-
var pathKey = menuItem.getAttribute('data-path-key');
|
|
256
|
-
if (!pathKey) return;
|
|
257
|
-
var fullPath = pathKeyMap.get(pathKey);
|
|
258
|
-
if (!fullPath) return;
|
|
259
|
-
var pathOptions = resolvePathOptions(fullPath);
|
|
260
|
-
var lastOption = pathOptions[pathOptions.length - 1];
|
|
261
|
-
if (!lastOption) return;
|
|
262
|
-
var cField = mergedFieldNames.children || 'children';
|
|
263
|
-
var hasChildren = lastOption[cField] && Array.isArray(lastOption[cField]) && lastOption[cField].length > 0;
|
|
264
|
-
|
|
265
|
-
// 非叶节点仅在 changeOnSelect 时才可点击选中
|
|
266
|
-
if (hasChildren && !changeOnSelectProp) return;
|
|
267
|
-
|
|
268
|
-
// keep-open:触发 onChange 但不关闭下拉,让 rc-cascader 继续展开子菜单
|
|
269
|
-
if (hasChildren && changeOnSelectProp === 'keep-open') {
|
|
270
|
-
handleChange(fullPath, pathOptions, e);
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
e.stopPropagation();
|
|
274
|
-
handleChange(fullPath, pathOptions, e);
|
|
275
|
-
handleVisibleChange(false);
|
|
276
|
-
}, [pathKeyMap, mergedFieldNames, changeOnSelectProp, resolvePathOptions, handleChange, handleVisibleChange]);
|
|
277
|
-
|
|
278
178
|
// 转换 value 类型以兼容 rc-cascader
|
|
279
179
|
var rcValue = value === null ? undefined : value;
|
|
280
180
|
var rcDefaultValue = defaultValue === null ? undefined : defaultValue;
|
|
@@ -371,49 +271,34 @@ function CascaderInner(_ref) {
|
|
|
371
271
|
},
|
|
372
272
|
dropdownMatchSelectWidth: dropdownMatchSelectWidth,
|
|
373
273
|
optionRender: optionRenderProp,
|
|
374
|
-
|
|
375
|
-
// 使展开图标点击时 isSelectable 对非叶节点返回 false,只触发展开
|
|
376
|
-
changeOnSelect: mode === 'single' ? false : !!changeOnSelectProp
|
|
274
|
+
changeOnSelect: !!changeOnSelectProp
|
|
377
275
|
});
|
|
378
|
-
var dropdownRender =
|
|
379
|
-
var
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
setSearchValue(value);
|
|
394
|
-
}
|
|
395
|
-
if (_onSearch) {
|
|
396
|
-
_onSearch(value);
|
|
397
|
-
}
|
|
398
|
-
},
|
|
399
|
-
onKeyDown: function onKeyDown(e) {
|
|
400
|
-
e.stopPropagation();
|
|
276
|
+
var dropdownRender = showInnerSearch ? function (menu) {
|
|
277
|
+
var searchNode = /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
278
|
+
className: "odn-select-dropdown-search"
|
|
279
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
280
|
+
name: "search",
|
|
281
|
+
className: "odn-select-dropdown-search-icon"
|
|
282
|
+
}), /*#__PURE__*/React.createElement("input", {
|
|
283
|
+
ref: dropdownSearchInputRef,
|
|
284
|
+
className: "odn-select-dropdown-search-input",
|
|
285
|
+
placeholder: "\u8BF7\u8F93\u5165",
|
|
286
|
+
value: searchValue,
|
|
287
|
+
onChange: function onChange(e) {
|
|
288
|
+
var value = e.target.value;
|
|
289
|
+
if (searchValueProp === undefined) {
|
|
290
|
+
setSearchValue(value);
|
|
401
291
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
}, rendered);
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
return searchRenderFn;
|
|
416
|
-
}, [showInnerSearch, searchValue, searchValueProp, _onSearch, mode, handleSingleSelectCapture]);
|
|
292
|
+
if (_onSearch) {
|
|
293
|
+
_onSearch(value);
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
onKeyDown: function onKeyDown(e) {
|
|
297
|
+
e.stopPropagation();
|
|
298
|
+
}
|
|
299
|
+
})));
|
|
300
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, searchNode, menu);
|
|
301
|
+
} : undefined;
|
|
417
302
|
if (mode === 'multiple') {
|
|
418
303
|
return /*#__PURE__*/React.createElement(RcCascader, _extends({}, commonProps, {
|
|
419
304
|
value: rcValue,
|
|
@@ -210,16 +210,12 @@ function CollectionPanel() {
|
|
|
210
210
|
})), /*#__PURE__*/React.createElement("div", {
|
|
211
211
|
"data-odn-huxuan-layout-collection-footer": true
|
|
212
212
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
213
|
+
icon: "plus",
|
|
213
214
|
style: {
|
|
214
215
|
width: '100%',
|
|
215
216
|
justifyContent: 'center'
|
|
216
217
|
}
|
|
217
|
-
},
|
|
218
|
-
name: "plus",
|
|
219
|
-
style: {
|
|
220
|
-
marginRight: 4
|
|
221
|
-
}
|
|
222
|
-
}), "\u65B0\u5EFA\u8FBE\u4EBA\u540D\u5355")));
|
|
218
|
+
}, "\u65B0\u5EFA\u8FBE\u4EBA\u540D\u5355")));
|
|
223
219
|
}
|
|
224
220
|
|
|
225
221
|
/** 导航下拉面板:hover 触发 */
|