useCache.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import { shallowRef, computed } from 'vue';
  3. /**
  4. * Cache `value` related LabeledValue & options.
  5. */
  6. export default (function (labeledValues, valueOptions) {
  7. var cacheRef = shallowRef({
  8. values: new Map(),
  9. options: new Map()
  10. });
  11. var filledLabeledValues = computed(function () {
  12. var _cacheRef$value = cacheRef.value,
  13. prevValueCache = _cacheRef$value.values,
  14. prevOptionCache = _cacheRef$value.options;
  15. // Fill label by cache
  16. var patchedValues = labeledValues.value.map(function (item) {
  17. if (item.label === undefined) {
  18. var _prevValueCache$get;
  19. return _objectSpread(_objectSpread({}, item), {}, {
  20. label: (_prevValueCache$get = prevValueCache.get(item.value)) === null || _prevValueCache$get === void 0 ? void 0 : _prevValueCache$get.label
  21. });
  22. }
  23. return item;
  24. });
  25. // Refresh cache
  26. var valueCache = new Map();
  27. var optionCache = new Map();
  28. patchedValues.forEach(function (item) {
  29. valueCache.set(item.value, item);
  30. optionCache.set(item.value, valueOptions.value.get(item.value) || prevOptionCache.get(item.value));
  31. });
  32. cacheRef.value.values = valueCache;
  33. cacheRef.value.options = optionCache;
  34. return patchedValues;
  35. });
  36. var getOption = function getOption(val) {
  37. return valueOptions.value.get(val) || cacheRef.value.options.get(val);
  38. };
  39. return [filledLabeledValues, getOption];
  40. });