diff --git a/App.js b/App.js
index fd534fb..07b587a 100644
--- a/App.js
+++ b/App.js
@@ -1,45 +1,58 @@
-import React, { useEffect, useRef, useState } from "react";
+import React, { useEffect } from "react";
import { NavigationContainer } from "@react-navigation/native";
-import {
- createStackNavigator,
- TransitionPresets,
-} from "@react-navigation/stack";
+import { createStackNavigator } from "@react-navigation/stack";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
-import { AntDesign, Ionicons } from "@expo/vector-icons";
-import { Platform, UIManager, Text } from "react-native";
+import { Platform, UIManager } from "react-native";
import { UpdateAsync } from "./UpdateAsync.js";
-import { getStationList2 } from "./lib/getStationList2";
import { AS } from "./storageControl";
-import Apps from "./Apps";
import TNDView from "./ndView";
-import TrainBase from "./trainbaseview";
-import HowTo from "./howto";
-import Menu from "./menu";
-import News from "./components/news.js";
-import Setting from "./components/settings.js";
-import TrainMenu from "./components/trainMenu.js";
-import FavoriteList from "./components/FavoriteList.js";
import { LogBox } from "react-native";
import useInterval from "./lib/useInterval";
import { HeaderConfig } from "./lib/HeaderConfig";
+import { initIcon } from "./lib/initIcon";
+import {
+ useFavoriteStation,
+ FavoriteStationProvider,
+} from "./stateBox/useFavoriteStation";
+import { Top } from "./Top.js";
+import { MenuPage } from "./MenuPage.js";
+import {
+ useCurrentTrain,
+ CurrentTrainProvider,
+} from "./stateBox/useCurrentTrain.js";
+import { useAreaInfo, AreaInfoProvider } from "./stateBox/useAreaInfo.js";
+import {
+ useBusAndTrainData,
+ BusAndTrainDataProvider,
+} from "./stateBox/useBusAndTrainData.js";
LogBox.ignoreLogs([
"ViewPropTypes will be removed",
"ColorPropType will be removed",
]);
-const Stack = createStackNavigator();
const Tab = createBottomTabNavigator();
if (Platform.OS === "android") {
if (UIManager.setLayoutAnimationEnabledExperimental) {
UIManager.setLayoutAnimationEnabledExperimental(true);
}
}
-export default function App() {
- useEffect(() => {
- UpdateAsync();
- }, []);
- const [favoriteStation, setFavoriteStation] = useState([]);
+export default function App() {
+ useEffect(() => UpdateAsync(), []);
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+export function AppContainer() {
+ const { setFavoriteStation } = useFavoriteStation();
useEffect(() => {
AS.getItem("favoriteStation")
.then((d) => {
@@ -48,14 +61,14 @@ export default function App() {
})
.catch((d) => console.log(d));
}, []);
- const [busAndTrainData, setBusAndTrainData] = useState([]);
+ const { setBusAndTrainData } = useBusAndTrainData();
useEffect(() => {
AS.getItem("busAndTrain")
.then((d) => {
const returnData = JSON.parse(d);
setBusAndTrainData(returnData);
})
- .catch((d) => {
+ .catch(() => {
fetch(
"https://script.google.com/macros/s/AKfycbw0UW6ZeCDgUYFRP0zxpc_Oqfy-91dBdbWv-cM8n3narKp14IyCd2wy5HW7taXcW7E/exec"
)
@@ -67,8 +80,7 @@ export default function App() {
});
}, []);
- const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
- const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading
+ const { setCurrentTrain, setCurrentTrainLoading } = useCurrentTrain();
const getCurrentTrain = () =>
fetch(
@@ -83,7 +95,7 @@ export default function App() {
setCurrentTrain(d);
setCurrentTrainLoading("success");
})
- .catch((e) => {
+ .catch(() => {
console.log("えらー");
setCurrentTrainLoading("error");
});
@@ -92,7 +104,7 @@ export default function App() {
useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得
- const [areaInfo, setAreaInfo] = useState("");
+ const { areaInfo, setAreaInfo } = useAreaInfo();
const getAreaInfo = () => {
fetch(
"https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec"
@@ -114,20 +126,7 @@ export default function App() {
tabBarIcon: initIcon("barchart", "AntDesign"),
}}
>
- {(props) => (
-
- )}
+ {(props) => }
- {(props) => (
-
- )}
+ {(props) => }
);
}
-
-const initIcon = (name, type) => {
- switch (type) {
- case "Ionicons":
- return ({ focused, color, size }) => (
-
- );
- case "AntDesign":
- return ({ focused, color, size }) => (
-
- );
- }
-};
-
-const Top = ({
- navigation,
- favoriteStation,
- setFavoriteStation,
- busAndTrainData,
- currentTrainState,
- currentTrainLoadingState,
- getCurrentTrain,
-}) => {
- const webview = useRef();
-
- //地図用
- const [mapsStationData, setMapsStationData] = useState(undefined);
-
- useEffect(() => {
- getStationList2().then(setMapsStationData);
- }, []);
-
- useEffect(() => {
- const unsubscribe = navigation.addListener("tabLongPress", (e) => {
- navigation.navigate("favoriteList");
- });
-
- return unsubscribe;
- }, [navigation]);
-
- return (
-
-
- {(props) => (
-
- )}
-
-
- {(props) => }
-
-
- {(props) => }
-
-
- {(props) => }
-
-
- {(props) => (
-
- )}
-
-
- {(props) => (
-
- )}
-
-
- );
-};
-function MenuPage({
- navigation,
- favoriteStation,
- setFavoriteStation,
- busAndTrainData,
- currentTrainState,
- currentTrainLoadingState,
- getCurrentTrain,
- areaInfo,
-}) {
- useEffect(() => {
- const unsubscribe = navigation.addListener("tabPress", (e) => {
- AS.getItem("favoriteStation")
- .then((d) => {
- const returnData = JSON.parse(d);
- if (favoriteStation.toString() != d) {
- setFavoriteStation(returnData);
- }
- })
- .catch((d) => console.log(d));
- });
-
- return unsubscribe;
- }, [navigation]);
- return (
-
-
- {(props) => (
-
- )}
-
-
- {(props) => }
-
-
- {(props) => }
-
-
- {(props) => }
-
-
- );
-}
-const optionData = {
- gestureEnabled: true,
- ...TransitionPresets.ModalPresentationIOS,
- cardOverlayEnabled: true,
- headerTransparent: true,
- headerShown: false,
-};
diff --git a/Apps.js b/Apps.js
index 031d11c..30c72e7 100644
--- a/Apps.js
+++ b/Apps.js
@@ -1,42 +1,26 @@
import React, { useEffect, useRef, useState } from "react";
-import {
- View,
- Platform,
- ToastAndroid,
- Text,
- TouchableOpacity,
-} from "react-native";
+import { View, Platform, Text, TouchableOpacity } from "react-native";
import { WebView } from "react-native-webview";
import Constants from "expo-constants";
-import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
+import { Ionicons } from "@expo/vector-icons";
import { AS } from "./storageControl";
import { news } from "./config/newsUpdate";
import { getStationList, lineList } from "./lib/getStationList";
import { StationDeteilView } from "./components/ActionSheetComponents/StationDeteilView";
import { injectJavascriptData } from "./lib/webViewInjectjavascript";
-import { getStationList2 } from "./lib/getStationList2";
import { EachTrainInfo } from "./components/ActionSheetComponents/EachTrainInfo";
import { checkDuplicateTrainData } from "./lib/checkDuplicateTrainData";
+import { useFavoriteStation } from "./stateBox/useFavoriteStation";
+import { useCurrentTrain } from "./stateBox/useCurrentTrain";
/*
import StatusbarDetect from './StatusbarDetect';
var Status = StatusbarDetect(); */
-export default function Apps({
- navigation,
- webview,
- favoriteStation,
- setFavoriteStation,
- busAndTrainData,
- stationData,
- currentTrainState,
- currentTrainLoadingState,
- getCurrentTrain,
-}) {
- const { currentTrain, setCurrentTrain } = currentTrainState;
- const { currentTrainLoading, setCurrentTrainLoading } =
- currentTrainLoadingState;
+export default function Apps({ navigation, webview, stationData }) {
+ const { currentTrain } = useCurrentTrain();
const { navigate } = navigation;
var urlcache = "";
+ const { favoriteStation } = useFavoriteStation();
//画面表示関連
const [iconSetting, setIconSetting] = useState(undefined);
@@ -62,7 +46,6 @@ export default function Apps({
getStationList().then(setOriginalStationList);
}, []);
- useEffect(() => {}, [stationData, favoriteStation]);
//地図表示テキスト
const injectJavascript = injectJavascriptData(
mapSwitch,
@@ -77,7 +60,7 @@ export default function Apps({
.then((d) => {
if (d != news) navigate("news");
})
- .catch((e) => navigate("news"));
+ .catch(() => navigate("news"));
}, []);
useEffect(() => {
@@ -90,7 +73,7 @@ export default function Apps({
AS.setItem("iconSwitch", "true").then(Updates.reloadAsync);
}
})
- .catch((d) => AS.setItem("iconSwitch", "true").then(Updates.reloadAsync));
+ .catch(() => AS.setItem("iconSwitch", "true").then(Updates.reloadAsync));
}, []);
useEffect(() => {
@@ -103,7 +86,7 @@ export default function Apps({
AS.setItem("mapSwitch", "false").then(Updates.reloadAsync);
}
})
- .catch((d) => AS.setItem("mapSwitch", "false").then(Updates.reloadAsync));
+ .catch(() => AS.setItem("mapSwitch", "false").then(Updates.reloadAsync));
}, []);
useEffect(() => {
@@ -116,7 +99,7 @@ export default function Apps({
AS.setItem("stationSwitch", "true").then(Updates.reloadAsync);
}
})
- .catch((d) =>
+ .catch(() =>
AS.setItem("stationSwitch", "true").then(Updates.reloadAsync)
);
}, []);
@@ -130,9 +113,7 @@ export default function Apps({
AS.setItem("trainSwitch", "true").then(Updates.reloadAsync);
}
})
- .catch((d) =>
- AS.setItem("trainSwitch", "true").then(Updates.reloadAsync)
- );
+ .catch(() => AS.setItem("trainSwitch", "true").then(Updates.reloadAsync));
}, []);
const onMessage = (event) => {
@@ -310,9 +291,6 @@ export default function Apps({
StationBoardAcSR={StationBoardAcSR}
currentStation={stationBoardData}
originalStationList={originalStationList}
- favoriteStation={favoriteStation}
- setFavoriteStation={setFavoriteStation}
- busAndTrainData={busAndTrainData}
navigate={navigate}
onExit={() => {
StationBoardAcSR.current?.setModalVisible();
diff --git a/MenuPage.js b/MenuPage.js
new file mode 100644
index 0000000..129be1f
--- /dev/null
+++ b/MenuPage.js
@@ -0,0 +1,69 @@
+import React, { useEffect } from "react";
+import {
+ createStackNavigator,
+ TransitionPresets,
+} from "@react-navigation/stack";
+import { AS } from "./storageControl";
+import TrainBase from "./trainbaseview";
+import HowTo from "./howto";
+import Menu from "./menu";
+import Setting from "./components/settings.js";
+import { useFavoriteStation } from "./stateBox/useFavoriteStation";
+import { optionData } from "./lib/stackOption.js";
+const Stack = createStackNavigator();
+
+export function MenuPage({ navigation, getCurrentTrain }) {
+ const { favoriteStation, setFavoriteStation } = useFavoriteStation();
+ useEffect(() => {
+ const unsubscribe = navigation.addListener("tabPress", (e) => {
+ AS.getItem("favoriteStation")
+ .then((d) => {
+ const returnData = JSON.parse(d);
+ if (favoriteStation.toString() != d) {
+ setFavoriteStation(returnData);
+ }
+ })
+ .catch((d) => console.log(d));
+ });
+
+ return unsubscribe;
+ }, [navigation]);
+ return (
+
+
+ {(props) => }
+
+
+ {(props) => }
+
+
+ {(props) => }
+
+
+ {(props) => }
+
+
+ );
+}
diff --git a/Top.js b/Top.js
new file mode 100644
index 0000000..9120dc8
--- /dev/null
+++ b/Top.js
@@ -0,0 +1,98 @@
+import React, { useEffect, useRef, useState } from "react";
+import {
+ createStackNavigator,
+ TransitionPresets,
+} from "@react-navigation/stack";
+import { getStationList2 } from "./lib/getStationList2";
+import Apps from "./Apps";
+import TrainBase from "./trainbaseview";
+import HowTo from "./howto";
+import News from "./components/news.js";
+import TrainMenu from "./components/trainMenu.js";
+import FavoriteList from "./components/FavoriteList.js";
+import { useFavoriteStation } from "./stateBox/useFavoriteStation";
+import { optionData } from "./lib/stackOption.js";
+const Stack = createStackNavigator();
+export const Top = ({ navigation, getCurrentTrain }) => {
+ const webview = useRef();
+ const { favoriteStation, setFavoriteStation } = useFavoriteStation();
+
+ //地図用
+ const [mapsStationData, setMapsStationData] = useState(undefined);
+
+ useEffect(() => {
+ getStationList2().then(setMapsStationData);
+ }, []);
+
+ useEffect(() => {
+ const unsubscribe = navigation.addListener("tabLongPress", (e) => {
+ navigation.navigate("favoriteList");
+ });
+
+ return unsubscribe;
+ }, [navigation]);
+
+ return (
+
+
+ {(props) => (
+
+ )}
+
+
+ {(props) => }
+
+
+ {(props) => }
+
+
+ {(props) => }
+
+
+ {(props) => (
+
+ )}
+
+
+ {(props) => (
+
+ )}
+
+
+ );
+};
diff --git a/components/ActionSheetComponents/StationDeteilView.js b/components/ActionSheetComponents/StationDeteilView.js
index 4817bc2..a933c22 100644
--- a/components/ActionSheetComponents/StationDeteilView.js
+++ b/components/ActionSheetComponents/StationDeteilView.js
@@ -1,38 +1,25 @@
import React, { useState, useEffect } from "react";
-import {
- StatusBar,
- View,
- LayoutAnimation,
- ScrollView,
- Linking,
- Text,
- TouchableOpacity,
-} from "react-native";
+import { View, Linking, Text, TouchableOpacity } from "react-native";
import AutoHeightImage from "react-native-auto-height-image";
import { FontAwesome, Foundation, Ionicons } from "@expo/vector-icons";
import ActionSheet from "react-native-actions-sheet";
import Sign from "../../components/駅名表/Sign";
-import { useInterval } from "../../lib/useInterval";
import { TicketBox } from "../atom/TicketBox";
-import {
- widthPercentageToDP as wp,
- heightPercentageToDP as hp,
-} from "react-native-responsive-screen";
+import { widthPercentageToDP as wp } from "react-native-responsive-screen";
import lineColorList from "../../assets/originData/lineColorList";
import { getPDFViewURL } from "../../lib/getPdfViewURL";
+import { useBusAndTrainData } from "../../stateBox/useBusAndTrainData";
export const StationDeteilView = (props) => {
const {
StationBoardAcSR,
currentStation,
originalStationList,
- favoriteStation,
- setFavoriteStation,
- busAndTrainData,
navigate,
onExit,
} = props;
+ const { busAndTrainData } = useBusAndTrainData();
const [trainBus, setTrainBus] = useState();
useEffect(() => {
if (!currentStation) return () => {};
@@ -87,8 +74,6 @@ export const StationDeteilView = (props) => {
{
navigate("howto", {
info,
@@ -105,8 +90,6 @@ export const StationDeteilView = (props) => {
))}
{currentStation &&
@@ -218,13 +201,7 @@ const StationName = (props) => {
);
};
-const NexPreStationLine = ({
- currentStation,
- originalStationList,
- oP,
- favoriteStation,
- setFavoriteStation,
-}) => {
+const NexPreStationLine = ({ currentStation, originalStationList }) => {
const [preStation, setPreStation] = useState();
const [nexStation, setNexStation] = useState();
const [lineName, setLineName] = useState();
diff --git a/components/FavoriteList.js b/components/FavoriteList.js
index 422ca4c..4888e48 100644
--- a/components/FavoriteList.js
+++ b/components/FavoriteList.js
@@ -1,21 +1,11 @@
-import React, { Component, useRef, useState, useEffect } from "react";
+import React from "react";
import { View, Text, TouchableOpacity, ScrollView } from "react-native";
-import { WebView } from "react-native-webview";
import { ListItem } from "native-base";
import Icon from "react-native-vector-icons/Entypo";
-import StatusbarDetect from "../StatusbarDetect";
-import { AS } from "../storageControl";
-import { news } from "../config/newsUpdate";
-import { getStationList, lineList } from "../lib/getStationList";
-var Status = StatusbarDetect();
-export default function FavoriteList({
- navigation,
- webview,
- stationData,
- favoriteStation,
- setFavoriteStation,
-}) {
+import { useFavoriteStation } from "../stateBox/useFavoriteStation";
+export default function FavoriteList({ navigation, webview, stationData }) {
const { navigate } = navigation;
+ const { favoriteStation } = useFavoriteStation();
return (
diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js
index cc943bb..09cf791 100644
--- a/components/発車時刻表/LED_vidion.js
+++ b/components/発車時刻表/LED_vidion.js
@@ -3,16 +3,15 @@ import { View, Text, TouchableOpacity } from "react-native";
import { Switch } from "react-native-elements";
import { widthPercentageToDP as wp } from "react-native-responsive-screen";
import LottieView from "lottie-react-native";
-import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
+import { Ionicons } from "@expo/vector-icons";
import { customTrainDataDetector } from "../custom-train-data";
import { useInterval } from "../../lib/useInterval";
import { objectIsEmpty } from "../../lib/objectIsEmpty";
import { getTrainType } from "../../lib/getTrainType";
-import { HeaderConfig } from "../../lib/HeaderConfig";
import { getTrainDelayStatus } from "../../lib/getTrainDelayStatus";
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
-
-let diagramData = undefined;
+import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
+import { useAreaInfo } from "../../stateBox/useAreaInfo";
/**
*
@@ -49,18 +48,14 @@ export default function LED_vision(props) {
setTrainInfo,
EachTrainInfoAsSR,
trainDiagram,
- currentTrainState,
- currentTrainLoadingState,
getCurrentTrain,
- areaInfo,
} = props;
- const { currentTrain, setCurrentTrain } = currentTrainState;
- const { currentTrainLoading, setCurrentTrainLoading } =
- currentTrainLoadingState;
+ const { currentTrain } = useCurrentTrain();
const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表
const [finalSwitch, setFinalSwitch] = useState(false);
const [trainIDSwitch, setTrainIDSwitch] = useState(false);
const [trainDescriptionSwitch, setTrainDescriptionSwitch] = useState(false);
+ const { areaInfo } = useAreaInfo();
useEffect(() => {
// 現在の駅に停車するダイヤを作成する副作用[列車ダイヤと現在駅情報]
@@ -187,18 +182,13 @@ export default function LED_vision(props) {
marginHorizontal: wp("1%"),
}}
>
-
- {selectedTrain.map((d, index) => (
+
+ {selectedTrain.map((d) => (
);
}
-const Header = ({
- currentTrainLoading,
- setCurrentTrainLoading,
- getCurrentTrain,
-}) => (
-
-
-
-
- 次の列車
-
- Next Train
+const Header = ({ getCurrentTrain }) => {
+ const { currentTrainLoading, setCurrentTrainLoading } = useCurrentTrain();
+ return (
+
+
+
+
+ 次の列車
+
+ Next Train
+
+
+ {currentTrainLoading == "loading" ? (
+
+ ) : currentTrainLoading == "error" ? (
+ {
+ setCurrentTrainLoading("loading");
+ getCurrentTrain();
+ }}
+ />
+ ) : null}
+
-
- {currentTrainLoading == "loading" ? (
-
- ) : currentTrainLoading == "error" ? (
- {
- setCurrentTrainLoading("loading");
- getCurrentTrain();
- }}
- />
- ) : null}
-
-
-);
+ );
+};
const Footer = (props) => {
const {
@@ -307,11 +296,11 @@ const EachData = ({
trainIDSwitch,
trainDescriptionSwitch,
station,
- currentTrain,
customTrainDataDetector,
setTrainInfo,
EachTrainInfoAsSR,
}) => {
+ const { currentTrain } = useCurrentTrain();
const openTrainInfo = (d) => {
let TrainNumber = "";
if (train.trainNumDistance != undefined) {
diff --git a/components/駅名表/Sign.js b/components/駅名表/Sign.js
index a90d7af..2d4dd84 100644
--- a/components/駅名表/Sign.js
+++ b/components/駅名表/Sign.js
@@ -1,30 +1,14 @@
-import React, { Component, useRef, useState, useEffect } from "react";
-import {
- StatusBar,
- View,
- LayoutAnimation,
- ScrollView,
- Linking,
- Text,
- TouchableOpacity,
-} from "react-native";
-import {
- widthPercentageToDP as wp,
- heightPercentageToDP as hp,
-} from "react-native-responsive-screen";
+import React, { useRef, useState, useEffect } from "react";
+import { View, Text, TouchableOpacity } from "react-native";
+import { widthPercentageToDP as wp } from "react-native-responsive-screen";
import LottieView from "lottie-react-native";
import { useInterval } from "../../lib/useInterval";
import { AS } from "../../storageControl";
+import { useFavoriteStation } from "../../stateBox/useFavoriteStation";
export default function Sign(props) {
- const {
- currentStation,
- originalStationList,
- oP,
- oLP,
- favoriteStation,
- setFavoriteStation,
- } = props;
+ const { currentStation, originalStationList, oP, oLP } = props;
+ const { favoriteStation, setFavoriteStation } = useFavoriteStation();
const [nexPrePosition, setNexPrePosition] = useState(0);
const [preStation, setPreStation] = useState();
diff --git a/lib/initIcon.js b/lib/initIcon.js
new file mode 100644
index 0000000..fd74a08
--- /dev/null
+++ b/lib/initIcon.js
@@ -0,0 +1,19 @@
+import React from "react";
+import { Ionicons, AntDesign } from "@expo/vector-icons";
+
+export const initIcon = (name, type) => {
+ switch (type) {
+ case "Ionicons":
+ return ({ focused, color, size }) => (
+
+ );
+ case "AntDesign":
+ return ({ focused, color, size }) => (
+
+ );
+ }
+};
diff --git a/lib/stackOption.js b/lib/stackOption.js
new file mode 100644
index 0000000..2d570e7
--- /dev/null
+++ b/lib/stackOption.js
@@ -0,0 +1,8 @@
+import { TransitionPresets } from "@react-navigation/stack";
+export const optionData = {
+ gestureEnabled: true,
+ ...TransitionPresets.ModalPresentationIOS,
+ cardOverlayEnabled: true,
+ headerTransparent: true,
+ headerShown: false,
+};
diff --git a/menu.js b/menu.js
index c5939b0..3d68a4c 100644
--- a/menu.js
+++ b/menu.js
@@ -7,14 +7,12 @@ import {
Linking,
Text,
TouchableOpacity,
- ToastAndroid,
} from "react-native";
import Constants from "expo-constants";
import { ListItem } from "native-base";
import Icon from "react-native-vector-icons/Entypo";
import * as Location from "expo-location";
import StatusbarDetect from "./StatusbarDetect";
-import { useNavigation } from "@react-navigation/native";
import AutoHeightImage from "react-native-auto-height-image";
import { widthPercentageToDP as wp } from "react-native-responsive-screen";
import {
@@ -39,21 +37,16 @@ import { JRSTraInfo } from "./components/ActionSheetComponents/JRSTraInfo";
import { EachTrainInfo } from "./components/ActionSheetComponents/EachTrainInfo";
import useInterval from "./lib/useInterval";
import { HeaderConfig } from "./lib/HeaderConfig";
+import { useFavoriteStation } from "./stateBox/useFavoriteStation";
export default function Menu(props) {
const {
navigation: { navigate },
- favoriteStation,
- setFavoriteStation,
- busAndTrainData,
- currentTrainState,
- currentTrainLoadingState,
getCurrentTrain,
- areaInfo,
} = props;
const JRSTraInfoEXAcSR = useRef(null);
const StationBoardAcSR = useRef(null);
- const navigation = useNavigation();
+ const { favoriteStation } = useFavoriteStation();
//位置情報
const [locationStatus, setLocationStatus] = useState(null);
@@ -171,13 +164,13 @@ export default function Menu(props) {
if (d.indexOf("404 Not Found") != -1) throw Error;
setTrainDiagram(parseAllTrainDiagram(d));
})
- .catch((d) => {
+ .catch(() => {
console.log("fallback");
setTrainDiagram(trainList);
});
}, []);
- const openStationACFromEachTrainInfo = (stationName) => {
+ const openStationACFromEachTrainInfo = () => {
// EachTrainInfoAsSR.current?.hide();
// const findStationEachLine = (selectLine) => {
// let NearStation = selectLine.filter((d) => d.Station_JP == stationName);
@@ -225,7 +218,7 @@ export default function Menu(props) {
onSnapToItem={(d) => {
setSelectedCurrentStation(d);
}}
- renderItem={({ item, index }) => {
+ renderItem={({ item }) => {
return (
@@ -253,10 +244,7 @@ export default function Menu(props) {
setTrainInfo={setTrainInfo}
EachTrainInfoAsSR={EachTrainInfoAsSR}
trainDiagram={trainDiagram}
- currentTrainState={currentTrainState}
- currentTrainLoadingState={currentTrainLoadingState}
getCurrentTrain={getCurrentTrain}
- areaInfo={areaInfo}
/>
)}
{
StationBoardAcSR.current?.setModalVisible();
@@ -441,7 +426,7 @@ const JRSTraInfoBox = (props) => {
/>
) : delayData ? (
- delayData.map((d, index) => {
+ delayData.map((d) => {
let data = d.split(" ");
return (
@@ -469,7 +454,7 @@ const JRSTraInfoBox = (props) => {
);
};
-const FixedContentTop = (props) => {
+const FixedContentTop = () => {
return (
<>
diff --git a/stateBox/useAreaInfo.js b/stateBox/useAreaInfo.js
new file mode 100644
index 0000000..5bc388c
--- /dev/null
+++ b/stateBox/useAreaInfo.js
@@ -0,0 +1,21 @@
+import React, { createContext, useContext, useState } from "react";
+const initialState = {
+ areaInfo: [],
+ setAreainfo: () => {},
+};
+
+const AreaInfoContext = createContext(initialState);
+
+export const useAreaInfo = () => {
+ return useContext(AreaInfoContext);
+};
+
+export const AreaInfoProvider = ({ children }) => {
+ const [areaInfo, setAreaInfo] = useState([]);
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/stateBox/useBusAndTrainData.js b/stateBox/useBusAndTrainData.js
new file mode 100644
index 0000000..a4791b5
--- /dev/null
+++ b/stateBox/useBusAndTrainData.js
@@ -0,0 +1,23 @@
+import React, { createContext, useContext, useState } from "react";
+const initialState = {
+ busAndTrainData: [],
+ setBusAndTrainData: () => {},
+};
+
+const BusAndTrainDataContext = createContext(initialState);
+
+export const useBusAndTrainData = () => {
+ return useContext(BusAndTrainDataContext);
+};
+
+export const BusAndTrainDataProvider = ({ children }) => {
+ const [busAndTrainData, setBusAndTrainData] = useState([]);
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js
new file mode 100644
index 0000000..241822e
--- /dev/null
+++ b/stateBox/useCurrentTrain.js
@@ -0,0 +1,31 @@
+import React, { createContext, useContext, useState } from "react";
+const initialState = {
+ currentTrain: [],
+ setCurrentTrain: () => {},
+ currentTrainLoading: "loading",
+ setCurrentTrainLoading: () => {},
+};
+
+const CurrentTrainContext = createContext(initialState);
+
+export const useCurrentTrain = () => {
+ return useContext(CurrentTrainContext);
+};
+
+export const CurrentTrainProvider = ({ children }) => {
+ const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
+ const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/stateBox/useFavoriteStation.js b/stateBox/useFavoriteStation.js
new file mode 100644
index 0000000..ee6dc11
--- /dev/null
+++ b/stateBox/useFavoriteStation.js
@@ -0,0 +1,23 @@
+import React, { createContext, useContext, useState } from "react";
+const initialState = {
+ favoriteStation: [],
+ setFavoriteStation: () => {},
+};
+
+const FavoriteStationContext = createContext(initialState);
+
+export const useFavoriteStation = () => {
+ return useContext(FavoriteStationContext);
+};
+
+export const FavoriteStationProvider = ({ children }) => {
+ const [favoriteStation, setFavoriteStation] = useState({});
+
+ return (
+
+ {children}
+
+ );
+};