From 8c17a5b3daa104b9b8f066454437dcfcede86709 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 20 Apr 2025 05:31:30 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=97=E8=BB=8A=E3=81=AE=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E3=81=AE=E5=8E=B3=E5=AF=86=E5=8C=96=E3=80=81?= =?UTF-8?q?=E3=81=8A=E3=82=88=E3=81=B3=E5=87=BA=E7=99=BA=E4=BF=83=E9=80=B2?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/発車時刻表/EachData.tsx | 22 +++++++++++ components/発車時刻表/LED_vidion.js | 50 ++++++++++++++++-------- 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/components/発車時刻表/EachData.tsx b/components/発車時刻表/EachData.tsx index c3dce10..f636d48 100644 --- a/components/発車時刻表/EachData.tsx +++ b/components/発車時刻表/EachData.tsx @@ -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) => { 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 ( <> = (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) => { + {!!isDepartureNow && ( + + )} {trainDescriptionSwitch && ( {}; 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("");