useSearchOptions.js 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = exports.SEARCH_MARK = void 0;
  7. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  8. var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  10. var _vue = require("vue");
  11. var SEARCH_MARK = '__rc_cascader_search_mark__';
  12. exports.SEARCH_MARK = SEARCH_MARK;
  13. var defaultFilter = function defaultFilter(search, options, _ref) {
  14. var label = _ref.label;
  15. return options.some(function (opt) {
  16. return String(opt[label]).toLowerCase().includes(search.toLowerCase());
  17. });
  18. };
  19. var defaultRender = function defaultRender(_ref2) {
  20. var path = _ref2.path,
  21. fieldNames = _ref2.fieldNames;
  22. return path.map(function (opt) {
  23. return opt[fieldNames.label];
  24. }).join(' / ');
  25. };
  26. var _default = function _default(search, options, fieldNames, prefixCls, config, changeOnSelect) {
  27. return (0, _vue.computed)(function () {
  28. var _config$value = config.value,
  29. _config$value$filter = _config$value.filter,
  30. filter = _config$value$filter === void 0 ? defaultFilter : _config$value$filter,
  31. _config$value$render = _config$value.render,
  32. render = _config$value$render === void 0 ? defaultRender : _config$value$render,
  33. _config$value$limit = _config$value.limit,
  34. limit = _config$value$limit === void 0 ? 50 : _config$value$limit,
  35. sort = _config$value.sort;
  36. var filteredOptions = [];
  37. if (!search.value) {
  38. return [];
  39. }
  40. function dig(list, pathOptions) {
  41. list.forEach(function (option) {
  42. // Perf saving when `sort` is disabled and `limit` is provided
  43. if (!sort && limit > 0 && filteredOptions.length >= limit) {
  44. return;
  45. }
  46. var connectedPathOptions = [].concat((0, _toConsumableArray2.default)(pathOptions), [option]);
  47. var children = option[fieldNames.value.children];
  48. // If current option is filterable
  49. if (
  50. // If is leaf option
  51. !children || children.length === 0 ||
  52. // If is changeOnSelect
  53. changeOnSelect.value) {
  54. if (filter(search.value, connectedPathOptions, {
  55. label: fieldNames.value.label
  56. })) {
  57. var _objectSpread2;
  58. filteredOptions.push((0, _objectSpread3.default)((0, _objectSpread3.default)({}, option), {}, (_objectSpread2 = {}, (0, _defineProperty2.default)(_objectSpread2, fieldNames.value.label, render({
  59. inputValue: search.value,
  60. path: connectedPathOptions,
  61. prefixCls: prefixCls.value,
  62. fieldNames: fieldNames.value
  63. })), (0, _defineProperty2.default)(_objectSpread2, SEARCH_MARK, connectedPathOptions), _objectSpread2)));
  64. }
  65. }
  66. if (children) {
  67. dig(option[fieldNames.value.children], connectedPathOptions);
  68. }
  69. });
  70. }
  71. dig(options.value, []);
  72. // Do sort
  73. if (sort) {
  74. filteredOptions.sort(function (a, b) {
  75. return sort(a[SEARCH_MARK], b[SEARCH_MARK], search.value, fieldNames.value);
  76. });
  77. }
  78. return limit > 0 ? filteredOptions.slice(0, limit) : filteredOptions;
  79. });
  80. };
  81. exports.default = _default;