|
|
@@ -6,7 +6,13 @@ import { Input, Alert, Popover } from 'antd'
|
|
|
import CompanyDetail from '../CompanyDetail'
|
|
|
import { useState } from 'react'
|
|
|
|
|
|
-const CompanyFormItem = ({ value, onChange }) => {
|
|
|
+export const validateEnum = {
|
|
|
+ Success: 'success',
|
|
|
+ Warning: 'warning',
|
|
|
+ Error: 'error',
|
|
|
+ Validating: 'validating'
|
|
|
+}
|
|
|
+const CompanyFormItem = ({ value, onChange, validateFn }) => {
|
|
|
// const ref = useRef(null)
|
|
|
const { toggleDrawer, setDrawerProps } = useModal()
|
|
|
const [state, setState] = useState({
|
|
|
@@ -19,29 +25,37 @@ const CompanyFormItem = ({ value, onChange }) => {
|
|
|
}
|
|
|
|
|
|
const queryList = async search => {
|
|
|
- if (!search) {
|
|
|
- setState({ ...state, list: null })
|
|
|
- return
|
|
|
- }
|
|
|
+ if (!search) return
|
|
|
const { code = -1, data } = await queryCompany({ current: 1, pageSize: 999, search })
|
|
|
if (code === consts.RET_CODE.SUCCESS) {
|
|
|
const { customer = [] } = data
|
|
|
setState({ ...state, list: customer })
|
|
|
+ if (customer?.length) {
|
|
|
+ validateFn(validateEnum.Warning)
|
|
|
+ } else {
|
|
|
+ validateFn(validateEnum.Success)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const { run: handleQueryList } = useDebounceFn(queryList, { wait: 500 })
|
|
|
+ const { run: handleQueryList } = useDebounceFn(queryList, { wait: 600 })
|
|
|
|
|
|
const handleOnInputChange = async e => {
|
|
|
const val = e.target.value || ''
|
|
|
- setState({ ...state, inputVal: val })
|
|
|
- await handleQueryList(val)
|
|
|
+ if (!val) {
|
|
|
+ setState({ ...state, inputVal: val, list: null, visible: false })
|
|
|
+ validateFn(validateEnum.Error)
|
|
|
+ } else {
|
|
|
+ setState({ ...state, inputVal: val })
|
|
|
+ validateFn(validateEnum.Validating)
|
|
|
+ handleQueryList(val)
|
|
|
+ }
|
|
|
triggerChange(val)
|
|
|
}
|
|
|
|
|
|
const showCompanyDrawer = id => {
|
|
|
setDrawerProps({
|
|
|
- zIndex: 1003,
|
|
|
+ zIndex: 1004,
|
|
|
closable: true,
|
|
|
onClose: () => toggleDrawer(),
|
|
|
bodyStyle: {
|
|
|
@@ -55,9 +69,9 @@ const CompanyFormItem = ({ value, onChange }) => {
|
|
|
const { visible, list, inputVal } = state
|
|
|
return (
|
|
|
<Popover
|
|
|
- zIndex={1004}
|
|
|
+ zIndex={1003}
|
|
|
placement="bottom"
|
|
|
- visible={visible && list && list.length}
|
|
|
+ visible={list && list.length && visible}
|
|
|
onVisibleChange={e => setState({ ...state, visible: e })}
|
|
|
title={
|
|
|
<Alert
|
|
|
@@ -74,7 +88,8 @@ const CompanyFormItem = ({ value, onChange }) => {
|
|
|
<p key={item.id}>
|
|
|
<span
|
|
|
className="text-primary cursor-pointer hover:text-hex-967bbd"
|
|
|
- onClick={() => showCompanyDrawer(item.id)}>
|
|
|
+ onClick={() => showCompanyDrawer(item.id)}
|
|
|
+ >
|
|
|
{item.companyName}
|
|
|
</span>
|
|
|
<span className="mx-1">/</span>
|
|
|
@@ -83,7 +98,8 @@ const CompanyFormItem = ({ value, onChange }) => {
|
|
|
)
|
|
|
})}
|
|
|
</ul>
|
|
|
- }>
|
|
|
+ }
|
|
|
+ >
|
|
|
<Input
|
|
|
type="text"
|
|
|
autoComplete="false"
|