import React, { useEffect, useState } from "react"; import { View, LayoutAnimation, ScrollView, Linking, Text, TouchableOpacity, TouchableWithoutFeedback, TouchableHighlight, Platform, } from "react-native"; import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; import ActionSheet from "react-native-actions-sheet"; import LottieView from "lottie-react-native"; import trainList from "../../assets/originData/trainList"; import { lineList } from "../../lib/getStationList"; import { heightPercentageToDP } from "react-native-responsive-screen"; import lineColorList from "../../assets/originData/lineColorList"; export const EachTrainInfo = ({ setRef, data, navigate, originalStationList, openStationACFromEachTrainInfo, from, }) => { const [trainData, setTrainData] = useState([]); const [isTop, setIsTop] = useState(true); const [currentPosition, setCurrentPosition] = useState([]); const getStationData = (stationName) => { const Stations = stationList.map((a) => a.filter((d) => d.StationName == stationName) ); const Station = Stations && Stations.reduce((newArray, e) => { return newArray.concat(e); }, []); if (!Station[0]) return []; return Station.map((d) => d.StationNumber)[0]; }; useEffect(() => { //data.trainData.Pos = "鴨川~端岡"; //test if (!data.trainData?.Pos) return; if (data.trainData?.Pos.match("~")) { const pos = data.trainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~"); setCurrentPosition([getStationData(pos[0]), getStationData(pos[1])]); } else { setCurrentPosition([getStationData(data.trainData?.Pos)]); } }, [data.trainData]); const stationList = originalStationList && lineList.map((d) => originalStationList[d].map((a) => ({ StationNumber: a.StationNumber, StationName: a.Station_JP, })) ); const stopStationIDList = trainData.map((i, index) => { const [station, se, time] = i.split(","); const Stations = stationList.map((a) => a.filter((d) => d.StationName == station) ); const StationNumbers = Stations && Stations.reduce((newArray, e) => { return newArray.concat(e); }, []) .filter((d) => d.StationNumber) .map((d) => d.StationNumber); return StationNumbers[0]; }); function findReversalPoints(array) { let reversalPoints = []; for (let i = 0; i < stopStationIDList.length; i++) { if (array.length == 1) { console.log(stopStationIDList[i], array[0]); if (stopStationIDList[i] == array[0]) { reversalPoints.push(i); } else if ( stopStationIDList[i] > array[0] && stopStationIDList[i + 1] < array[0] ) { reversalPoints.push(i + 1); } } else { if ( stopStationIDList[i] == array[0] && stopStationIDList[i + 1] == array[1] ) { reversalPoints.push(i + 1); } else if ( stopStationIDList[i] == array[1] && stopStationIDList[i + 1] == array[0] ) { reversalPoints.push(i + 1); } else if ( array[0] < stopStationIDList[i] && stopStationIDList[i] < array[1] ) { reversalPoints.push(i); } else if ( array[1] < stopStationIDList[i] && stopStationIDList[i] < array[0] ) { reversalPoints.push(i); } else if ( stopStationIDList[i + 1] < array[0] && stopStationIDList[i + 1] < array[1] && stopStationIDList[i] > array[0] && stopStationIDList[i] > array[1] ) { reversalPoints.push(i + 1); } else if ( stopStationIDList[i + 1] > array[0] && stopStationIDList[i + 1] > array[1] && stopStationIDList[i] < array[0] && stopStationIDList[i] < array[1] ) { reversalPoints.push(i + 1); } } } return reversalPoints; } // 使用例 const points = findReversalPoints(currentPosition); console.log(currentPosition, points); console.log(currentPosition.length, points.length); useEffect(() => { console.log(data); setIsTop(true); if (!data.trainNum) return; const TD = trainList[data.trainNum]; if (!TD) { setTrainData([]); return; } setTrainData(TD.split("#")); }, [data]); const getType = (string) => { switch (string) { case "express": return "特急"; case "rapid": return "快速"; default: return ""; } }; const migrateTrainName = (string) => { return string .replace("マリン", "マリンライナー") .replace("ライナーライナー", "ライナー"); }; return ( } > {data.limited ? getType(data.limited.split(":")[0]) + migrateTrainName(data.limited.split(":")[1] || "普通") : ""} {data.trainNum} {data.limited != undefined && getType(data.limited.split(":")[0]) && !data.limited.split(":")[1].match("サンポート") && ( { LayoutAnimation.easeInEaseOut(); //setLoadingDelayData(true); navigate("trainbase", { info: "train.html?tn=" + data.trainNum, from, }); setRef.current?.hide(); }} /> )} 現在地 {currentPosition.toString()} {data.trainData?.Pos && data.trainData?.Pos.match("~") ? ( <> { data.trainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~")[0] } { data.trainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~")[1] } ) : ( {data.trainData?.Pos} )} {isNaN(data.trainData?.delay) ? "状態" : "遅延時分"} {data.trainData?.delay} {isNaN(data.trainData?.delay) ? "" : "分"} 列番 {data.trainData?.num} { if (!Platform.OS !== "android") return; setIsTop(e.nativeEvent.contentOffset.y < 0); }} > {/* ほげほげふがふが */} {trainData.map((i, index) => { const [station, se, time] = i.split(","); const Stations = stationList.map((a) => a.filter((d) => d.StationName == station) ); const StationNumbers = Stations && Stations.reduce((newArray, e) => { return newArray.concat(e); }, []) .filter((d) => d.StationNumber) .map((d) => d.StationNumber); const colorIDs = StationNumbers != null ? StationNumbers.map((d) => { return d.split("").filter((s) => "A" < s && s < "Z"); }).reduce((newArray, e) => { return newArray.concat(e); }, []) : []; const EachIDs = StationNumbers != null ? StationNumbers.map((d) => { return d .split("") .filter((s) => "0" <= s && s <= "9") .join(""); }) : []; return ( openStationACFromEachTrainInfo(station)} key={station} > {colorIDs.map((color, index) => ( {colorIDs[index]} {EachIDs[index]} ))} {station} {/* {StationNumbers.length != 0 && (StationNumbers.includes(currentPosition[0]) ? "にゃーん" : "ほげ")} {currentPosition} */} {points.includes(index) ? "🚉" : ""} {time} {se} ); })} ); };