From 9306a9cb2571f6d594a16c76b324ce5410526686 Mon Sep 17 00:00:00 2001 From: harukin-OneMix4 Date: Fri, 15 Dec 2023 00:32:58 +0900 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=83=A8state=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E7=A7=BB=E5=8B=95=E3=80=81=E4=B8=8D=E8=A6=81=E3=81=AA=E8=A6=81?= =?UTF-8?q?=E7=B4=A0=E3=81=AE=E4=B8=80=E6=96=89=E6=B6=88=E5=8E=BB=E3=80=81?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=9D=E3=83=BC=E3=83=8D=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.js | 295 +++--------------- Apps.js | 46 +-- MenuPage.js | 69 ++++ Top.js | 98 ++++++ .../StationDeteilView.js | 33 +- components/FavoriteList.js | 18 +- components/発車時刻表/LED_vidion.js | 111 +++---- components/駅名表/Sign.js | 28 +- lib/initIcon.js | 19 ++ lib/stackOption.js | 8 + menu.js | 29 +- stateBox/useAreaInfo.js | 21 ++ stateBox/useBusAndTrainData.js | 23 ++ stateBox/useCurrentTrain.js | 31 ++ stateBox/useFavoriteStation.js | 23 ++ 15 files changed, 418 insertions(+), 434 deletions(-) create mode 100644 MenuPage.js create mode 100644 Top.js create mode 100644 lib/initIcon.js create mode 100644 lib/stackOption.js create mode 100644 stateBox/useAreaInfo.js create mode 100644 stateBox/useBusAndTrainData.js create mode 100644 stateBox/useCurrentTrain.js create mode 100644 stateBox/useFavoriteStation.js 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} + + ); +};