Merge commit '4b51232ccddcba1eb0b90195e9af516f375da3d0' into feature/new-setting-system

This commit is contained in:
harukin-expo-dev-env 2024-03-18 04:03:02 +00:00
commit 9e0bb9fcbb
10 changed files with 314 additions and 182 deletions

3
Top.js
View File

@ -15,9 +15,8 @@ import { optionData } from "./lib/stackOption.js";
import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; import { useCurrentTrain } from "./stateBox/useCurrentTrain.js";
const Stack = createStackNavigator(); const Stack = createStackNavigator();
export const Top = ({ navigation }) => { export const Top = ({ navigation }) => {
const webview = useRef();
const { favoriteStation, setFavoriteStation } = useFavoriteStation(); const { favoriteStation, setFavoriteStation } = useFavoriteStation();
const { getCurrentTrain } = useCurrentTrain(); const { webview, getCurrentTrain } = useCurrentTrain();
//地図用 //地図用
const [mapsStationData, setMapsStationData] = useState(undefined); const [mapsStationData, setMapsStationData] = useState(undefined);

View File

@ -7,6 +7,7 @@ export const LongHeader = ({
currentPosition, currentPosition,
nearTrainIDList, nearTrainIDList,
openTrainInfo, openTrainInfo,
navigate,
}) => { }) => {
return ( return (
<ScrollView <ScrollView
@ -27,6 +28,7 @@ export const LongHeader = ({
currentPosition={currentPosition} currentPosition={currentPosition}
nearTrainIDList={nearTrainIDList} nearTrainIDList={nearTrainIDList}
openTrainInfo={openTrainInfo} openTrainInfo={openTrainInfo}
navigate={navigate}
/> />
</ScrollView> </ScrollView>
); );

View File

@ -7,6 +7,7 @@ export const ShortHeader = ({
currentPosition, currentPosition,
nearTrainIDList, nearTrainIDList,
openTrainInfo, openTrainInfo,
navigate,
}) => { }) => {
return ( return (
<ScrollView <ScrollView
@ -29,6 +30,7 @@ export const ShortHeader = ({
currentPosition={currentPosition} currentPosition={currentPosition}
nearTrainIDList={nearTrainIDList} nearTrainIDList={nearTrainIDList}
openTrainInfo={openTrainInfo} openTrainInfo={openTrainInfo}
navigate={navigate}
/> />
</ScrollView> </ScrollView>
); );

View File

@ -1,7 +1,10 @@
import React from "react"; import React, { useState, useEffect } from "react";
import { View, TouchableOpacity, useWindowDimensions } from "react-native"; import { View, TouchableOpacity, useWindowDimensions } from "react-native";
import { StateBox } from "./StateBox"; import { StateBox } from "./StateBox";
import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientationChange"; import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientationChange";
import { getStationList2 } from "../../../lib/getStationList2";
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
import { SheetManager } from "react-native-actions-sheet";
export const TrainDataView = ({ export const TrainDataView = ({
currentTrainData, currentTrainData,
@ -9,10 +12,16 @@ export const TrainDataView = ({
nearTrainIDList, nearTrainIDList,
openTrainInfo, openTrainInfo,
mode = 0, mode = 0,
navigate,
}) => { }) => {
const { width, height } = useWindowDimensions(); const { width, height } = useWindowDimensions();
const { isLandscape } = useDeviceOrientationChange(); const { isLandscape } = useDeviceOrientationChange();
const { webview, getCurrentTrain } = useCurrentTrain();
const [mapsStationData, setMapsStationData] = useState(undefined);
useEffect(() => {
getStationList2().then(setMapsStationData);
}, []);
const onLine = !!currentPosition?.toString().length;
return ( return (
<View <View
style={{ style={{
@ -22,10 +31,29 @@ export const TrainDataView = ({
width: isLandscape ? (width / 100) * 40 : width, width: isLandscape ? (width / 100) * 40 : width,
flex: 1, flex: 1,
}} }}
>
<TouchableOpacity
style={{ flex: 1, flexDirection: "row" }}
disabled={!onLine}
onPress={() => {
const test = [];
Object.keys(mapsStationData).forEach((d) => {
mapsStationData[d].forEach((x) => {
if (x.StationNumber == currentPosition[0])
test.push({ line: d, station: x });
});
});
if (!test.length) return;
webview.current?.injectJavaScript(
`MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}')`
);
navigate("Apps");
SheetManager.hide("EachTrainInfo");
}}
> >
<StateBox <StateBox
mode={mode} mode={mode}
title={`現在地 ${currentPosition.toString()}`} title={`現在地 ${currentPosition?.toString()}${onLine ? "▶️" : ""}`}
text={ text={
currentTrainData?.Pos.match("") currentTrainData?.Pos.match("")
? `${ ? `${
@ -39,7 +67,14 @@ export const TrainDataView = ({
}` }`
: currentTrainData?.Pos : currentTrainData?.Pos
} }
style={
onLine
? { borderWidth: 1, borderColor: "red", borderStyle: "solid" }
: {}
}
/> />
</TouchableOpacity>
<View style={{ flex: 1, flexDirection: mode == 2 ? "row" : "column" }}> <View style={{ flex: 1, flexDirection: mode == 2 ? "row" : "column" }}>
<View style={{ flex: 1, flexDirection: "row" }}> <View style={{ flex: 1, flexDirection: "row" }}>
<StateBox <StateBox

View File

@ -71,10 +71,10 @@ export const EachTrainInfoCore = ({
}, []); }, []);
//bconst insets = useSafeAreaInsets(); //bconst insets = useSafeAreaInsets();
const [headStation, setHeadStation] = useState(); const [headStation, setHeadStation] = useState([]);
const [tailStation, setTailStation] = useState(); const [tailStation, setTailStation] = useState([]);
const [isConcatNear, setIsConcatNear] = useState(false); const [showHeadStation, setShowHeadStation] = useState([]);
const [showNearTrain, setShowNearTrain] = useState([]); const [showTailStation, setShowTailStation] = useState([]);
const [nearTrainIDList, setNearTrainIDList] = useState([]); const [nearTrainIDList, setNearTrainIDList] = useState([]);
const { getInfluencedTrainData } = useBusAndTrainData(); const { getInfluencedTrainData } = useBusAndTrainData();
const [trainPositionSwitch, setTrainPositionSwitch] = useState("false"); const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
@ -120,9 +120,8 @@ export const EachTrainInfoCore = ({
useEffect(() => { useEffect(() => {
if (!data.trainNum) return; if (!data.trainNum) return;
const TD = trainList[data.trainNum]; const TD = trainList[data.trainNum];
setIsConcatNear(false); setHeadStation([]);
setHeadStation(); setTailStation([]);
setTailStation();
if (!TD) { if (!TD) {
const specialTrainActualID = searchSpecialTrain(data.trainNum, trainList); const specialTrainActualID = searchSpecialTrain(data.trainNum, trainList);
setTrueTrainID(specialTrainActualID || undefined); setTrueTrainID(specialTrainActualID || undefined);
@ -134,27 +133,38 @@ export const EachTrainInfoCore = ({
//裏列車探索 //裏列車探索
useEffect(() => { useEffect(() => {
if (!data.trainNum) return; if (!data.trainNum) return;
const [returnArray, TDArray] = getInfluencedTrainData(data.trainNum); const NearTrainList = getInfluencedTrainData(data.trainNum);
if (NearTrainList.length == 0) return;
const returnArray = NearTrainList.map((d) => d.id);
const TDArray = NearTrainList.map((d) => d.TrainData);
setNearTrainIDList(returnArray); setNearTrainIDList(returnArray);
setShowNearTrain(TDArray);
if (trainData.length == 0) return; if (trainData.length == 0) return;
if (TDArray.length == 0) return; if (TDArray.length == 0) return;
let head; let head = [];
let tail; let tail = [];
TDArray.forEach((d) => { TDArray.forEach((data, i) =>
data.forEach((d) => {
const [station, se, time] = d.split(","); const [station, se, time] = d.split(",");
if (station == trainData[0].split(",")[0]) { if (station == trainData[0].split(",")[0]) {
head = trainData[0].split(",")[0]; head.push({
station: trainData[0].split(",")[0],
dia: data,
id: nearTrainIDList[i],
});
} }
if (station == trainData[trainData.length - 1].split(",")[0]) { if (station == trainData[trainData.length - 1].split(",")[0]) {
tail = trainData[trainData.length - 1].split(",")[0]; tail.push({
} station: trainData[trainData.length - 1].split(",")[0],
dia: data,
id: nearTrainIDList[i],
}); });
}
})
);
if (head) setHeadStation(head); if (head) setHeadStation(head);
else setHeadStation(); else setHeadStation([]);
if (tail) setTailStation(tail); if (tail) setTailStation(tail);
else setTailStation(); else setTailStation([]);
}, [trainData, data]); }, [trainData, data]);
useEffect(() => { useEffect(() => {
@ -256,8 +266,9 @@ export const EachTrainInfoCore = ({
</Text> </Text>
<View style={{ flex: 1 }} /> <View style={{ flex: 1 }} />
<Text style={{ fontSize: 20, fontWeight: "bold", color: "white" }}> <Text style={{ fontSize: 20, fontWeight: "bold", color: "white" }}>
{showHeadStation.map((d) => `${headStation[d].id} + `)}
{data.trainNum} {data.trainNum}
{isConcatNear ? ` + ${nearTrainIDList}` : ""} {showTailStation.map((d) => ` + ${tailStation[d].id}`)}
</Text> </Text>
{data.limited != undefined && {data.limited != undefined &&
@ -312,6 +323,7 @@ export const EachTrainInfoCore = ({
currentPosition={currentPosition} currentPosition={currentPosition}
nearTrainIDList={nearTrainIDList} nearTrainIDList={nearTrainIDList}
openTrainInfo={openTrainInfo} openTrainInfo={openTrainInfo}
navigate={navigate}
/> />
) )
} }
@ -324,6 +336,7 @@ export const EachTrainInfoCore = ({
currentPosition={currentPosition} currentPosition={currentPosition}
nearTrainIDList={nearTrainIDList} nearTrainIDList={nearTrainIDList}
openTrainInfo={openTrainInfo} openTrainInfo={openTrainInfo}
navigate={navigate}
/> />
) )
} }
@ -331,17 +344,15 @@ export const EachTrainInfoCore = ({
<ScrollStickyContent currentTrainData={currentTrainData} /> <ScrollStickyContent currentTrainData={currentTrainData} />
} }
> >
{headStation && !isConcatNear && ( {headStation.length != 0 &&
headStation.map((i, index) =>
showHeadStation.findIndex((d) => d == index) == -1 ? (
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={() => {
const array = openBackTrainInfo( const array = openBackTrainInfo(i.station, trainData, i.dia);
headStation,
trainData,
showNearTrain
);
if (!array) return; if (!array) return;
setTrainData(array); setTrainData(array);
setIsConcatNear(true); setShowHeadStation([...showHeadStation, index]);
}} }}
style={{ style={{
padding: 10, padding: 10,
@ -353,10 +364,15 @@ export const EachTrainInfoCore = ({
alignItems: "center", alignItems: "center",
}} }}
> >
<Text style={{ fontSize: 18, fontWeight: "bold", color: "black" }}> <Text
style={{ fontSize: 18, fontWeight: "bold", color: "black" }}
>
本当の始発駅を表示 本当の始発駅を表示
</Text> </Text>
</TouchableOpacity> </TouchableOpacity>
) : (
<></>
)
)} )}
{/* <LottieView {/* <LottieView
autoPlay autoPlay
@ -397,18 +413,17 @@ export const EachTrainInfoCore = ({
/> />
) )
)} )}
{tailStation && !isConcatNear && ( {tailStation.length != 0 &&
tailStation.map((i, index) =>
showTailStation.findIndex((d) => d == index) == -1 ? (
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={() => {
const array = openBackTrainInfo( const array = openBackTrainInfo(i.station, trainData, i.dia);
tailStation,
trainData,
showNearTrain
);
if (!array) return; if (!array) return;
setTrainData(array); setTrainData(array);
setIsConcatNear(true);
setShowTailStation([...showTailStation, index]);
}} }}
style={{ style={{
padding: 10, padding: 10,
@ -420,10 +435,15 @@ export const EachTrainInfoCore = ({
alignItems: "center", alignItems: "center",
}} }}
> >
<Text style={{ fontSize: 18, fontWeight: "bold", color: "black" }}> <Text
style={{ fontSize: 18, fontWeight: "bold", color: "black" }}
>
本当の終着駅を表示 本当の終着駅を表示
</Text> </Text>
</TouchableOpacity> </TouchableOpacity>
) : (
<></>
)
)} )}
<View style={{ flexDirection: "row" }}> <View style={{ flexDirection: "row" }}>

View File

@ -84,7 +84,7 @@ export const SettingTopPage = ({
/> />
<View style={{ flexDirection: "row", padding: 10 }}> <View style={{ flexDirection: "row", padding: 10 }}>
<View style={{ flex: 1 }} /> <View style={{ flex: 1 }} />
<Text>内部バージョン: 5.0.2.3</Text> <Text>内部バージョン: 5.0.3</Text>
<View style={{ flex: 1 }} /> <View style={{ flex: 1 }} />
</View> </View>

View File

@ -243,25 +243,15 @@ export const customTrainDataDetector = (TrainNumber) => {
trainNumDistance: 5000, trainNumDistance: 5000,
info: "南風と併結 / 高松-宇多津間進行方向逆転 / 2700系で運転", info: "南風と併結 / 高松-宇多津間進行方向逆転 / 2700系で運転",
}; };
case "3002D":
case "3004D": case "3004D":
case "3010D": case "3010D":
case "3012D": case "3014D":
case "3016D": case "3016D":
case "3018D":
case "3024D":
case "3028D": case "3028D":
case "3030D":
case "3003D": case "3003D":
case "3005D":
case "3007D": case "3007D":
case "3015D":
case "3019D":
case "3021D":
case "3025D": case "3025D":
case "3027D":
case "3031D": case "3031D":
case "3033D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "うずしお", trainName: "うずしお",
@ -271,14 +261,24 @@ export const customTrainDataDetector = (TrainNumber) => {
}; };
//2600 //2600
case "3008D": case "3002D":
case "3014D": case "3012D":
case "3018D":
case "3020D": case "3020D":
case "3024D":
case "3026D": case "3026D":
case "3001D": case "3030D":
case "3032D":
case "3005D":
case "3009D":
case "3011D": case "3011D":
case "3015D":
case "3017D": case "3017D":
case "3019D":
case "3021D":
case "3023D": case "3023D":
case "3027D":
case "3033D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "うずしお", trainName: "うずしお",
@ -288,8 +288,8 @@ export const customTrainDataDetector = (TrainNumber) => {
}; };
//キハ185 //キハ185
case "3009D": case "3001D":
case "3032D": case "3008D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "うずしお", trainName: "うずしお",
@ -484,13 +484,11 @@ export const customTrainDataDetector = (TrainNumber) => {
case "2074D": case "2074D":
case "2076D": case "2076D":
case "2080D": case "2080D":
case "2084D": case "2082D":
case "2086D":
case "2071D": case "2071D":
case "2075D": case "2073D":
case "2077D": case "2079D":
case "2081D": case "2081D":
case "2083D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "あしずり", trainName: "あしずり",
@ -501,12 +499,12 @@ export const customTrainDataDetector = (TrainNumber) => {
//あしずり 2700 //あしずり 2700
case "2078D": case "2078D":
case "2082D": case "2084D":
case "2088D": case "2088D":
case "2073D": case "2075D":
case "2079D": case "2077D":
case "2085D":
case "2072D": case "2072D":
case "2083D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "あしずり", trainName: "あしずり",
@ -536,8 +534,8 @@ export const customTrainDataDetector = (TrainNumber) => {
}; };
//むろと //むろと
case "5051D": case "8051D":
case "5052D": case "8052D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "むろと", trainName: "むろと",
@ -585,8 +583,8 @@ export const customTrainDataDetector = (TrainNumber) => {
}; };
//千年ものがたり //千年ものがたり
case "8011D": case "8021D":
case "8012D": case "8022D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "四国まんなか千年ものがたり", trainName: "四国まんなか千年ものがたり",
@ -596,10 +594,10 @@ export const customTrainDataDetector = (TrainNumber) => {
}; };
//夜明けものがたり //夜明けものがたり
case "8053D": case "8082D":
case "8054D": case "8083D":
case "8062D": case "8073D":
case "8063D": case "8074D":
return { return {
type: "LTDEXP", type: "LTDEXP",
trainName: "時代の夜明けのものがたり", trainName: "時代の夜明けのものがたり",

View File

@ -204,43 +204,43 @@ export const injectJavascriptData = (
case "5022D": case "5022D":
case "5013D": case "5013D":
case "5029D": case "5029D":
case "3002D":
case "3004D": case "3004D":
case "3010D": case "3010D":
case "3012D": case "3014D":
case "3016D": case "3016D":
case "3018D":
case "3024D":
case "3028D": case "3028D":
case "3030D":
case "3003D": case "3003D":
case "3005D":
case "3007D": case "3007D":
case "3015D":
case "3019D":
case "3021D":
case "3025D": case "3025D":
case "3027D":
case "3031D": case "3031D":
case "3033D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2700_uzu.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2700_uzu.png');
break; break;
//2600 //2600
case "3008D": case "3002D":
case "3014D": case "3012D":
case "3018D":
case "3020D": case "3020D":
case "3024D":
case "3026D": case "3026D":
case "3001D": case "3030D":
case "3032D":
case "3005D":
case "3009D":
case "3011D": case "3011D":
case "3015D":
case "3017D": case "3017D":
case "3019D":
case "3021D":
case "3023D": case "3023D":
case "3027D":
case "3033D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2600.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2600.png');
break; break;
//キハ185 //キハ185
case "3009D": case "3001D":
case "3032D": case "3008D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185tu_uzu.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185tu_uzu.png');
break; break;
@ -386,24 +386,22 @@ export const injectJavascriptData = (
case "2074D": case "2074D":
case "2076D": case "2076D":
case "2080D": case "2080D":
case "2084D": case "2082D":
case "2086D":
case "2071D": case "2071D":
case "2075D": case "2073D":
case "2077D": case "2079D":
case "2081D": case "2081D":
case "2083D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2000_asi.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2000_asi.png');
break; break;
//あしずり 2700 //あしずり 2700
case "2078D": case "2078D":
case "2082D": case "2084D":
case "2088D": case "2088D":
case "2073D": case "2075D":
case "2079D": case "2077D":
case "2085D":
case "2072D": case "2072D":
case "2083D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2700_asi.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2700_asi.png');
break; break;
//剣山 //剣山
@ -421,8 +419,8 @@ export const injectJavascriptData = (
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185tu.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185tu.png');
break; break;
//むろと //むろと
case "5051D": case "8051D":
case "5052D": case "8052D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185_mrt.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185_mrt.png');
break; break;
@ -452,30 +450,55 @@ export const injectJavascriptData = (
//千年ものがたり //千年ものがたり
case "8011D": case "8021D":
case "8012D": case "8022D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185mm1.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185mm1.png');
break; break;
//夜明けものがたり //夜明けものがたり
case "8053D": case "8082D":
case "8054D": case "8083D":
case "8062D": case "8073D":
case "8063D": case "8074D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185ym1.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185ym1.png');
break; break;
//ラマルドボア
case "9253M":
case "9256M":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/w213w.png');
break;
// 貨物
case "74":
case "75":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/ef65_fs.png');
break;
case "70":
case "71":
case "73":
case "76":
case "3070":
case "3071":
case "3072":
case "3073":
case "3076":
case "3077":
case "3078":
case "3079":
case "8070":
case "8071":
case "8072":
case "8077":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/ef210a.png');
break;
default: default:
break; break;
} }
` `
: ``; : ``;
const JRF_icon =
iconSetting == "true"
? `JRF || setStationIcon(element.querySelector("img"),'https://storage.haruk.in/ef210a.png');`
: ``;
const normal_train_name = ` const normal_train_name = `
if(new RegExp(/^4[1-9]\\d\\d[DM]$/).test(列番データ) || new RegExp(/^5[1-7]\\d\\d[DM]$/).test(列番データ)){ if(new RegExp(/^4[1-9]\\d\\d[DM]$/).test(列番データ) || new RegExp(/^5[1-7]\\d\\d[DM]$/).test(列番データ) || 列番データ ==="3621D"){
行き先情報.innerText = "ワンマン\\n"+行き先情報.innerText; 行き先情報.innerText = "ワンマン\\n"+行き先情報.innerText;
flag=true; flag=true;
} }
@ -495,8 +518,7 @@ export const injectJavascriptData = (
行き先情報.innerText = 行き先情報.innerText+"臨時列車\\n"; 行き先情報.innerText = 行き先情報.innerText+"臨時列車\\n";
} }
`; `;
const JRF_name = const JRF_name = `
`
let JRF = false; let JRF = false;
const getJRF = num =>{ const getJRF = num =>{
switch(num){ switch(num){
@ -535,7 +557,7 @@ const getJRF = num =>{
const data = getJRF(列番データ); const data = getJRF(列番データ);
行き先情報.innerText = data != null ? data+行き先情報.innerText : 行き先情報.innerText; 行き先情報.innerText = data != null ? data+行き先情報.innerText : 行き先情報.innerText;
` + JRF_icon; `;
const TKT_name = ` const TKT_name = `
//安芸行と併結列車を個別に表示、それ以外をdefaultで下りなら既定の行き先を、上りなら奈半利行を設定 //安芸行と併結列車を個別に表示、それ以外をdefaultで下りなら既定の行き先を、上りなら奈半利行を設定
@ -548,9 +570,10 @@ const data = getJRF(列番データ);
return "ごめん・なはり線直通\\n快速 安芸行"; return "ごめん・なはり線直通\\n快速 安芸行";
case "5874D": case "5874D":
case "5882D": case "5882D":
case "5878D":
return "ごめん・なはり線直通\\n各停 安芸行"; return "ごめん・なはり線直通\\n各停 安芸行";
case "742D": case "246D":
case "746D": case "750D":
return "土佐山田/奈半利行\\n(後免にて解結)\\nごめん・なはり線快速"; return "土佐山田/奈半利行\\n(後免にて解結)\\nごめん・なはり線快速";
default: default:
if(new RegExp(/^58[1-3][1,3,5,7,9][DM]$/).test(列番データ)){ if(new RegExp(/^58[1-3][1,3,5,7,9][DM]$/).test(列番データ)){

View File

@ -63,11 +63,51 @@ export const BusAndTrainDataProvider = ({ children }) => {
const getInfluencedTrainData = (trainNum) => { const getInfluencedTrainData = (trainNum) => {
const trainPairList = initializeTrainPairList(); const trainPairList = initializeTrainPairList();
// 9253M ラマル
// 9256M ラマル
// 4125m-545M
//143M-147M
// 1261M-4261M
// 3621DWANMAN
//8091D-IYO-OZU
//8093D-IYO-YAWA
//8092D-IYO-FUTAMI
//8094-IYO-DOGO
const returnArray = []; const returnArray = [];
if (!trainNum) return; if (!trainNum) return;
if (trainPairList[trainNum]) { if (trainPairList[trainNum]) {
returnArray.push(Object.keys(trainPairList[trainNum])[0]); returnArray.push(Object.keys(trainPairList[trainNum])[0]);
} }
switch (trainNum) {
case "4125M":
returnArray.push("545M");
break;
case "545M":
returnArray.push("4125M");
break;
case "143M":
returnArray.push("147M");
break;
case "147M":
returnArray.push("143M");
break;
case "1261M":
returnArray.push("4261M");
break;
case "4261M":
returnArray.push("1261M");
break;
case new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum):
if (trainList["5" + trainNum.substring(1)])
returnArray.push("5" + trainNum.substring(1));
break;
case new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum):
if (trainList["4" + trainNum.substring(1)])
returnArray.push("4" + trainNum.substring(1));
break;
}
if ( if (
// 列番が4xxDまたは5xxDの場合はxxDの列番を検索 // 列番が4xxDまたは5xxDの場合はxxDの列番を検索
new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) || new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) ||
@ -82,11 +122,14 @@ export const BusAndTrainDataProvider = ({ children }) => {
if (trainList["4" + trainNum]) returnArray.push("4" + trainNum); if (trainList["4" + trainNum]) returnArray.push("4" + trainNum);
if (trainList["5" + trainNum]) returnArray.push("5" + trainNum); if (trainList["5" + trainNum]) returnArray.push("5" + trainNum);
} }
if (!returnArray[0]) return [[], []];
const TD = trainList[returnArray[0]]; if (!returnArray.length) return [];
if (!TD) return [[], []]; const TDArray = returnArray.map((d) => {
const TDArray = TD.split("#").filter((d) => d != ""); const TD = trainList[d];
return [returnArray, TDArray]; if (!TD) return;
return { id: d, TrainData: TD.split("#").filter((d) => d != "") };
});
return TDArray;
}; };
return ( return (
<BusAndTrainDataContext.Provider <BusAndTrainDataContext.Provider

View File

@ -1,8 +1,15 @@
import React, { createContext, useContext, useState, useEffect } from "react"; import React, {
createContext,
useContext,
useState,
useEffect,
useRef,
} from "react";
import { HeaderConfig } from "../lib/HeaderConfig"; import { HeaderConfig } from "../lib/HeaderConfig";
import useInterval from "../lib/useInterval"; import useInterval from "../lib/useInterval";
const initialState = { const initialState = {
webview: {},
currentTrain: [], currentTrain: [],
setCurrentTrain: () => {}, setCurrentTrain: () => {},
currentTrainLoading: "loading", currentTrainLoading: "loading",
@ -40,9 +47,12 @@ export const CurrentTrainProvider = ({ children }) => {
useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得
useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得 useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得
const webview = useRef();
return ( return (
<CurrentTrainContext.Provider <CurrentTrainContext.Provider
value={{ value={{
webview,
currentTrain, currentTrain,
setCurrentTrain, setCurrentTrain,
currentTrainLoading, currentTrainLoading,