@arco-design/web-vue
Version:
Arco Design Vue 2.0: A Vue.js 3 UI Library
109 lines (108 loc) • 3.16 kB
JavaScript
import { ref, computed, watch, nextTick } from "vue";
import { Enter } from "../_utils/keycode.js";
const useInput = ({
defaultValue,
modelValue,
emit,
eventName = "input",
updateEventName = "update:modelValue",
eventHandlers
}) => {
var _a;
const inputRef = ref();
const _value = ref((_a = defaultValue == null ? void 0 : defaultValue.value) != null ? _a : "");
const _focused = ref(false);
const isComposition = ref(false);
const compositionValue = ref("");
let initialValue;
const computedValue = computed(() => {
var _a2;
return (_a2 = modelValue == null ? void 0 : modelValue.value) != null ? _a2 : _value.value;
});
const updateValue = (value, ev) => {
_value.value = value;
emit(updateEventName, value);
emit(eventName, value, ev);
};
const handleInput = (ev) => {
const { value } = ev.target;
if (!isComposition.value) {
updateValue(value, ev);
nextTick(() => {
if (inputRef.value && computedValue.value !== inputRef.value.value) {
inputRef.value.value = computedValue.value;
}
});
}
};
const handleChange = (ev) => {
if (eventName === "input" && computedValue.value !== initialValue) {
initialValue = computedValue.value;
emit("change", computedValue.value, ev);
}
};
const handleComposition = (ev) => {
var _a2;
const { value } = ev.target;
if (ev.type === "compositionend") {
isComposition.value = false;
compositionValue.value = "";
updateValue(value, ev);
nextTick(() => {
if (inputRef.value && computedValue.value !== inputRef.value.value) {
inputRef.value.value = computedValue.value;
}
});
} else {
isComposition.value = true;
compositionValue.value = computedValue.value + ((_a2 = ev.data) != null ? _a2 : "");
}
};
const handleFocus = (ev) => {
var _a2, _b;
_focused.value = true;
initialValue = computedValue.value;
emit("focus", ev);
(_b = (_a2 = eventHandlers == null ? void 0 : eventHandlers.value) == null ? void 0 : _a2.onFocus) == null ? void 0 : _b.call(_a2, ev);
};
const handleBlur = (ev) => {
var _a2, _b;
_focused.value = false;
emit("blur", ev);
(_b = (_a2 = eventHandlers == null ? void 0 : eventHandlers.value) == null ? void 0 : _a2.onBlur) == null ? void 0 : _b.call(_a2, ev);
handleChange(ev);
};
const handleKeyDown = (ev) => {
const keyCode = ev.key || ev.code;
if (!isComposition.value && keyCode === Enter.key) {
emit("pressEnter", ev);
handleChange(ev);
}
};
const handleMousedown = (ev) => {
if (inputRef.value && ev.target !== inputRef.value) {
ev.preventDefault();
inputRef.value.focus();
}
};
watch(computedValue, (value) => {
if (inputRef.value && value !== inputRef.value.value) {
inputRef.value.value = value;
}
});
return {
inputRef,
_value,
_focused,
isComposition,
compositionValue,
computedValue,
handleInput,
handleComposition,
handleFocus,
handleBlur,
handleKeyDown,
handleMousedown
};
};
export { useInput };