useCache.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  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 (values => {
  8. const cacheRef = shallowRef({
  9. valueLabels: new Map()
  10. });
  11. const mergedValues = shallowRef();
  12. watch(values, () => {
  13. mergedValues.value = toRaw(values.value);
  14. }, {
  15. immediate: true
  16. });
  17. const newFilledValues = computed(() => {
  18. const {
  19. valueLabels
  20. } = cacheRef.value;
  21. const valueLabelsCache = new Map();
  22. const filledValues = mergedValues.value.map(item => {
  23. var _a;
  24. const {
  25. value
  26. } = item;
  27. const mergedLabel = (_a = item.label) !== null && _a !== void 0 ? _a : valueLabels.get(value);
  28. // Save in cache
  29. valueLabelsCache.set(value, mergedLabel);
  30. return _extends(_extends({}, item), {
  31. label: mergedLabel
  32. });
  33. });
  34. cacheRef.value.valueLabels = valueLabelsCache;
  35. return filledValues;
  36. });
  37. return [newFilledValues];
  38. });