裏列車探索を外部に出力

This commit is contained in:
harukin-OneMix4 2024-02-02 12:11:32 +09:00
parent a6d8f9ac33
commit b8176d2f29
2 changed files with 35 additions and 40 deletions

View File

@ -7,7 +7,6 @@ import {
Text, Text,
TouchableOpacity, TouchableOpacity,
TouchableWithoutFeedback, TouchableWithoutFeedback,
TouchableHighlight,
Platform, Platform,
} from "react-native"; } from "react-native";
import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
@ -15,9 +14,7 @@ import ActionSheet, {
SheetManager, SheetManager,
useScrollHandlers, useScrollHandlers,
} from "react-native-actions-sheet"; } from "react-native-actions-sheet";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { AS } from "../../storageControl"; import { AS } from "../../storageControl";
import LottieView from "lottie-react-native";
import trainList from "../../assets/originData/trainList"; import trainList from "../../assets/originData/trainList";
import { lineList } from "../../lib/getStationList"; import { lineList } from "../../lib/getStationList";
import { import {
@ -31,7 +28,6 @@ import dayjs from "dayjs";
import { getTrainType } from "../../lib/getTrainType"; import { getTrainType } from "../../lib/getTrainType";
import { customTrainDataDetector } from "../custom-train-data"; import { customTrainDataDetector } from "../custom-train-data";
import { useBusAndTrainData } from "../../stateBox/useBusAndTrainData"; import { useBusAndTrainData } from "../../stateBox/useBusAndTrainData";
import { Swipeable } from "react-native-gesture-handler";
export const EachTrainInfo = (props) => { export const EachTrainInfo = (props) => {
if (!props.payload) return <></>; if (!props.payload) return <></>;
@ -48,7 +44,7 @@ export const EachTrainInfo = (props) => {
const [trainPositionSwitch, setTrainPositionSwitch] = useState("false"); const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
const { currentTrain } = useCurrentTrain(); const { currentTrain } = useCurrentTrain();
const { initializeTrainPairList } = useBusAndTrainData(); const { getInfluencedTrainData } = useBusAndTrainData();
const [currentTrainData, setCurrentTrainData] = useState([]); const [currentTrainData, setCurrentTrainData] = useState([]);
const [nearTrainIDList, setNearTrainIDList] = useState([]); const [nearTrainIDList, setNearTrainIDList] = useState([]);
@ -59,36 +55,15 @@ export const EachTrainInfo = (props) => {
//裏列車探索 //裏列車探索
useEffect(() => { useEffect(() => {
const trainPairList = initializeTrainPairList();
const returnArray = [];
if (!data.trainNum) return; if (!data.trainNum) return;
if (trainPairList[data.trainNum]) { const [returnArray, TDArray] = getInfluencedTrainData(data.trainNum);
returnArray.push(Object.keys(trainPairList[data.trainNum])[0]);
}
if (
// 列番が4xxDまたは5xxDの場合はxxDの列番を検索
new RegExp(/^4[1-9]\d\d[DM]$/).test(data.trainNum) ||
new RegExp(/^5[1-7]\d\d[DM]$/).test(data.trainNum)
) {
if (trainList[data.trainNum.substring(1)]) {
returnArray.push(data.trainNum.substring(1));
}
}
if (new RegExp(/^[1-9]\d\d[DM]$/).test(data.trainNum)) {
// 列番がxxDの場合は4xxDと5xxDの列番を検索
if (trainList["4" + data.trainNum]) returnArray.push("4" + data.trainNum);
if (trainList["5" + data.trainNum]) returnArray.push("5" + data.trainNum);
}
setNearTrainIDList(returnArray); setNearTrainIDList(returnArray);
if (!returnArray[0]) return;
const TD = trainList[returnArray[0]];
if (!TD) return;
const TDArray = TD.split("#").filter((d) => d != "");
setShowNearTrain(TDArray); setShowNearTrain(TDArray);
}, [data]); }, [data]);
useEffect(() => { useEffect(() => {
if (trainData.length == 0) return; if (trainData.length == 0) return;
if (showNearTrain.length == 0) return;
showNearTrain.forEach((d) => { showNearTrain.forEach((d) => {
const [station, se, time] = d.split(","); const [station, se, time] = d.split(",");
@ -673,9 +648,6 @@ export const EachTrainInfo = (props) => {
points={points} points={points}
currentTrainData={currentTrainData} currentTrainData={currentTrainData}
openStationACFromEachTrainInfo={openStationACFromEachTrainInfo} openStationACFromEachTrainInfo={openStationACFromEachTrainInfo}
headAndTail={showNearTrain.map((d) => d.split(",")[0])}
openBackTrainInfo={openBackTrainInfo}
isConcatNear={isConcatNear}
/> />
) )
)} )}
@ -760,9 +732,6 @@ const StationButton = ({
points, points,
currentTrainData, currentTrainData,
openStationACFromEachTrainInfo, openStationACFromEachTrainInfo,
headAndTail,
openBackTrainInfo,
isConcatNear,
}) => { }) => {
const [station, se, time] = i.split(","); // 阿波池田,発,6:21 const [station, se, time] = i.split(","); // 阿波池田,発,6:21
const Stations = stationList const Stations = stationList
@ -798,11 +767,6 @@ const StationButton = ({
.add(isNaN(currentTrainData?.delay) ? 0 : currentTrainData.delay, "minute"); .add(isNaN(currentTrainData?.delay) ? 0 : currentTrainData.delay, "minute");
const timeString = dates.format("HH:mm").split(":"); const timeString = dates.format("HH:mm").split(":");
const StationNames = Stations && Stations[0]?.StationName;
const [isConnected, setIsConnected] = useState(
headAndTail.includes(StationNames)
);
const swipagleRef = useRef(null);
return ( return (
<TouchableWithoutFeedback <TouchableWithoutFeedback
onPress={() => openStationACFromEachTrainInfo(station)} onPress={() => openStationACFromEachTrainInfo(station)}

View File

@ -1,10 +1,12 @@
import React, { createContext, useContext, useState } from "react"; import React, { createContext, useContext, useState } from "react";
import trainList from "../assets/originData/trainList";
const initialState = { const initialState = {
busAndTrainData: [], busAndTrainData: [],
setBusAndTrainData: () => {}, setBusAndTrainData: () => {},
trainPairData: [], trainPairData: [],
setTrainPairData: () => {}, setTrainPairData: () => {},
initializeTrainPairList: () => {}, initializeTrainPairList: () => {},
getInfluencedTrainData: () => {},
}; };
const BusAndTrainDataContext = createContext(initialState); const BusAndTrainDataContext = createContext(initialState);
@ -23,6 +25,34 @@ export const BusAndTrainDataProvider = ({ children }) => {
}); });
return trainPairList; return trainPairList;
}; };
const getInfluencedTrainData = (trainNum) => {
const trainPairList = initializeTrainPairList();
const returnArray = [];
if (!trainNum) return;
if (trainPairList[trainNum]) {
returnArray.push(Object.keys(trainPairList[trainNum])[0]);
}
if (
// 列番が4xxDまたは5xxDの場合はxxDの列番を検索
new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) ||
new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum)
) {
if (trainList[trainNum.substring(1)]) {
returnArray.push(trainNum.substring(1));
}
}
if (new RegExp(/^[1-9]\d\d[DM]$/).test(trainNum)) {
// 列番がxxDの場合は4xxDと5xxDの列番を検索
if (trainList["4" + trainNum]) returnArray.push("4" + trainNum);
if (trainList["5" + trainNum]) returnArray.push("5" + trainNum);
}
if (!returnArray[0]) return [[], []];
const TD = trainList[returnArray[0]];
if (!TD) return [[], []];
const TDArray = TD.split("#").filter((d) => d != "");
return [returnArray, TDArray];
};
return ( return (
<BusAndTrainDataContext.Provider <BusAndTrainDataContext.Provider
value={{ value={{
@ -31,6 +61,7 @@ export const BusAndTrainDataProvider = ({ children }) => {
trainPairData, trainPairData,
setTrainPairData, setTrainPairData,
initializeTrainPairList, initializeTrainPairList,
getInfluencedTrainData,
}} }}
> >
{children} {children}