useLazyKVMap.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = useLazyKVMap;
  7. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  8. var _vue = require("vue");
  9. function useLazyKVMap(dataRef, childrenColumnNameRef, getRowKeyRef) {
  10. var mapCacheRef = (0, _vue.shallowRef)({});
  11. (0, _vue.watch)([dataRef, childrenColumnNameRef, getRowKeyRef], function () {
  12. var kvMap = new Map();
  13. var getRowKey = getRowKeyRef.value;
  14. var childrenColumnName = childrenColumnNameRef.value;
  15. /* eslint-disable no-inner-declarations */
  16. function dig(records) {
  17. records.forEach(function (record, index) {
  18. var rowKey = getRowKey(record, index);
  19. kvMap.set(rowKey, record);
  20. if (record && (0, _typeof2.default)(record) === 'object' && childrenColumnName in record) {
  21. dig(record[childrenColumnName] || []);
  22. }
  23. });
  24. }
  25. /* eslint-enable */
  26. dig(dataRef.value);
  27. mapCacheRef.value = {
  28. kvMap: kvMap
  29. };
  30. }, {
  31. deep: true,
  32. immediate: true
  33. });
  34. function getRecordByKey(key) {
  35. return mapCacheRef.value.kvMap.get(key);
  36. }
  37. return [getRecordByKey];
  38. }