useCache.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import { watch, toRaw, computed, shallowRef } from 'vue';
  3. /**
  4. * This function will try to call requestIdleCallback if available to save performance.
  5. * No need `getLabel` here since already fetch on `rawLabeledValue`.
  6. */
  7. export default (function (values) {
  8. var cacheRef = shallowRef({
  9. valueLabels: new Map()
  10. });
  11. var mergedValues = shallowRef();
  12. watch(values, function () {
  13. mergedValues.value = toRaw(values.value);
  14. }, {
  15. immediate: true
  16. });
  17. var newFilledValues = computed(function () {
  18. var valueLabels = cacheRef.value.valueLabels;
  19. var valueLabelsCache = new Map();
  20. var filledValues = mergedValues.value.map(function (item) {
  21. var _item$label;
  22. var value = item.value;
  23. var mergedLabel = (_item$label = item.label) !== null && _item$label !== void 0 ? _item$label : valueLabels.get(value);
  24. // Save in cache
  25. valueLabelsCache.set(value, mergedLabel);
  26. return _objectSpread(_objectSpread({}, item), {}, {
  27. label: mergedLabel
  28. });
  29. });
  30. cacheRef.value.valueLabels = valueLabelsCache;
  31. return filledValues;
  32. });
  33. return [newFilledValues];
  34. });