2024-08-02 18:19:39 +08:00

124 lines
4.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useTransferData = useTransferData;
const vue_1 = require("vue");
const vooks_1 = require("vooks");
function useTransferData(props) {
const uncontrolledValueRef = (0, vue_1.ref)(props.defaultValue);
const mergedValueRef = (0, vooks_1.useMergedState)((0, vue_1.toRef)(props, 'value'), uncontrolledValueRef);
const optionsMapRef = (0, vue_1.computed)(() => {
const map = new Map();
(props.options || []).forEach(opt => map.set(opt.value, opt));
return map;
});
const targetValueSetRef = (0, vue_1.computed)(() => new Set(mergedValueRef.value || []));
const targetOptionsRef = (0, vue_1.computed)(() => {
const optionMap = optionsMapRef.value;
const targetOptions = [];
(mergedValueRef.value || []).forEach((v) => {
const option = optionMap.get(v);
if (option) {
targetOptions.push(option);
}
});
return targetOptions;
});
const srcPatternRef = (0, vue_1.ref)('');
const tgtPatternRef = (0, vue_1.ref)('');
const mergedSrcFilterableRef = (0, vue_1.computed)(() => {
return props.sourceFilterable || !!props.filterable;
});
const filteredSrcOptionsRef = (0, vue_1.computed)(() => {
const { showSelected, options, filter } = props;
if (!mergedSrcFilterableRef.value) {
if (showSelected) {
return options;
}
else {
return options.filter(option => !targetValueSetRef.value.has(option.value));
}
}
return options.filter((option) => {
return (filter(srcPatternRef.value, option, 'source')
&& (showSelected || !targetValueSetRef.value.has(option.value)));
});
});
const filteredTgtOptionsRef = (0, vue_1.computed)(() => {
if (!props.targetFilterable)
return targetOptionsRef.value;
const { filter } = props;
return targetOptionsRef.value.filter(opt => filter(tgtPatternRef.value, opt, 'target'));
});
const mergedValueSetRef = (0, vue_1.computed)(() => {
const { value } = mergedValueRef;
if (value === null)
return new Set();
return new Set(value);
});
const valueSetForCheckAllRef = (0, vue_1.computed)(() => {
const values = new Set(mergedValueSetRef.value);
filteredSrcOptionsRef.value.forEach((option) => {
if (!option.disabled && !values.has(option.value)) {
values.add(option.value);
}
});
return values;
});
const valueSetForUncheckAllRef = (0, vue_1.computed)(() => {
const values = new Set(mergedValueSetRef.value);
filteredSrcOptionsRef.value.forEach((option) => {
if (!option.disabled && values.has(option.value)) {
values.delete(option.value);
}
});
return values;
});
const valueSetForClearRef = (0, vue_1.computed)(() => {
const values = new Set(mergedValueSetRef.value);
filteredTgtOptionsRef.value.forEach((option) => {
if (!option.disabled) {
values.delete(option.value);
}
});
return values;
});
const canNotSelectAnythingRef = (0, vue_1.computed)(() => {
return filteredSrcOptionsRef.value.every(option => option.disabled);
});
const allCheckedRef = (0, vue_1.computed)(() => {
if (!filteredSrcOptionsRef.value.length) {
return false;
}
const mergedValueSet = mergedValueSetRef.value;
return filteredSrcOptionsRef.value.every(option => option.disabled || mergedValueSet.has(option.value));
});
const canBeClearedRef = (0, vue_1.computed)(() => {
return filteredTgtOptionsRef.value.some(option => !option.disabled);
});
function handleSrcFilterUpdateValue(value) {
srcPatternRef.value = value !== null && value !== void 0 ? value : '';
}
function handleTgtFilterUpdateValue(value) {
tgtPatternRef.value = value !== null && value !== void 0 ? value : '';
}
return {
uncontrolledValueRef,
mergedValueRef,
targetValueSetRef,
valueSetForCheckAllRef,
valueSetForUncheckAllRef,
valueSetForClearRef,
filteredTgtOptionsRef,
filteredSrcOptionsRef,
targetOptionsRef,
canNotSelectAnythingRef,
canBeClearedRef,
allCheckedRef,
srcPatternRef,
tgtPatternRef,
mergedSrcFilterableRef,
handleSrcFilterUpdateValue,
handleTgtFilterUpdateValue
};
}