UNPKG

@arco-design/web-vue

Version:

Arco Design Vue 2.0: A Vue.js 3 UI Library

109 lines (108 loc) 3.16 kB
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 };