import React, { useRef, useState, useEffect, useLayoutEffect } from "react"; import { View, Text, TouchableOpacity, Linking } from "react-native"; import MapView, { Marker } from "react-native-maps"; import { MaterialCommunityIcons, Ionicons } from "@expo/vector-icons"; import { useCurrentTrain } from "../stateBox/useCurrentTrain"; import { useNavigation } from "@react-navigation/native"; import lineColorList from "../assets/originData/lineColorList"; import { stationIDPair } from "../lib/getStationList2"; import { lineListPair } from "../lib/getStationList"; import { SheetManager } from "react-native-actions-sheet"; import { useTrainMenu } from "../stateBox/useTrainMenu"; import { MapPin } from "./TrainMenu/MapPin"; import { UsefulBox } from "./TrainMenu/UsefulBox"; import { MapsButton } from "./TrainMenu/MapsButton"; export default function TrainMenu({ style }) { const { webview } = useCurrentTrain(); const mapRef = useRef(); const { navigate } = useNavigation(); const [stationPin, setStationPin] = useState([]); const { selectedLine, setSelectedLine, injectJavaScript, setInjectJavaScript, mapsStationData: stationData, } = useTrainMenu(); useEffect(() => { const stationPinData = []; Object.keys(stationData).forEach((d, indexBase) => { stationData[d].forEach((D, index) => { if (!D.StationMap) return null; if (selectedLine && selectedLine != d) return; const latlng = D.StationMap.replace( "https://www.google.co.jp/maps/place/", "" ).split(","); if (latlng.length == 0) return null; if (index == 0 && stationPin.length > 0) { setInjectJavaScript( `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}'); document.getElementById("disp").insertAdjacentHTML("afterbegin", "
");` ); } stationPinData.push({ D, d, latlng, indexBase: 0, index }); }); }); setStationPin(stationPinData); }, [stationData, selectedLine]); useLayoutEffect(() => { mapRef.current.fitToCoordinates( stationPin.map(({ latlng }) => ({ latitude: parseFloat(latlng[0]), longitude: parseFloat(latlng[1]), })), { edgePadding: { top: 80, bottom: 120, left: 50, right: 50 } } // Add margin values here ); }, [stationPin]); return (