loading...
, 18 | ssr: false, 19 | }); 20 | 21 | const HeaderCombined = dynamic( 22 | () => import("../src/components/Header/HeaderCombined"), 23 | { 24 | ssr: false, 25 | } 26 | ); 27 | 28 | const Footer = dynamic(() => import("../src/components/Footer/Footer"), { 29 | ssr: false, 30 | }); 31 | 32 | const Homepage = ({ fetchedData, cityData, typeData }) => { 33 | const centerLatLong = calculateCenter(fetchedData); 34 | 35 | const allData = fetchedData?.data; 36 | 37 | const [map, setMap] = useState(); 38 | 39 | const [searchAt, setSearchAt] = useState(SEARCH_AT.HARITA); 40 | const [filter, setFilter] = useState(HEPSI_ID); 41 | const [searchBarVal, setSearchbarVal] = useState(""); 42 | const [selectedCity, setSelectedCity] = useState(null); 43 | const [selectedDist, setSelectedDist] = useState(null); 44 | 45 | const handleLock = () => { 46 | if (map.dragging.enabled()) { 47 | map.dragging.disable(); 48 | map.zoomControl.disable(); 49 | map.scrollWheelZoom.disable(); 50 | } else { 51 | map.dragging.enable(); 52 | map.zoomControl.enable(); 53 | map.scrollWheelZoom.enable(); 54 | } 55 | }; 56 | 57 | const handleChangeCity = (city) => { 58 | if (city == null) { 59 | setSelectedCity(null); 60 | setSelectedDist(null); 61 | map.flyTo([centerLatLong.latitude, centerLatLong.longitude], 7); 62 | return; 63 | } 64 | const lat = centers[city.key]?.lat; 65 | const lng = centers[city.key]?.lng; 66 | map.flyTo([lat, lng], 12); 67 | setSelectedCity(city.id); 68 | setSelectedDist(null); 69 | }; 70 | 71 | const districtMap = useMemo(() => { 72 | const theMap = new Map(); 73 | const allDistricts = cityData?.data?.map((city) => city.districts).flat(); 74 | allDistricts?.forEach((district) => { 75 | theMap.set(district.id, district.key); 76 | }); 77 | return theMap; 78 | }, [cityData]); 79 | 80 | const typeFilteredData = allData?.filter( 81 | (item) => filter === HEPSI_ID || item.typeId === filter 82 | ); 83 | const searchFilteredData = typeFilteredData?.filter( 84 | (item) => 85 | item.name.toLowerCase().includes(searchBarVal.toLowerCase()) || 86 | item.address.toLowerCase().includes(searchBarVal.toLowerCase()) 87 | ); 88 | const cityFilteredData = 89 | selectedCity == null 90 | ? searchFilteredData 91 | : searchFilteredData?.filter((item) => item.cityId === selectedCity); 92 | 93 | const distFilteredData = 94 | selectedDist == null 95 | ? cityFilteredData 96 | : cityFilteredData?.filter((item) => item.districtId === selectedDist); 97 | 98 | const hasDataObj = typeData?.data?.map((type) => { 99 | const dataExists = allData?.some((item) => item.typeId === type.id); 100 | return { typeId: type.id, hasData: dataExists }; 101 | }); 102 | 103 | return ( 104 |{t("common:chooseACity")}
49 |loading...
, 19 | ssr: false, 20 | } 21 | ); 22 | 23 | const DragIcon = dynamic(() => import("../DragIcon/DragIcon"), { 24 | loading: () =>loading...
, 25 | ssr: false, 26 | }); 27 | 28 | const FullScreenIcon = dynamic( 29 | () => import("../FullScreenIcon/FullScreenIcon"), 30 | { 31 | loading: () =>loading...
, 32 | ssr: false, 33 | } 34 | ); */ 35 | 36 | const ZOOM = 6; 37 | const MIN_ZOOM = 7; 38 | 39 | // bunu gelen datanin varyansina gore ayarlarsak efsane olur 40 | const LAT_BOUND_THRESHOLD = 4; 41 | const LONG_BOUND_THRESHOLD = 10; 42 | 43 | const MapPage = ({ 44 | searchFilteredData, 45 | districtMap, 46 | setMap, 47 | handleLock, 48 | centerLatLong, 49 | }) => { 50 | const [dragActive, setDragActive] = useState(true); 51 | 52 | const center = [ 53 | centerLatLong?.latitude ?? 40, 54 | centerLatLong?.longitude ?? 35, 55 | ]; 56 | 57 | const leftTopBound = [ 58 | centerLatLong?.latitude - LAT_BOUND_THRESHOLD, 59 | centerLatLong?.longitude - LONG_BOUND_THRESHOLD, 60 | ]; 61 | const rightBottomBound = [ 62 | centerLatLong?.latitude + LAT_BOUND_THRESHOLD, 63 | centerLatLong?.longitude + LONG_BOUND_THRESHOLD, 64 | ]; 65 | 66 | const toggleDragActive = () => { 67 | setDragActive((active) => !active); 68 | }; 69 | 70 | const onLockClick = () => { 71 | handleLock(); 72 | toggleDragActive(); 73 | }; 74 | 75 | return ( 76 |