中央時三段活用可能に変更、ダイヤ情報の部分更新

This commit is contained in:
harukin-expo-dev-env 2024-03-17 16:16:28 +00:00
parent a769ccb951
commit d1ee693557
3 changed files with 185 additions and 93 deletions

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) =>
const [station, se, time] = d.split(","); data.forEach((d) => {
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],
if (station == trainData[trainData.length - 1].split(",")[0]) { dia: data,
tail = trainData[trainData.length - 1].split(",")[0]; id: nearTrainIDList[i],
} });
}); }
if (station == 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 &&
@ -331,33 +342,36 @@ export const EachTrainInfoCore = ({
<ScrollStickyContent currentTrainData={currentTrainData} /> <ScrollStickyContent currentTrainData={currentTrainData} />
} }
> >
{headStation && !isConcatNear && ( {headStation.length != 0 &&
<TouchableOpacity headStation.map((i, index) =>
onPress={() => { showHeadStation.findIndex((d) => d == index) == -1 ? (
const array = openBackTrainInfo( <TouchableOpacity
headStation, onPress={() => {
trainData, const array = openBackTrainInfo(i.station, trainData, i.dia);
showNearTrain if (!array) return;
); setTrainData(array);
if (!array) return; setShowHeadStation([...showHeadStation, index]);
setTrainData(array); }}
setIsConcatNear(true); style={{
}} padding: 10,
style={{ flexDirection: "row",
padding: 10, borderColor: "blue",
flexDirection: "row", borderWidth: 1,
borderColor: "blue", margin: 10,
borderWidth: 1, borderRadius: 5,
margin: 10, alignItems: "center",
borderRadius: 5, }}
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
loop loop
@ -397,34 +411,38 @@ export const EachTrainInfoCore = ({
/> />
) )
)} )}
{tailStation && !isConcatNear && ( {tailStation.length != 0 &&
<TouchableOpacity tailStation.map((i, index) =>
onPress={() => { showTailStation.findIndex((d) => d == index) == -1 ? (
const array = openBackTrainInfo( <TouchableOpacity
tailStation, onPress={() => {
trainData, const array = openBackTrainInfo(i.station, trainData, i.dia);
showNearTrain
);
if (!array) return; if (!array) return;
setTrainData(array); setTrainData(array);
setIsConcatNear(true);
}} setShowTailStation([...showTailStation, index]);
style={{ }}
padding: 10, style={{
flexDirection: "row", padding: 10,
borderColor: "blue", flexDirection: "row",
borderWidth: 1, borderColor: "blue",
margin: 10, borderWidth: 1,
borderRadius: 5, margin: 10,
alignItems: "center", borderRadius: 5,
}} alignItems: "center",
> }}
<Text style={{ fontSize: 18, fontWeight: "bold", color: "black" }}> >
本当の終着駅を表示 <Text
</Text> style={{ fontSize: 18, fontWeight: "bold", color: "black" }}
</TouchableOpacity> >
)} 本当の終着駅を表示
</Text>
</TouchableOpacity>
) : (
<></>
)
)}
<View style={{ flexDirection: "row" }}> <View style={{ flexDirection: "row" }}>
<View <View

View File

@ -454,6 +454,8 @@ export const injectJavascriptData = (
//千年ものがたり //千年ものがたり
case "8011D": case "8011D":
case "8012D": case "8012D":
case "8021D":
case "8022D":
setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185mm1.png'); setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185mm1.png');
break; break;
@ -462,20 +464,49 @@ export const injectJavascriptData = (
case "8054D": case "8054D":
case "8062D": case "8062D":
case "8063D": case "8063D":
case "8082D":
case "8083D":
case "8073D":
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 +526,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 +565,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 +578,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