import lineColorList from "@/assets/originData/lineColorList"; import { StationNumberMaker } from "@/components/駅名表/StationNumberMaker"; import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData"; import { CustomTrainData, eachTrainDiagramType, StationProps, } from "@/lib/CommonTypes"; import { getCurrentTrainData } from "@/lib/getCurrentTrainData"; import { getTrainDelayStatus } from "@/lib/getTrainDelayStatus"; import { getTrainType } from "@/lib/getTrainType"; import { objectIsEmpty } from "@/lib/objectIsEmpty"; import { getTime, trainTimeFiltering } from "@/lib/trainTimeFiltering"; import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram"; import { useAreaInfo } from "@/stateBox/useAreaInfo"; import { useCurrentTrain } from "@/stateBox/useCurrentTrain"; import { useStationList } from "@/stateBox/useStationList"; import dayjs from "dayjs"; import { useEffect, useState } from "react"; import { Text, TouchableOpacity, View } from "react-native"; export const FixedStation = ({ stationID }) => { const { fixedPosition, setFixedPosition } = useCurrentTrain(); const { getStationDataFromId } = useStationList(); const [station, setStation] = useState([]); useEffect(() => { const data = getStationDataFromId(stationID); setStation(data); }, [stationID]); const lineColor = station.length > 0 ? lineColorList[station[0]?.StationNumber.slice(0, 1)] : "white"; //// const { allTrainDiagram } = useAllTrainDiagram(); const { areaInfo, areaStationID } = useAreaInfo(); const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表 const [isInfoArea, setIsInfoArea] = useState(false); const { currentTrain } = useCurrentTrain(); useEffect(() => { // 現在の駅に停車するダイヤを作成する副作用[列車ダイヤと現在駅情報] if (!allTrainDiagram) { setStationDiagram({}); return; } if (station.length == 0) { setStationDiagram({}); return; } let returnData = {}; Object.keys(allTrainDiagram).forEach((key) => { if (allTrainDiagram[key].match(station[0].Station_JP + ",")) { returnData[key] = allTrainDiagram[key]; } }); setStationDiagram(returnData); setIsInfoArea(station.some((s) => areaStationID.includes(s.StationNumber))); }, [allTrainDiagram, station]); const [trainTimeAndNumber, setTrainTimeAndNumber] = useState< eachTrainDiagramType[] >([]); useEffect(() => { //現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット if (objectIsEmpty(stationDiagram)) return () => {}; const getTimeData = getTime(stationDiagram, station[0]); setTrainTimeAndNumber(getTimeData); }, [stationDiagram]); const [selectedTrain, setSelectedTrain] = useState( [] ); useEffect(() => { if (!trainTimeAndNumber) return () => {}; if (!currentTrain) return () => {}; const data = trainTimeAndNumber .filter((d) => currentTrain.map((m) => m.num).includes(d.train)) //現在の列車に絞る[ToDo] .filter((d) => trainTimeFiltering({ d, currentTrain, station })) //時間フィルター .filter((d) => !d.isThrough) .filter((d) => d.lastStation != station[0].Station_JP); //最終列車表示設定 setSelectedTrain(data); }, [trainTimeAndNumber, currentTrain /*finalSwitch*/]); return ( { setFixedPosition({ type: null, value: null }); }} > {station[0]?.Station_JP} 次の発車予定: {selectedTrain.length > 0 ? ( selectedTrain.map((d) => ( )) ) : ( 当駅を発着する走行中の列車はありません。 )} ); }; const FixedStationBoxEachTrain = ({ d, station }) => { const { currentTrain } = useCurrentTrain(); const { stationList } = useStationList(); const { allCustomTrainData } = useAllTrainDiagram(); const currentTrainData = checkDuplicateTrainData( currentTrain.filter((a) => a.num == d.train), stationList ); const trainDelayStatus = `${getTrainDelayStatus( currentTrainData, station.Station_JP )}`; const [train, setTrain] = useState( getCurrentTrainData(d.train, currentTrain, allCustomTrainData) ); useEffect(() => { setTrain(getCurrentTrainData(d.train, currentTrain, allCustomTrainData)); }, [currentTrain, d.train]); const { name, color } = getTrainType({ type: train.type, whiteMode: true }); return ( {d.time} {name} {d.lastStation}行 {trainDelayStatus} ); };