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

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

@ -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,13 +145,30 @@ export default function LED_vision(props) {
}; };
const timeFiltering = (d) => { const timeFiltering = (d) => {
const Pos = trainPosition(currentTrain.filter((t) => t.num == d.train)[0])
const baseTime = 2;
if (currentTrain.filter((t) => t.num == d.train).length == 0) {
const date = dayjs();
const trainTime = date
.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;
} else {
const Pos = trainPosition(
currentTrain.filter((t) => t.num == d.train)[0]
);
const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos; const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos;
const PrePos = Pos.isBetween ? Pos.Pos.from : ""; const PrePos = Pos.isBetween ? Pos.Pos.from : "";
if (station[0].Station_JP == nextPos) { if (station[0].Station_JP == nextPos) {
return true; if(d.lastStation != "当駅止") return true;
} } else if (station[0].Station_JP == PrePos) {
else if(station[0].Station_JP == PrePos){
return false; return false;
} }
const date = dayjs(); const date = dayjs();
@ -160,7 +177,8 @@ export default function LED_vision(props) {
? 0 ? 0
: currentTrain.filter((t) => t.num == d.train)[0].delay; : currentTrain.filter((t) => t.num == d.train)[0].delay;
const db = date.hour(parseInt(h)).minute(parseInt(m) + parseInt(delay)); const db = date.hour(parseInt(h)).minute(parseInt(m) + parseInt(delay));
return !(date.isAfter(db)); return !date.isAfter(db);
}
}; };
const [areaString, setAreaString] = useState(""); const [areaString, setAreaString] = useState("");