@aliretail/react-materials-components
Version:
102 lines (81 loc) • 2.95 kB
JavaScript
import _Select from "@alifd/next/es/select";
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
var _excluded = ["value", "onChange", "requestConfig"],
_excluded2 = ["service", "searchFormat"];
import React, { useState } from 'react';
import { useRequest } from 'ahooks';
import request from '@aliretail/react-universal-request';
function HookAutoComplete(props) {
var value = props.value,
onChange = props.onChange,
requestConfig = props.requestConfig,
otherProps = _objectWithoutPropertiesLoose(props, _excluded);
var _useState = useState(value),
checkedValue = _useState[0],
setCheckedValue = _useState[1];
var _useState2 = useState({
value: value
}),
checkedItem = _useState2[0],
setCheckedItem = _useState2[1];
var service = requestConfig.service,
searchFormat = requestConfig.searchFormat,
otherConfig = _objectWithoutPropertiesLoose(requestConfig, _excluded2);
var getService = function getService(inputValue) {
var _service = service;
if (requestConfig !== null && requestConfig !== void 0 && requestConfig.searchFormat) {
var searchValue = searchFormat(inputValue);
Object.assign(_service, searchValue);
}
return _service;
};
var _useRequest = useRequest(function (opt) {
return request(opt || getService(value));
}, otherConfig),
run = _useRequest.run,
error = _useRequest.error,
data = _useRequest.data,
loading = _useRequest.loading; // 获取 Select 状态
var state;
if (error) {
state = 'error';
}
if (loading) {
state = 'loading';
} // Search 自动包装
var autoCompleteChange = function autoCompleteChange(inputValue, actionType, item) {
if (actionType === 'change' && requestConfig !== null && requestConfig !== void 0 && requestConfig.searchFormat) {
run(getService(inputValue));
}
if (item && (actionType === 'enter' || actionType === 'itemClick')) {
setCheckedValue(inputValue);
setCheckedItem(item);
}
onChange && onChange(inputValue, actionType, item);
};
var getDataSource = function getDataSource() {
if ((data === null || data === void 0 ? void 0 : data.success) === true) {
return data.result;
}
return data;
};
return /*#__PURE__*/React.createElement(_Select.AutoComplete, _extends({
value: value,
onChange: autoCompleteChange,
state: state,
onVisibleChange: function onVisibleChange(visible, type) {
if (visible === false && type === 'docClick') {
if (value !== checkedValue) {
if (!value) {
onChange('', 'change', undefined);
return;
}
onChange(checkedValue, 'change', checkedItem);
}
}
},
dataSource: getDataSource()
}, otherProps));
}
export default HookAutoComplete;