useCache.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  8. var _vue = require("vue");
  9. /**
  10. * Cache `value` related LabeledValue & options.
  11. */
  12. var _default = (labeledValues, valueOptions) => {
  13. const cacheRef = (0, _vue.shallowRef)({
  14. values: new Map(),
  15. options: new Map()
  16. });
  17. const filledLabeledValues = (0, _vue.computed)(() => {
  18. const {
  19. values: prevValueCache,
  20. options: prevOptionCache
  21. } = cacheRef.value;
  22. // Fill label by cache
  23. const patchedValues = labeledValues.value.map(item => {
  24. var _a;
  25. if (item.label === undefined) {
  26. return (0, _extends2.default)((0, _extends2.default)({}, item), {
  27. label: (_a = prevValueCache.get(item.value)) === null || _a === void 0 ? void 0 : _a.label
  28. });
  29. }
  30. return item;
  31. });
  32. // Refresh cache
  33. const valueCache = new Map();
  34. const optionCache = new Map();
  35. patchedValues.forEach(item => {
  36. valueCache.set(item.value, item);
  37. optionCache.set(item.value, valueOptions.value.get(item.value) || prevOptionCache.get(item.value));
  38. });
  39. cacheRef.value.values = valueCache;
  40. cacheRef.value.options = optionCache;
  41. return patchedValues;
  42. });
  43. const getOption = val => valueOptions.value.get(val) || cacheRef.value.options.get(val);
  44. return [filledLabeledValues, getOption];
  45. };
  46. exports.default = _default;