| | |
| | | import Taro from '@tarojs/taro'; |
| | | import { useEffect, useMemo, useRef, useState } from 'react'; |
| | | import { getStartPoints, getEndPoints, queryPointByName } from '../../../api/site-search'; |
| | | import { debounce } from '../../../../utils/Robotaxi-public-method'; |
| | | import { checkOtp } from '../../../../utils/tools'; |
| | | import { getNearestSite } from '../../../api/home'; |
| | | import { _AMAP_KEY } from '../../../../constants/api'; |
| | |
| | | // 最近一次完成搜索的关键词 |
| | | const [lastCompletedKeyword, setLastCompletedKeyword] = useState(''); |
| | | const searchSeqRef = useRef(0); |
| | | const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null); |
| | | |
| | | // 拉取附近站点 |
| | | const fetchNearbySites = async (lat: number, lon: number, electronicAreaId?: string) => { |
| | |
| | | searchSiteRef.current = searchSite; |
| | | |
| | | // 搜索输入防抖 |
| | | const debouncedSearch = useMemo(() => debounce((val) => { |
| | | searchSiteRef.current(val); |
| | | }, 300), []); |
| | | const debouncedSearch = useMemo(() => { |
| | | return (val: string) => { |
| | | if (debounceTimerRef.current) { |
| | | clearTimeout(debounceTimerRef.current); |
| | | } |
| | | debounceTimerRef.current = setTimeout(() => { |
| | | searchSiteRef.current(val); |
| | | }, 300); |
| | | }; |
| | | }, []); |
| | | |
| | | // 清空搜索结果列表 |
| | | const clearSearchResults = () => { |
| | | if (debounceTimerRef.current) { |
| | | clearTimeout(debounceTimerRef.current); |
| | | debounceTimerRef.current = null; |
| | | } |
| | | // 推进请求序号,使清空前已发出的请求结果失效 |
| | | searchSeqRef.current += 1; |
| | | setSiteList([]); |
| | | setNonOperationalSite([]); |
| | | setIsSearching(false); |
| | | setLastCompletedKeyword(''); |
| | | }; |
| | | |
| | | useEffect(() => { |
| | | return () => { |
| | | if (debounceTimerRef.current) { |
| | | clearTimeout(debounceTimerRef.current); |
| | | } |
| | | }; |
| | | }, []); |
| | | |
| | | // 初始化:拉取附近站点、历史记录、页面类型 |
| | | useEffect(() => { |
| | | const { pageType: type, latitude: lat, longitude: lon, electronicAreaId } = deps.router.params; |