@opensig/opendesign
Version:
80 lines (79 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const vue = require("vue");
const is = require("../../_utils/is.js");
const useWatch = (props, initData, minValue, maxValue, emit) => {
const handleEmit = (val) => {
emit("update:modelValue", val);
emit("input", val);
};
const valueChanged = () => {
if (props.range) {
return ![minValue.value, maxValue.value].every((item, index) => item === initData.oldValue[index]);
} else {
return props.modelValue !== initData.oldValue;
}
};
const setValues = () => {
if (props.min > props.max) {
return;
}
const val = props.modelValue;
if (props.range && is.isArray(val)) {
if (val[1] < props.min) {
handleEmit([props.min, props.min]);
} else if (val[0] > props.max) {
handleEmit([props.max, props.max]);
} else if (val[0] < props.min) {
handleEmit([props.min, val[1]]);
} else if (val[1] > props.max) {
handleEmit([val[0], props.max]);
} else {
initData.firstBtnVal = val[0];
initData.secondBtnVal = val[1];
if (valueChanged()) {
initData.oldValue = val.slice();
}
}
} else if (!props.range && is.isNumber(val)) {
if (val < props.min) {
handleEmit(props.min);
} else if (val > props.max) {
handleEmit(props.max);
} else {
initData.firstBtnVal = val;
if (valueChanged()) {
initData.oldValue = val;
}
}
}
};
setValues();
vue.watch(
() => initData.isDragging,
(val) => {
if (!val) {
setValues();
}
}
);
vue.watch(
() => props.modelValue,
(val, oldVal) => {
if (initData.isDragging || is.isArray(val) && is.isArray(oldVal) && val.every((item, index) => item === oldVal[index]) && initData.firstBtnVal === val[0] && initData.secondBtnVal === val[1]) {
return;
}
setValues();
},
{
deep: true
}
);
vue.watch(
() => [props.min, props.max],
() => {
setValues();
}
);
};
exports.useWatch = useWatch;