現在地表示をリアルタイム更新するように変更
This commit is contained in:
parent
a4e85ff2e6
commit
3ca91f402e
28
App.js
28
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 { areaInfo, setAreaInfo } = useAreaInfo();
|
||||||
const getAreaData = () =>
|
const getAreaData = () =>
|
||||||
fetch(
|
fetch(
|
||||||
@ -128,7 +104,7 @@ export function AppContainer() {
|
|||||||
tabBarIcon: initIcon("barchart", "AntDesign"),
|
tabBarIcon: initIcon("barchart", "AntDesign"),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{(props) => <Top {...props} getCurrentTrain={getCurrentTrain} />}
|
{(props) => <Top {...props} />}
|
||||||
</Tab.Screen>
|
</Tab.Screen>
|
||||||
<Tab.Screen
|
<Tab.Screen
|
||||||
name="menuPage"
|
name="menuPage"
|
||||||
@ -139,7 +115,7 @@ export function AppContainer() {
|
|||||||
tabBarIcon: initIcon("ios-radio", "Ionicons"),
|
tabBarIcon: initIcon("ios-radio", "Ionicons"),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{(props) => <MenuPage {...props} getCurrentTrain={getCurrentTrain} />}
|
{(props) => <MenuPage {...props} />}
|
||||||
</Tab.Screen>
|
</Tab.Screen>
|
||||||
<Tab.Screen
|
<Tab.Screen
|
||||||
name="home"
|
name="home"
|
||||||
|
3
Apps.js
3
Apps.js
@ -180,9 +180,6 @@ export default function Apps({ navigation, webview, stationData }) {
|
|||||||
data: {
|
data: {
|
||||||
trainNum,
|
trainNum,
|
||||||
limited,
|
limited,
|
||||||
trainData: checkDuplicateTrainData(
|
|
||||||
currentTrain.filter((a) => a.num == trainNum)
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
navigate,
|
navigate,
|
||||||
originalStationList,
|
originalStationList,
|
||||||
|
@ -12,10 +12,12 @@ import { useFavoriteStation } from "./stateBox/useFavoriteStation";
|
|||||||
import { optionData } from "./lib/stackOption.js";
|
import { optionData } from "./lib/stackOption.js";
|
||||||
import CurrentTrainListView from "./components/CurrentTrainListView.js";
|
import CurrentTrainListView from "./components/CurrentTrainListView.js";
|
||||||
import AllTrainDiagramView from "./components/AllTrainDiagramView.js";
|
import AllTrainDiagramView from "./components/AllTrainDiagramView.js";
|
||||||
|
import { useCurrentTrain } from "./stateBox/useCurrentTrain.js";
|
||||||
const Stack = createStackNavigator();
|
const Stack = createStackNavigator();
|
||||||
|
|
||||||
export function MenuPage({ navigation, getCurrentTrain }) {
|
export function MenuPage({ navigation }) {
|
||||||
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
|
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
|
||||||
|
const { getCurrentTrain } = useCurrentTrain();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const unsubscribe = navigation.addListener("tabPress", (e) => {
|
const unsubscribe = navigation.addListener("tabPress", (e) => {
|
||||||
AS.getItem("favoriteStation")
|
AS.getItem("favoriteStation")
|
||||||
|
4
Top.js
4
Top.js
@ -12,10 +12,12 @@ import TrainMenu from "./components/trainMenu.js";
|
|||||||
import FavoriteList from "./components/FavoriteList.js";
|
import FavoriteList from "./components/FavoriteList.js";
|
||||||
import { useFavoriteStation } from "./stateBox/useFavoriteStation";
|
import { useFavoriteStation } from "./stateBox/useFavoriteStation";
|
||||||
import { optionData } from "./lib/stackOption.js";
|
import { optionData } from "./lib/stackOption.js";
|
||||||
|
import { useCurrentTrain } from "./stateBox/useCurrentTrain.js";
|
||||||
const Stack = createStackNavigator();
|
const Stack = createStackNavigator();
|
||||||
export const Top = ({ navigation, getCurrentTrain }) => {
|
export const Top = ({ navigation }) => {
|
||||||
const webview = useRef();
|
const webview = useRef();
|
||||||
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
|
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
|
||||||
|
const { getCurrentTrain } = useCurrentTrain();
|
||||||
|
|
||||||
//地図用
|
//地図用
|
||||||
const [mapsStationData, setMapsStationData] = useState(undefined);
|
const [mapsStationData, setMapsStationData] = useState(undefined);
|
||||||
|
@ -24,6 +24,8 @@ import {
|
|||||||
widthPercentageToDP,
|
widthPercentageToDP,
|
||||||
} from "react-native-responsive-screen";
|
} from "react-native-responsive-screen";
|
||||||
import lineColorList from "../../assets/originData/lineColorList";
|
import lineColorList from "../../assets/originData/lineColorList";
|
||||||
|
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
||||||
|
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
|
||||||
|
|
||||||
export const EachTrainInfo = (props) => {
|
export const EachTrainInfo = (props) => {
|
||||||
if (!props.payload) return <></>;
|
if (!props.payload) return <></>;
|
||||||
@ -40,6 +42,18 @@ export const EachTrainInfo = (props) => {
|
|||||||
|
|
||||||
const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
|
const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
|
||||||
|
|
||||||
|
const { currentTrain } = useCurrentTrain();
|
||||||
|
|
||||||
|
const [currentTrainData, setCurrentTrainData] = useState([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setCurrentTrainData(
|
||||||
|
checkDuplicateTrainData(
|
||||||
|
currentTrain.filter((d) => d.num == data.trainNum)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}, [currentTrain]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
//列車現在地アイコン表示スイッチ
|
//列車現在地アイコン表示スイッチ
|
||||||
AS.getItem("trainPositionSwitch")
|
AS.getItem("trainPositionSwitch")
|
||||||
@ -65,17 +79,17 @@ export const EachTrainInfo = (props) => {
|
|||||||
return Station.map((d) => d.StationNumber)[0];
|
return Station.map((d) => d.StationNumber)[0];
|
||||||
};
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
//data.trainData.Pos = "鴨川~端岡"; //test
|
//currentTrainData.Pos = "鴨川~端岡"; //test
|
||||||
if (!data.trainData?.Pos) return;
|
if (!currentTrainData?.Pos) return;
|
||||||
if (data.trainData?.Pos.match("~")) {
|
if (currentTrainData?.Pos.match("~")) {
|
||||||
const pos = data.trainData?.Pos.replace("(下り)", "")
|
const pos = currentTrainData?.Pos.replace("(下り)", "")
|
||||||
.replace("(上り)", "")
|
.replace("(上り)", "")
|
||||||
.split("~");
|
.split("~");
|
||||||
setCurrentPosition([getStationData(pos[0]), getStationData(pos[1])]);
|
setCurrentPosition([getStationData(pos[0]), getStationData(pos[1])]);
|
||||||
} else {
|
} else {
|
||||||
setCurrentPosition([getStationData(data.trainData?.Pos)]);
|
setCurrentPosition([getStationData(currentTrainData?.Pos)]);
|
||||||
}
|
}
|
||||||
}, [data.trainData]);
|
}, [currentTrainData]);
|
||||||
|
|
||||||
const stationList =
|
const stationList =
|
||||||
originalStationList &&
|
originalStationList &&
|
||||||
@ -339,7 +353,7 @@ export const EachTrainInfo = (props) => {
|
|||||||
現在地 {currentPosition.toString()}
|
現在地 {currentPosition.toString()}
|
||||||
</Text>
|
</Text>
|
||||||
<View style={{ flex: 1 }} />
|
<View style={{ flex: 1 }} />
|
||||||
{data.trainData?.Pos && data.trainData?.Pos.match("~") ? (
|
{currentTrainData?.Pos && currentTrainData?.Pos.match("~") ? (
|
||||||
<>
|
<>
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
@ -349,7 +363,7 @@ export const EachTrainInfo = (props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
data.trainData?.Pos.replace("(下り)", "")
|
currentTrainData?.Pos.replace("(下り)", "")
|
||||||
.replace("(上り)", "")
|
.replace("(上り)", "")
|
||||||
.split("~")[0]
|
.split("~")[0]
|
||||||
}
|
}
|
||||||
@ -365,7 +379,7 @@ export const EachTrainInfo = (props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
data.trainData?.Pos.replace("(下り)", "")
|
currentTrainData?.Pos.replace("(下り)", "")
|
||||||
.replace("(上り)", "")
|
.replace("(上り)", "")
|
||||||
.split("~")[1]
|
.split("~")[1]
|
||||||
}
|
}
|
||||||
@ -379,7 +393,7 @@ export const EachTrainInfo = (props) => {
|
|||||||
textAlign: "right",
|
textAlign: "right",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{data.trainData?.Pos}
|
{currentTrainData?.Pos}
|
||||||
</Text>
|
</Text>
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
@ -394,7 +408,7 @@ export const EachTrainInfo = (props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Text style={{ fontSize: 15, color: "#0099CC" }}>
|
<Text style={{ fontSize: 15, color: "#0099CC" }}>
|
||||||
{isNaN(data.trainData?.delay) ? "状態" : "遅延時分"}
|
{isNaN(currentTrainData?.delay) ? "状態" : "遅延時分"}
|
||||||
</Text>
|
</Text>
|
||||||
<View style={{ flex: 1 }} />
|
<View style={{ flex: 1 }} />
|
||||||
<Text
|
<Text
|
||||||
@ -404,8 +418,8 @@ export const EachTrainInfo = (props) => {
|
|||||||
textAlign: "right",
|
textAlign: "right",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{data.trainData?.delay}
|
{currentTrainData?.delay}
|
||||||
{isNaN(data.trainData?.delay) ? "" : "分"}
|
{isNaN(currentTrainData?.delay) ? "" : "分"}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
<View
|
<View
|
||||||
@ -425,7 +439,7 @@ export const EachTrainInfo = (props) => {
|
|||||||
textAlign: "right",
|
textAlign: "right",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{data.trainData?.num}
|
{currentTrainData?.num}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
@ -546,8 +560,8 @@ export const EachTrainInfo = (props) => {
|
|||||||
<Text style={{ fontSize: 20 }}>停車駅</Text>
|
<Text style={{ fontSize: 20 }}>停車駅</Text>
|
||||||
<View style={{ flex: 1 }} />
|
<View style={{ flex: 1 }} />
|
||||||
<View style={{ flexDirection: "row" }}>
|
<View style={{ flexDirection: "row" }}>
|
||||||
{!isNaN(data.trainData?.delay) &&
|
{!isNaN(currentTrainData?.delay) &&
|
||||||
data.trainData?.delay != 0 && (
|
currentTrainData?.delay != 0 && (
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
@ -564,9 +578,9 @@ export const EachTrainInfo = (props) => {
|
|||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
color: isNaN(data.trainData?.delay)
|
color: isNaN(currentTrainData?.delay)
|
||||||
? "black"
|
? "black"
|
||||||
: data.trainData?.delay == 0
|
: currentTrainData?.delay == 0
|
||||||
? "black"
|
? "black"
|
||||||
: "red",
|
: "red",
|
||||||
width: 60,
|
width: 60,
|
||||||
@ -612,8 +626,8 @@ export const EachTrainInfo = (props) => {
|
|||||||
if (time) {
|
if (time) {
|
||||||
date.setHours(time.split(":")[0], time.split(":")[1]);
|
date.setHours(time.split(":")[0], time.split(":")[1]);
|
||||||
}
|
}
|
||||||
if (!isNaN(data.trainData?.delay)) {
|
if (!isNaN(currentTrainData?.delay)) {
|
||||||
date.setMinutes(date.getMinutes() + data.trainData?.delay);
|
date.setMinutes(date.getMinutes() + currentTrainData?.delay);
|
||||||
}
|
}
|
||||||
const timeString = date.toTimeString().split(" ")[0].split(":");
|
const timeString = date.toTimeString().split(" ")[0].split(":");
|
||||||
return (
|
return (
|
||||||
@ -685,8 +699,8 @@ export const EachTrainInfo = (props) => {
|
|||||||
🚊
|
🚊
|
||||||
</Text>
|
</Text>
|
||||||
) : null}
|
) : null}
|
||||||
{!isNaN(data.trainData?.delay) &&
|
{!isNaN(currentTrainData?.delay) &&
|
||||||
data.trainData?.delay != 0 && (
|
currentTrainData?.delay != 0 && (
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
@ -704,9 +718,9 @@ export const EachTrainInfo = (props) => {
|
|||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
color: isNaN(data.trainData?.delay)
|
color: isNaN(currentTrainData?.delay)
|
||||||
? "black"
|
? "black"
|
||||||
: data.trainData?.delay == 0
|
: currentTrainData?.delay == 0
|
||||||
? "black"
|
? "black"
|
||||||
: "red",
|
: "red",
|
||||||
width: 60,
|
width: 60,
|
||||||
|
@ -16,7 +16,6 @@ import { MaterialCommunityIcons } from "@expo/vector-icons";
|
|||||||
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
|
||||||
import { useAreaInfo } from "../stateBox/useAreaInfo";
|
import { useAreaInfo } from "../stateBox/useAreaInfo";
|
||||||
import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram";
|
import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram";
|
||||||
import { EachTrainInfo } from "./ActionSheetComponents/EachTrainInfo";
|
|
||||||
|
|
||||||
import { customTrainDataDetector } from "./custom-train-data";
|
import { customTrainDataDetector } from "./custom-train-data";
|
||||||
import { getStationList, lineList } from "../lib/getStationList";
|
import { getStationList, lineList } from "../lib/getStationList";
|
||||||
@ -65,9 +64,6 @@ export default function AllTrainDiagramView({ navigation: { navigate } }) {
|
|||||||
limited: `${getTrainType(train.type).data}:${
|
limited: `${getTrainType(train.type).data}:${
|
||||||
train.trainName
|
train.trainName
|
||||||
}${TrainNumber}`,
|
}${TrainNumber}`,
|
||||||
trainData: checkDuplicateTrainData(
|
|
||||||
currentTrain.filter((a) => a.num == d)
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
navigate,
|
navigate,
|
||||||
originalStationList,
|
originalStationList,
|
||||||
|
@ -321,9 +321,6 @@ const EachData = ({
|
|||||||
limited: `${getTrainType(train.type).data}:${
|
limited: `${getTrainType(train.type).data}:${
|
||||||
train.trainName
|
train.trainName
|
||||||
}${TrainNumber}`,
|
}${TrainNumber}`,
|
||||||
trainData: checkDuplicateTrainData(
|
|
||||||
currentTrain.filter((a) => a.num == d.train)
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
navigate,
|
navigate,
|
||||||
originalStationList,
|
originalStationList,
|
||||||
|
@ -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 = {
|
const initialState = {
|
||||||
currentTrain: [],
|
currentTrain: [],
|
||||||
setCurrentTrain: () => {},
|
setCurrentTrain: () => {},
|
||||||
currentTrainLoading: "loading",
|
currentTrainLoading: "loading",
|
||||||
setCurrentTrainLoading: () => {},
|
setCurrentTrainLoading: () => {},
|
||||||
|
getCurrentTrain: () => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
const CurrentTrainContext = createContext(initialState);
|
const CurrentTrainContext = createContext(initialState);
|
||||||
@ -15,7 +19,27 @@ export const useCurrentTrain = () => {
|
|||||||
export const CurrentTrainProvider = ({ children }) => {
|
export const CurrentTrainProvider = ({ children }) => {
|
||||||
const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
|
const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
|
||||||
const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading
|
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 (
|
return (
|
||||||
<CurrentTrainContext.Provider
|
<CurrentTrainContext.Provider
|
||||||
value={{
|
value={{
|
||||||
@ -23,6 +47,7 @@ export const CurrentTrainProvider = ({ children }) => {
|
|||||||
setCurrentTrain,
|
setCurrentTrain,
|
||||||
currentTrainLoading,
|
currentTrainLoading,
|
||||||
setCurrentTrainLoading,
|
setCurrentTrainLoading,
|
||||||
|
getCurrentTrain,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
Loading…
Reference in New Issue
Block a user