You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
881 B
36 lines
881 B
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;
|
|
}
|