import React, { RefObject, useEffect, useRef, useState } from "react" import { BackArrowSvg } from "../assets/svg/BackArrowSvg"; import { DestinationSearchSvg } from "../assets/svg/DestinationSearchSvg"; import { SourceDotSvg } from "../assets/svg/SourceDotSvg"; import { LocationSvg } from "../assets/svg/LocationSvg" import { RegionWiseBranches } from "./RegionWiseBranches" import {CloseIconSvg} from "../assets/svg/closeIconSvg"; import {SearchIconSvg} from "../assets/svg/searchIconSvg" import EditSvg from "../assets/svg/EditSvg"; const useSwipe = (ref: RefObject) => { const [startY, setStartY] = useState(0); const [swipedUp, setSwipedUp] = useState(false); const [swipedDown, setSwipedDown] = useState(false); useEffect(() => { const handleTouchStart = (e: TouchEvent) => { setStartY(e.touches[0].clientY); }; const handleTouchEnd = (e: TouchEvent) => { if (!ref.current) return; const endY = e.changedTouches[0].clientY; const deltaY = endY - startY; if (deltaY < 0) { setSwipedUp(true); setSwipedDown(false); } else if (deltaY > 0) { setSwipedDown(true); setSwipedUp(false); } else { setSwipedUp(false); setSwipedDown(false); } }; const element = ref.current; if (element) { element.addEventListener('touchstart', handleTouchStart); element.addEventListener('touchend', handleTouchEnd); } return () => { if (element) { element.removeEventListener('touchstart', handleTouchStart); element.removeEventListener('touchend', handleTouchEnd); } }; }, [ref, startY]); return { swipedUp, swipedDown, setSwipedUp, setSwipedDown }; }; interface SearchLoadsProps{ truckNo:string; //truck number fetching?:boolean; //Fetching city with lat lng expanded:boolean; //state of the input containing Drawer setExpanded:(data: any) => void; stage?:string; //current stage of search load setStage setStage:(data: any) => void; searchedCity?:any //data of already searched city setSearchedcity:(data: any) => void; cityList?:any // city list for searched text city?:any // source city detail setCity:(data: any) => void; cityLoading?:boolean //loading while search for entered ity with text searchLoading?:boolean //loading to get fastag city onClickSearchLoads?:any // Function calling search loads mutation defaultBranches?:any //data of default selected branches regionBranches:any; //all branches baced on region, handleCallback:any; //callback to get seleted braches lang?: 'en' | 'ta' | 'hi' | 'kn' | 'bn' | 'te' // user language, destinations?:any // selected destinations , placeholder?:string // placeholder acording to language is_next_load?:boolean // searching for next load , goBack ?:any // router to go back page loading?:boolean // loading while search with source and destination setMapSource:(data: any) => void; platform?: string /** optional localized UI labels; English fallbacks used when omitted */ translatedWords?: { selectDestinations?: string searchLoads?: string loading?: string dragMapToMovePin?: string confirmTruckLocation?: string } } export const SearchLoads = (props: SearchLoadsProps) => { const { truckNo, fetching, expanded, setExpanded, stage, setStage, searchedCity, setSearchedcity, cityList, city, setCity, cityLoading, searchLoading, onClickSearchLoads, defaultBranches, regionBranches, handleCallback, lang = 'en', destinations, placeholder, is_next_load, goBack ,loading,setMapSource,platform, translatedWords} = props const labels = { selectDestinations: translatedWords?.selectDestinations || 'Select destinations', searchLoads: translatedWords?.searchLoads || 'Search loads', loading: translatedWords?.loading || 'Loading...', dragMapToMovePin: translatedWords?.dragMapToMovePin || 'Drag map to move pin', confirmTruckLocation: translatedWords?.confirmTruckLocation || 'Confirm truck location', } const [destinationCities,setDestinationCities]=useState([]) const [clearAll,setClearAll]=useState(false) useEffect(()=>{ setDestinationCities(defaultBranches) },[defaultBranches?.length]) const swipeRef = useRef(null); const { swipedUp, swipedDown } = useSwipe(swipeRef); if (swipedUp && !expanded) { setExpanded(true) } if (swipedDown && expanded) { setExpanded(false) } const expand = () => { setExpanded(true) } const onSelectSource = (city: any) => { setCity(city?.city) setSearchedcity(city?.city?.name) setExpanded(false) setMapSource(city?.city?.location) } const isDestination = stage === 'destination' const clearDestinations=()=>{ handleCallback([]) setDestinationCities([]) setClearAll(!clearAll) } const padding = platform === 'ios' ? 'fr-pt-10' : '' return (
{isDestination ? <>

{truckNo}

  {city?.city?.name || searchedCity}

goBack.back() : () => setStage('source')}>
{labels.selectDestinations}
{(lang && lang !== 'en' ? destinations?.names?.[lang] : null) || destinations?.names?.name}
{destinations?.cityIds?.length?:null}
: !searchLoading ?
{expanded ? : null}
{!expanded ? labels.dragMapToMovePin : labels.confirmTruckLocation}
setSearchedcity(e.target.value)} value={searchedCity} onClick={expand} />
{setSearchedcity('')}:undefined}>{expanded?:}
{!expanded ? : null } {cityList?.length && expanded ? cityList.map((city: any, i: number) => { return
onSelectSource(city)}> {(lang && lang !== 'en' ? city?.city?.[lang] : null) || city?.city?.name}
}) : cityLoading ? : expanded && !cityList?.length ?
{placeholder}
: null}
: null}
) } const Skeleton = () => { return (
) }