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

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 { TrainPositionDataDelete } from "./LED_inside_Component/TrainPositionDataDelete";
import { useStationList } from "../../stateBox/useStationList";
import useInterval from "@/lib/useInterval";
import dayjs from "dayjs";
type Props = {
d: {
@ -117,6 +119,22 @@ export const EachData: FC<Props> = (props) => {
const [descInput, setDescInput] = useState("");
const [stationInput, setStationInput] = 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 (
<>
<TrainPositionDataDelete
@ -147,6 +165,7 @@ export const EachData: FC<Props> = (props) => {
marginHorizontal: "3%",
backgroundColor: "#000",
flexDirection: "row",
opacity: isShow ? 1 : 0.5,
}}
onPress={() => openTrainInfo(d)}
key={ d.train + "-eachData" }
@ -162,6 +181,9 @@ export const EachData: FC<Props> = (props) => {
<DependTime time={d.time} />
<StatusAndDelay trainDelayStatus={trainDelayStatus} />
</TouchableOpacity>
{!!isDepartureNow && (
<Description info={d.lastStation == "当駅止" ? "この列車は当駅止です。間もなく到着します。":"この列車は間もなく発車します。"} key={d.train + "-description"} />
)}
{trainDescriptionSwitch && (
<TrainPosition
trainIDSwitch={trainIDSwitch}

View File

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
import { View,useWindowDimensions } from "react-native";
import { View, useWindowDimensions } from "react-native";
import dayjs from "dayjs";
import { useInterval } from "../../lib/useInterval";
import { objectIsEmpty } from "../../lib/objectIsEmpty";
@ -98,7 +98,7 @@ export default function LED_vision(props) {
if (!trainTimeAndNumber) return () => {};
if (!currentTrain) return () => {};
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((d) => !!finalSwitch || d.lastStation != "当駅止");
setSelectedTrain(data);
@ -145,22 +145,40 @@ export default function LED_vision(props) {
};
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 PrePos = Pos.isBetween ? Pos.Pos.from : "";
if(station[0].Station_JP == nextPos){
return true;
}
else if(station[0].Station_JP == PrePos){
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 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("");