diff --git a/App.js b/App.js index d728d30..eb21052 100644 --- a/App.js +++ b/App.js @@ -28,6 +28,7 @@ import { import { AllTrainDiagramProvider } from "./stateBox/useAllTrainDiagram.js"; import { SheetProvider } from "react-native-actions-sheet"; import "./components/ActionSheetComponents/sheets.js"; +import { TrainDelayDataProvider } from "./stateBox/useTrainDelayData.js"; LogBox.ignoreLogs([ "ViewPropTypes will be removed", "ColorPropType will be removed", @@ -43,17 +44,19 @@ export default function App() { useEffect(() => UpdateAsync(), []); return ( - - - - - - - - - - - + + + + + + + + + + + + + ); } diff --git a/components/ActionSheetComponents/JRSTraInfo.js b/components/ActionSheetComponents/JRSTraInfo.js index eaf0e37..d31b53e 100644 --- a/components/ActionSheetComponents/JRSTraInfo.js +++ b/components/ActionSheetComponents/JRSTraInfo.js @@ -10,10 +10,10 @@ import { import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; import ActionSheet from "react-native-actions-sheet"; import LottieView from "lottie-react-native"; -export const JRSTraInfo = (props) => { - if (!props.payload) return <>; - const { getTime, loadingDelayData, setLoadingDelayData, delayData } = - props.payload; +import { useTrainDelayData } from "../../stateBox/useTrainDelayData"; +export const JRSTraInfo = () => { + const { getTime, delayData, loadingDelayData, setLoadingDelayData } = + useTrainDelayData(); return ( }> getStationList().then(setOriginalStationList), []); - const [count, setCount] = useState(0); - const [delayData, setDelayData] = useState(undefined); - const [getTime, setGetTime] = useState(new Date()); - const [loadingDelayData, setLoadingDelayData] = useState(true); const carouselRef = useRef(); const [selectedCurrentStation, setSelectedCurrentStation] = useState(0); - useEffect(() => { - fetch( - "https://script.google.com/macros/s/AKfycbyKxch7z7l8e07LXulRHqxjVoIiB13kcgvoToLE-rqlxLmLSKdlmqz0FI1F2EuA7Zfg/exec" - ) - .then((response) => response.text()) - .then((data) => setDelayData(data !== "" ? data.split("^") : null)) - .then(() => setGetTime(new Date())) - .finally(() => setLoadingDelayData(false)); - }, [loadingDelayData]); const [allStationData, setAllStationData] = useState([]); useEffect(() => { setAllStationData( @@ -262,12 +247,7 @@ export default function Menu(props) { openStationACFromEachTrainInfo={openStationACFromEachTrainInfo} /> )} - + @@ -332,8 +312,15 @@ const TopMenuButton = () => { ); }; -const JRSTraInfoBox = (props) => { - const { getTime, setLoadingDelayData, loadingDelayData, delayData } = props; +const JRSTraInfoBox = () => { + const { + getTime, + setGetTime, + delayData, + setDelayData, + loadingDelayData, + setLoadingDelayData, + } = useTrainDelayData(); const styles = { touch: { backgroundColor: "#0099CC", @@ -365,17 +352,7 @@ const JRSTraInfoBox = (props) => { }; return ( { - const payload = { - getTime, - setLoadingDelayData, - loadingDelayData, - delayData, - }; - SheetManager.show("JRSTraInfo", { - payload, - }); - }} + onPress={() => SheetManager.show("JRSTraInfo")} style={styles.touch} > @@ -558,18 +535,18 @@ const FixedContentBottom = (props) => { JR四国グループの施設をご案内 - {/* props.navigate("AllTrainIDList")} > - JR四国のお店・サービス + 列番検索 - JR四国グループの施設をご案内 + 全列車のダイヤを確認できる機能です。 - */} + {}, + loadingDelayData: true, + setLoadingDelayData: () => {}, + delayData: undefined, + setDelayData: () => {}, +}; + +const TrainDelayDataContext = createContext(initialState); + +export const useTrainDelayData = () => { + return useContext(TrainDelayDataContext); +}; + +export const TrainDelayDataProvider = ({ children }) => { + const [delayData, setDelayData] = useState(undefined); + const [getTime, setGetTime] = useState(new Date()); + const [loadingDelayData, setLoadingDelayData] = useState(true); + useEffect(() => { + fetch( + "https://script.google.com/macros/s/AKfycbyKxch7z7l8e07LXulRHqxjVoIiB13kcgvoToLE-rqlxLmLSKdlmqz0FI1F2EuA7Zfg/exec" + ) + .then((response) => response.text()) + .then((data) => setDelayData(data !== "" ? data.split("^") : null)) + .then(() => setGetTime(new Date())) + .finally(() => setLoadingDelayData(false)); + }, [loadingDelayData]); + + return ( + + {children} + + ); +};