36 lines
881 B
TypeScript
36 lines
881 B
TypeScript
|
import { computed, ComputedRef, Ref } from 'vue';
|
||
|
import { DisplayLabelValueType } from '../interface/generator';
|
||
|
|
||
|
export default function useCacheDisplayValue(
|
||
|
values: Ref<DisplayLabelValueType[]>,
|
||
|
): ComputedRef<DisplayLabelValueType[]> {
|
||
|
let prevValues = [...values.value];
|
||
|
|
||
|
const mergedValues = computed(() => {
|
||
|
// Create value - label map
|
||
|
const valueLabels = new Map();
|
||
|
prevValues.forEach(({ value, label }) => {
|
||
|
if (value !== label) {
|
||
|
valueLabels.set(value, label);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
const resultValues = values.value.map(item => {
|
||
|
const cacheLabel = valueLabels.get(item.value);
|
||
|
if (item.value === item.label && cacheLabel) {
|
||
|
return {
|
||
|
...item,
|
||
|
label: cacheLabel,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
return item;
|
||
|
});
|
||
|
|
||
|
prevValues = resultValues;
|
||
|
return resultValues;
|
||
|
});
|
||
|
|
||
|
return mergedValues;
|
||
|
}
|