列車の表示条件の厳密化、および出発促進表示を追加

This commit is contained in:
harukin-expo-dev-env 2025-04-20 05:31:30 +00:00
parent fbcded3d23
commit 8c17a5b3da
2 changed files with 56 additions and 16 deletions

View File

@ -16,6 +16,8 @@ import { TrainPosition } from "./LED_inside_Component/TrainPosition";
import { TrainPositionDataPush } from "./LED_inside_Component/TrainPositionDataPush"; import { TrainPositionDataPush } from "./LED_inside_Component/TrainPositionDataPush";
import { TrainPositionDataDelete } from "./LED_inside_Component/TrainPositionDataDelete"; import { TrainPositionDataDelete } from "./LED_inside_Component/TrainPositionDataDelete";
import { useStationList } from "../../stateBox/useStationList"; import { useStationList } from "../../stateBox/useStationList";
import useInterval from "@/lib/useInterval";
import dayjs from "dayjs";
type Props = { type Props = {
d: { d: {
@ -117,6 +119,22 @@ export const EachData: FC<Props> = (props) => {
const [descInput, setDescInput] = useState(""); const [descInput, setDescInput] = useState("");
const [stationInput, setStationInput] = useState(""); const [stationInput, setStationInput] = useState("");
const [stationNumberInput, setStationNumberInput] = useState(""); const [stationNumberInput, setStationNumberInput] = useState("");
const [isShow, setIsShow] = useState(true);
const [isDepartureNow, setIsDepartureNow] = useState(false);
useEffect(()=>{
const currentTime = dayjs();
const trainTime = currentTime.set("hour", parseInt(d.time.split(":")[0])).set("minute", parseInt(d.time.split(":")[1]));
const diff = trainTime.diff(currentTime, "minute");
if (diff < 2) setIsDepartureNow(true);
else setIsDepartureNow(false);
})
useInterval(()=>{
if (isDepartureNow) {
setIsShow(!isShow);
}
}, 800);
return ( return (
<> <>
<TrainPositionDataDelete <TrainPositionDataDelete
@ -147,6 +165,7 @@ export const EachData: FC<Props> = (props) => {
marginHorizontal: "3%", marginHorizontal: "3%",
backgroundColor: "#000", backgroundColor: "#000",
flexDirection: "row", flexDirection: "row",
opacity: isShow ? 1 : 0.5,
}} }}
onPress={() => openTrainInfo(d)} onPress={() => openTrainInfo(d)}
key={ d.train + "-eachData" } key={ d.train + "-eachData" }
@ -162,6 +181,9 @@ export const EachData: FC<Props> = (props) => {
<DependTime time={d.time} /> <DependTime time={d.time} />
<StatusAndDelay trainDelayStatus={trainDelayStatus} /> <StatusAndDelay trainDelayStatus={trainDelayStatus} />
</TouchableOpacity> </TouchableOpacity>
{!!isDepartureNow && (
<Description info={d.lastStation == "当駅止" ? "この列車は当駅止です。間もなく到着します。":"この列車は間もなく発車します。"} key={d.train + "-description"} />
)}
{trainDescriptionSwitch && ( {trainDescriptionSwitch && (
<TrainPosition <TrainPosition
trainIDSwitch={trainIDSwitch} trainIDSwitch={trainIDSwitch}

View File

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { View,useWindowDimensions } from "react-native"; import { View, useWindowDimensions } from "react-native";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useInterval } from "../../lib/useInterval"; import { useInterval } from "../../lib/useInterval";
import { objectIsEmpty } from "../../lib/objectIsEmpty"; import { objectIsEmpty } from "../../lib/objectIsEmpty";
@ -98,7 +98,7 @@ export default function LED_vision(props) {
if (!trainTimeAndNumber) return () => {}; if (!trainTimeAndNumber) return () => {};
if (!currentTrain) return () => {}; if (!currentTrain) return () => {};
const data = trainTimeAndNumber const data = trainTimeAndNumber
.filter((d) => currentTrain.map((m) => m.num).includes(d.train)) //.filter((d) => currentTrain.map((m) => m.num).includes(d.train))
.filter(timeFiltering) .filter(timeFiltering)
.filter((d) => !!finalSwitch || d.lastStation != "当駅止"); .filter((d) => !!finalSwitch || d.lastStation != "当駅止");
setSelectedTrain(data); setSelectedTrain(data);
@ -145,22 +145,40 @@ export default function LED_vision(props) {
}; };
const timeFiltering = (d) => { const timeFiltering = (d) => {
const Pos = trainPosition(currentTrain.filter((t) => t.num == d.train)[0])
const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos; const baseTime = 2;
const PrePos = Pos.isBetween ? Pos.Pos.from : "";
if(station[0].Station_JP == nextPos){ if (currentTrain.filter((t) => t.num == d.train).length == 0) {
return true; const date = dayjs();
} const trainTime = date
else if(station[0].Station_JP == PrePos){ .hour(parseInt(d.time.split(":")[0]))
.minute(parseInt(d.time.split(":")[1]));
if (date.isAfter(trainTime)) {
return false;
} else if (trainTime.diff(date) < baseTime * 60 * 60 * 1000) {
return true;
}
return false; return false;
} else {
const Pos = trainPosition(
currentTrain.filter((t) => t.num == d.train)[0]
);
const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos;
const PrePos = Pos.isBetween ? Pos.Pos.from : "";
if (station[0].Station_JP == nextPos) {
if(d.lastStation != "当駅止") return true;
} else if (station[0].Station_JP == PrePos) {
return false;
}
const date = dayjs();
let [h, m] = d.time.split(":");
let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay)
? 0
: currentTrain.filter((t) => t.num == d.train)[0].delay;
const db = date.hour(parseInt(h)).minute(parseInt(m) + parseInt(delay));
return !date.isAfter(db);
} }
const date = dayjs();
let [h,m] = d.time.split(":");
let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay)
? 0
: currentTrain.filter((t) => t.num == d.train)[0].delay;
const db = date.hour(parseInt(h)).minute(parseInt(m) + parseInt(delay));
return !(date.isAfter(db));
}; };
const [areaString, setAreaString] = useState(""); const [areaString, setAreaString] = useState("");