UNPKG

@aliretail/react-materials-components

Version:
102 lines (81 loc) 2.95 kB
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;