12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import { useEffect, useEvent, useRef } from 'functional-mini/component';
- import { mountComponent } from '../../_util/component';
- import { useComponentEvent } from '../../_util/hooks/useComponentEvent';
- import { hasValue, useMergedState } from '../../_util/hooks/useMergedState';
- var InputBlur = function (props) {
- var isControlled = hasValue(props.controlled)
- ? !!props.controlled
- : hasValue(props.value);
- var _a = useMergedState(props.defaultValue, {
- // 因为受控模式下 value 也是会随着 props.value 变化的, 所以这里不需要判断是否受控
- defaultValue: props.value,
- }), value = _a[0], doUpdateValue = _a[1];
- function updateValue(value, updateWithoutFocusCheck) {
- if (!updateWithoutFocusCheck && focusRef.current) {
- return;
- }
- doUpdateValue(value);
- }
- var focusRef = useRef(false);
- useEffect(function () {
- if (!focusRef.current) {
- doUpdateValue(props.value);
- }
- }, [props, focusRef]);
- var triggerEvent = useComponentEvent(props).triggerEvent;
- useEvent('onChange', function (e) {
- var newValue = e.detail.value;
- if (isControlled) {
- updateValue(newValue, true);
- }
- triggerEvent('change', newValue, e);
- }, []);
- useEvent('onFocus', function (e) {
- var newValue = e.detail.value;
- focusRef.current = true;
- triggerEvent('focus', newValue, e);
- }, []);
- useEvent('onBlur', function (e) {
- var newValue = e.detail.value;
- focusRef.current = false;
- if (isControlled) {
- updateValue(props.value);
- }
- triggerEvent('blur', newValue, e);
- }, [props]);
- useEvent('onConfirm', function (e) {
- var newValue = e.detail.value;
- triggerEvent('confirm', newValue, e);
- }, [props]);
- return {
- inputValue: value,
- };
- };
- mountComponent(InputBlur, {
- value: null,
- defaultValue: null,
- placeholder: null,
- placeholderClassName: '',
- placeholderStyle: '',
- enableNative: null,
- confirmType: null,
- confirmHold: null,
- alwaysSystem: null,
- selectionStart: null,
- selectionEnd: null,
- cursor: null,
- controlled: null,
- inputClassName: null,
- inputStyle: null,
- focus: null,
- password: null,
- disabled: null,
- name: null,
- type: null,
- randomNumber: null,
- });
|