tdesign-mobile-vue
Version:
tdesign-mobile-vue
76 lines (72 loc) • 2.36 kB
JavaScript
/**
* tdesign v1.7.0
* (c) 2024 TDesign Group
* @license MIT
*/
import { ref, watchEffect, computed } from 'vue';
import camelCase from 'lodash/camelCase';
function getDefaultName(key) {
var str = camelCase(key);
return "default".concat(str[0].toLocaleUpperCase() + str.slice(1));
}
function getEventPropsName(eventName) {
var str = camelCase(eventName);
return "on".concat(str[0].toLocaleUpperCase()).concat(str.slice(1));
}
function useDefault(props, emit, key, eventName) {
var modelValue = "modelValue";
var defaultName = getDefaultName(String(key));
var isUsedModelValue = props[modelValue] !== void 0;
var isUsedKey = props[key] !== void 0;
var innerValue = ref();
if (isUsedKey) {
innerValue.value = props[key];
} else if (isUsedModelValue) {
innerValue.value = props[modelValue];
} else {
innerValue.value = props[defaultName];
}
watchEffect(function () {
if (isUsedModelValue) {
innerValue.value = props[modelValue];
}
if (isUsedKey) {
innerValue.value = props[key];
}
});
function emitEvents(value) {
var _props$propsEventName;
for (var _len = arguments.length, arg = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
arg[_key - 1] = arguments[_key];
}
var updateKeys = ["update:".concat(key)];
if (isUsedModelValue) {
updateKeys.push("update:modelValue");
}
updateKeys.forEach(function (updateKey) {
emit.apply(void 0, [updateKey, value].concat(arg));
});
var propsEventName = getEventPropsName(eventName);
(_props$propsEventName = props[propsEventName]) === null || _props$propsEventName === void 0 || _props$propsEventName.call.apply(_props$propsEventName, [props, value].concat(arg));
}
function setInnerValue(value) {
if (!isUsedKey && !isUsedModelValue) {
innerValue.value = value;
}
for (var _len2 = arguments.length, arg = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
arg[_key2 - 1] = arguments[_key2];
}
emitEvents.apply(void 0, [value].concat(arg));
}
var innerValueRef = computed({
get: function get() {
return innerValue.value;
},
set: function set(value) {
setInnerValue(value);
}
});
return [innerValueRef, setInnerValue];
}
export { useDefault };
//# sourceMappingURL=index.js.map