LEDにkeyを付与してデータの整理

This commit is contained in:
harukin-expo-dev-env 2025-04-13 19:16:58 +00:00
parent f26da93193
commit 427e06967c
3 changed files with 32 additions and 28 deletions

View File

@ -122,21 +122,21 @@ export const EachData: FC<Props> = (props) => {
<TrainPositionDataDelete <TrainPositionDataDelete
dialog={deleteDialog} dialog={deleteDialog}
setDialog={setDeleteDialog} setDialog={setDeleteDialog}
currentTrainData={currentTrainData} {...{ currentTrainData, stationInput, stationNumberInput }}
stationInput={stationInput}
stationNumberInput={stationNumberInput}
/> />
<TrainPositionDataPush <TrainPositionDataPush
dialog={dialog} dialog={dialog}
setDialog={setDialog} setDialog={setDialog}
currentTrainData={currentTrainData} {...{
stationInput={stationInput} currentTrainData,
stationNumberInput={stationNumberInput} stationInput,
posInput={posInput} stationNumberInput,
descInput={descInput} posInput,
setPosInput={setPosInput} descInput,
setDescInput={setDescInput} setPosInput,
station={station} setDescInput,
station,
}}
/> />
<TouchableOpacity <TouchableOpacity
style={{ style={{
@ -149,6 +149,7 @@ export const EachData: FC<Props> = (props) => {
flexDirection: "row", flexDirection: "row",
}} }}
onPress={() => openTrainInfo(d)} onPress={() => openTrainInfo(d)}
key={ d.train + "-eachData" }
> >
<TrainName <TrainName
trainName={train.trainName} trainName={train.trainName}
@ -179,7 +180,7 @@ export const EachData: FC<Props> = (props) => {
/> />
)} )}
{trainDescriptionSwitch && !!train.info && ( {trainDescriptionSwitch && !!train.info && (
<Description info={train.info} /> <Description info={train.info} key={d.train + "-description"} />
)} )}
</> </>
); );

View File

@ -3,8 +3,8 @@ import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
import LottieView from "lottie-react-native"; import LottieView from "lottie-react-native";
import { Ionicons } from "@expo/vector-icons"; import { Ionicons } from "@expo/vector-icons";
export const Header = ({ getCurrentTrain }) => { export const Header = () => {
const { currentTrainLoading, setCurrentTrainLoading } = useCurrentTrain(); const { currentTrainLoading, setCurrentTrainLoading,getCurrentTrain } = useCurrentTrain();
return ( return (
<View <View
style={{ style={{

View File

@ -1,6 +1,6 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { View } from "react-native"; import { View,useWindowDimensions } from "react-native";
import { widthPercentageToDP as wp } from "react-native-responsive-screen"; import dayjs from "dayjs";
import { useInterval } from "../../lib/useInterval"; import { useInterval } from "../../lib/useInterval";
import { objectIsEmpty } from "../../lib/objectIsEmpty"; import { objectIsEmpty } from "../../lib/objectIsEmpty";
import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
@ -43,7 +43,7 @@ import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
*/ */
export default function LED_vision(props) { export default function LED_vision(props) {
const { station, navigate, openStationACFromEachTrainInfo } = props; const { station, navigate, openStationACFromEachTrainInfo } = props;
const { getCurrentTrain, currentTrain } = useCurrentTrain(); const { currentTrain } = useCurrentTrain();
const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表 const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表
const [finalSwitch, setFinalSwitch] = useState(false); const [finalSwitch, setFinalSwitch] = useState(false);
const [trainIDSwitch, setTrainIDSwitch] = useState(false); const [trainIDSwitch, setTrainIDSwitch] = useState(false);
@ -80,7 +80,10 @@ export default function LED_vision(props) {
setIsInfoArea(station.some((s) => areaStationID.includes(s.StationNumber))); setIsInfoArea(station.some((s) => areaStationID.includes(s.StationNumber)));
}, [allTrainDiagram, station]); }, [allTrainDiagram, station]);
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState(null); /*
{lastStation: "当駅止", time: "12:34", train: "1234M"}
*/
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState([]);
useEffect(() => { useEffect(() => {
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット //現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
@ -141,16 +144,15 @@ export default function LED_vision(props) {
}; };
const timeFiltering = (d) => { const timeFiltering = (d) => {
const date = new Date(); const date = dayjs();
const newDate = new Date(); const newDate = dayjs();
let data = d.time.split(":"); let [h,m] = d.time.split(":");
let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay) let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay)
? 0 ? 0
: currentTrain.filter((t) => t.num == d.train)[0].delay; : currentTrain.filter((t) => t.num == d.train)[0].delay;
date.setHours(parseInt(data[0])); date.hour(parseInt(h)).minute(parseInt(m) + parseInt(delay));
date.setMinutes(parseInt(data[1]) + parseInt(delay)); return !(newDate.isAfter(date));
return !(newDate > date);
}; };
const [areaString, setAreaString] = useState(""); const [areaString, setAreaString] = useState("");
@ -182,18 +184,19 @@ export default function LED_vision(props) {
} }
setAreaStringLength(areaInfo.length); setAreaStringLength(areaInfo.length);
}, [areaInfo]); }, [areaInfo]);
const { width } = useWindowDimensions();
const adjustedWidth = width * 0.98;
return ( return (
<View <View
style={{ style={{
width: wp("98%"), width: adjustedWidth,
/* height: wp("98%")/10*9, */ backgroundColor: "#432", /* height: wp("98%")/10*9, */ backgroundColor: "#432",
borderWidth: 1, borderWidth: 1,
margin: 10, margin: 10,
marginHorizontal: wp("1%"), marginHorizontal: width * 0.01,
}} }}
> >
<Header getCurrentTrain={getCurrentTrain} /> <Header />
{selectedTrain.map((d) => ( {selectedTrain.map((d) => (
<EachData <EachData
{...{ {...{