diff --git a/App.js b/App.js index 76d74dd..09ab333 100644 --- a/App.js +++ b/App.js @@ -80,30 +80,6 @@ export function AppContainer() { }); }, []); - const { setCurrentTrain, setCurrentTrainLoading } = useCurrentTrain(); - - const getCurrentTrain = () => - fetch( - "https://script.google.com/macros/s/AKfycby9Y2-Bm75J_WkbZimi7iS8v5r9wMa9wtzpdwES9sOGF4i6HIYEJOM60W6gM1gXzt1o/exec", - HeaderConfig - ) - .then((response) => response.json()) - .then((d) => - d.map((x) => ({ num: x.TrainNum, delay: x.delay, Pos: x.Pos })) - ) - .then((d) => { - setCurrentTrain(d); - setCurrentTrainLoading("success"); - }) - .catch(() => { - console.log("えらー"); - setCurrentTrainLoading("error"); - }); - - useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 - - useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得 - const { areaInfo, setAreaInfo } = useAreaInfo(); const getAreaData = () => fetch( @@ -128,7 +104,7 @@ export function AppContainer() { tabBarIcon: initIcon("barchart", "AntDesign"), }} > - {(props) => } + {(props) => } - {(props) => } + {(props) => } a.num == trainNum) - ), }, navigate, originalStationList, diff --git a/MenuPage.js b/MenuPage.js index 804f385..a7b01f0 100644 --- a/MenuPage.js +++ b/MenuPage.js @@ -12,10 +12,12 @@ import { useFavoriteStation } from "./stateBox/useFavoriteStation"; import { optionData } from "./lib/stackOption.js"; import CurrentTrainListView from "./components/CurrentTrainListView.js"; import AllTrainDiagramView from "./components/AllTrainDiagramView.js"; +import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; const Stack = createStackNavigator(); -export function MenuPage({ navigation, getCurrentTrain }) { +export function MenuPage({ navigation }) { const { favoriteStation, setFavoriteStation } = useFavoriteStation(); + const { getCurrentTrain } = useCurrentTrain(); useEffect(() => { const unsubscribe = navigation.addListener("tabPress", (e) => { AS.getItem("favoriteStation") diff --git a/Top.js b/Top.js index 9120dc8..b320f59 100644 --- a/Top.js +++ b/Top.js @@ -12,10 +12,12 @@ import TrainMenu from "./components/trainMenu.js"; import FavoriteList from "./components/FavoriteList.js"; import { useFavoriteStation } from "./stateBox/useFavoriteStation"; import { optionData } from "./lib/stackOption.js"; +import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; const Stack = createStackNavigator(); -export const Top = ({ navigation, getCurrentTrain }) => { +export const Top = ({ navigation }) => { const webview = useRef(); const { favoriteStation, setFavoriteStation } = useFavoriteStation(); + const { getCurrentTrain } = useCurrentTrain(); //地図用 const [mapsStationData, setMapsStationData] = useState(undefined); diff --git a/components/ActionSheetComponents/EachTrainInfo.js b/components/ActionSheetComponents/EachTrainInfo.js index ecaa412..8c906e8 100644 --- a/components/ActionSheetComponents/EachTrainInfo.js +++ b/components/ActionSheetComponents/EachTrainInfo.js @@ -24,6 +24,8 @@ import { widthPercentageToDP, } from "react-native-responsive-screen"; import lineColorList from "../../assets/originData/lineColorList"; +import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; +import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData"; export const EachTrainInfo = (props) => { if (!props.payload) return <>; @@ -40,6 +42,18 @@ export const EachTrainInfo = (props) => { const [trainPositionSwitch, setTrainPositionSwitch] = useState("false"); + const { currentTrain } = useCurrentTrain(); + + const [currentTrainData, setCurrentTrainData] = useState([]); + + useEffect(() => { + setCurrentTrainData( + checkDuplicateTrainData( + currentTrain.filter((d) => d.num == data.trainNum) + ) + ); + }, [currentTrain]); + useEffect(() => { //列車現在地アイコン表示スイッチ AS.getItem("trainPositionSwitch") @@ -65,17 +79,17 @@ export const EachTrainInfo = (props) => { return Station.map((d) => d.StationNumber)[0]; }; useEffect(() => { - //data.trainData.Pos = "鴨川~端岡"; //test - if (!data.trainData?.Pos) return; - if (data.trainData?.Pos.match("~")) { - const pos = data.trainData?.Pos.replace("(下り)", "") + //currentTrainData.Pos = "鴨川~端岡"; //test + if (!currentTrainData?.Pos) return; + if (currentTrainData?.Pos.match("~")) { + const pos = currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~"); setCurrentPosition([getStationData(pos[0]), getStationData(pos[1])]); } else { - setCurrentPosition([getStationData(data.trainData?.Pos)]); + setCurrentPosition([getStationData(currentTrainData?.Pos)]); } - }, [data.trainData]); + }, [currentTrainData]); const stationList = originalStationList && @@ -339,7 +353,7 @@ export const EachTrainInfo = (props) => { 現在地 {currentPosition.toString()} - {data.trainData?.Pos && data.trainData?.Pos.match("~") ? ( + {currentTrainData?.Pos && currentTrainData?.Pos.match("~") ? ( <> { }} > { - data.trainData?.Pos.replace("(下り)", "") + currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~")[0] } @@ -365,7 +379,7 @@ export const EachTrainInfo = (props) => { }} > { - data.trainData?.Pos.replace("(下り)", "") + currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~")[1] } @@ -379,7 +393,7 @@ export const EachTrainInfo = (props) => { textAlign: "right", }} > - {data.trainData?.Pos} + {currentTrainData?.Pos} )} @@ -394,7 +408,7 @@ export const EachTrainInfo = (props) => { }} > - {isNaN(data.trainData?.delay) ? "状態" : "遅延時分"} + {isNaN(currentTrainData?.delay) ? "状態" : "遅延時分"} { textAlign: "right", }} > - {data.trainData?.delay} - {isNaN(data.trainData?.delay) ? "" : "分"} + {currentTrainData?.delay} + {isNaN(currentTrainData?.delay) ? "" : "分"} { textAlign: "right", }} > - {data.trainData?.num} + {currentTrainData?.num} @@ -546,8 +560,8 @@ export const EachTrainInfo = (props) => { 停車駅 - {!isNaN(data.trainData?.delay) && - data.trainData?.delay != 0 && ( + {!isNaN(currentTrainData?.delay) && + currentTrainData?.delay != 0 && ( { { if (time) { date.setHours(time.split(":")[0], time.split(":")[1]); } - if (!isNaN(data.trainData?.delay)) { - date.setMinutes(date.getMinutes() + data.trainData?.delay); + if (!isNaN(currentTrainData?.delay)) { + date.setMinutes(date.getMinutes() + currentTrainData?.delay); } const timeString = date.toTimeString().split(" ")[0].split(":"); return ( @@ -685,8 +699,8 @@ export const EachTrainInfo = (props) => { 🚊 ) : null} - {!isNaN(data.trainData?.delay) && - data.trainData?.delay != 0 && ( + {!isNaN(currentTrainData?.delay) && + currentTrainData?.delay != 0 && ( { a.num == d) - ), }, navigate, originalStationList, diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js index 33f078c..db4faf9 100644 --- a/components/発車時刻表/LED_vidion.js +++ b/components/発車時刻表/LED_vidion.js @@ -321,9 +321,6 @@ const EachData = ({ limited: `${getTrainType(train.type).data}:${ train.trainName }${TrainNumber}`, - trainData: checkDuplicateTrainData( - currentTrain.filter((a) => a.num == d.train) - ), }, navigate, originalStationList, diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js index 241822e..944b37c 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.js @@ -1,9 +1,13 @@ -import React, { createContext, useContext, useState } from "react"; +import React, { createContext, useContext, useState, useEffect } from "react"; +import { HeaderConfig } from "../lib/HeaderConfig"; + +import useInterval from "../lib/useInterval"; const initialState = { currentTrain: [], setCurrentTrain: () => {}, currentTrainLoading: "loading", setCurrentTrainLoading: () => {}, + getCurrentTrain: () => {}, }; const CurrentTrainContext = createContext(initialState); @@ -15,7 +19,27 @@ export const useCurrentTrain = () => { export const CurrentTrainProvider = ({ children }) => { const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 } const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading + const getCurrentTrain = () => + fetch( + "https://script.google.com/macros/s/AKfycby9Y2-Bm75J_WkbZimi7iS8v5r9wMa9wtzpdwES9sOGF4i6HIYEJOM60W6gM1gXzt1o/exec", + HeaderConfig + ) + .then((response) => response.json()) + .then((d) => + d.map((x) => ({ num: x.TrainNum, delay: x.delay, Pos: x.Pos })) + ) + .then((d) => { + setCurrentTrain(d); + setCurrentTrainLoading("success"); + }) + .catch(() => { + console.log("えらー"); + setCurrentTrainLoading("error"); + }); + useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 + + useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得 return ( { setCurrentTrain, currentTrainLoading, setCurrentTrainLoading, + getCurrentTrain, }} > {children}