diff --git a/MenuPage.js b/MenuPage.js
index 4db8bef..f258916 100644
--- a/MenuPage.js
+++ b/MenuPage.js
@@ -4,7 +4,7 @@ import {
TransitionPresets,
} from "@react-navigation/stack";
import { AS } from "./storageControl";
-import TrainBase from "./trainbaseview";
+import TrainBase from "./components/trainbaseview";
import HowTo from "./howto";
import Menu from "./menu";
import Setting from "./components/Settings/settings";
diff --git a/Top.js b/Top.js
index 046b2c0..bb9aa87 100644
--- a/Top.js
+++ b/Top.js
@@ -4,8 +4,8 @@ import {
TransitionPresets,
} from "@react-navigation/stack";
import { getStationList2 } from "./lib/getStationList2";
-import Apps from "./Apps";
-import TrainBase from "./trainbaseview";
+import Apps from "./components/Apps";
+import TrainBase from "./components/trainbaseview";
import HowTo from "./howto";
import News from "./components/news.js";
import TrainMenu from "./components/trainMenu.js";
diff --git a/Apps.js b/components/Apps.js
similarity index 57%
rename from Apps.js
rename to components/Apps.js
index 4358702..38a188b 100644
--- a/Apps.js
+++ b/components/Apps.js
@@ -7,43 +7,36 @@ import {
useWindowDimensions,
LayoutAnimation,
} from "react-native";
-import { WebView } from "react-native-webview";
import Constants from "expo-constants";
import { Ionicons } from "@expo/vector-icons";
import * as Updates from "expo-updates";
-import { AS } from "./storageControl";
-import { news } from "./config/newsUpdate";
-import { getStationList, lineList, lineListPair } from "./lib/getStationList";
-import { injectJavascriptData } from "./lib/webViewInjectjavascript";
-import { checkDuplicateTrainData } from "./lib/checkDuplicateTrainData";
-import { useFavoriteStation } from "./stateBox/useFavoriteStation";
-import { useCurrentTrain } from "./stateBox/useCurrentTrain";
-import { useDeviceOrientationChange } from "./stateBox/useDeviceOrientationChange";
+import { AS } from "../storageControl";
+import { news } from "../config/newsUpdate";
+import { getStationList, lineList } from "../lib/getStationList";
+import { injectJavascriptData } from "../lib/webViewInjectjavascript";
+import { useCurrentTrain } from "../stateBox/useCurrentTrain";
+import { useDeviceOrientationChange } from "../stateBox/useDeviceOrientationChange";
import { SheetManager } from "react-native-actions-sheet";
-import TrainMenu from "./components/trainMenu";
-import { EachTrainInfoCore } from "./components/ActionSheetComponents/EachTrainInfoCore";
+import TrainMenu from "../components/trainMenu";
+import { EachTrainInfoCore } from "../components/ActionSheetComponents/EachTrainInfoCore";
import { useNavigation } from "@react-navigation/native";
-import { useTrainMenu } from "./stateBox/useTrainMenu";
-import { stationNamePair } from "./lib/getStationList2";
+import { useTrainMenu } from "../stateBox/useTrainMenu";
+import { AppsWebView } from "./Apps/WebView";
/*
-import StatusbarDetect from './StatusbarDetect';
+import StatusbarDetect from '../StatusbarDetect';
var Status = StatusbarDetect(); */
+const top = Platform.OS == "ios" ? Constants.statusBarHeight : 0;
+
export default function Apps() {
- const { webview, currentTrain } = useCurrentTrain();
+ const { webview } = useCurrentTrain();
const { height, width } = useWindowDimensions();
const { navigate } = useNavigation();
- var urlcache = "";
- const { favoriteStation } = useFavoriteStation();
- const { isLandscape, setIsLandscape } = useDeviceOrientationChange();
+ const { isLandscape } = useDeviceOrientationChange();
const handleLayout = () => {};
- const {
- setSelectedLine,
- setInjectJavaScript,
- mapsStationData: stationData,
- } = useTrainMenu();
+ const { setInjectJavaScript, mapsStationData: stationData } = useTrainMenu();
//画面表示関連
const [iconSetting, setIconSetting] = useState(undefined);
@@ -61,10 +54,7 @@ export default function Apps() {
//駅情報画面用
const [originalStationList, setOriginalStationList] = useState();
const [trainMenu, setTrainMenu] = useState("true");
- let once = false;
- useEffect(() => {
- getStationList().then(setOriginalStationList);
- }, []);
+ useEffect(() => getStationList().then(setOriginalStationList), []);
//地図表示テキスト
const injectJavascript = injectJavascriptData(
@@ -98,130 +88,6 @@ export default function Apps() {
ASCore({ k: "trainSwitch", s: setTrainMenu, d: "true" });
}, []);
- const onMessage = (event) => {
- const { data } = event.nativeEvent;
- if (data.includes("train.html")) {
- navigate("trainbase", { info: data, from: "Train" });
- return;
- }
- if (!originalStationList) {
- alert("駅名標データを取得中...");
- return;
- }
- const dataSet = JSON.parse(data);
- switch (dataSet.type) {
- case "LoadError": {
- setLoadError(true);
- return;
- }
- case "PopUpMenu":
- {
- const selectedStationPDFAddress = dataSet.pdf;
- const findStationEachLine = (selectLine) =>
- selectLine.filter(
- (d) => d.StationTimeTable == selectedStationPDFAddress
- );
- let returnDataBase = lineList
- .map((d) => findStationEachLine(originalStationList[d]))
- .filter((d) => d.length > 0)
- .reduce((pre, current) => {
- pre.push(...current);
- return pre;
- }, []);
-
- if (returnDataBase.length) {
- const payload = {
- currentStation: returnDataBase,
- originalStationList: originalStationList,
- navigate: navigate,
- goTo: "Apps",
- useShow: () =>
- SheetManager.show("StationDetailView", {
- payload,
- }),
- onExit: () => SheetManager.hide("StationDetailView"),
- };
- SheetManager.show("StationDetailView", { payload });
- }
- }
- return;
- case "ShowTrainTimeInfo": {
- const { trainNum, limited } = dataSet;
- //alert(trainNum, limited);
- LayoutAnimation.easeInEaseOut();
- setTrainInfo({
- trainNum,
- limited,
- trainData: checkDuplicateTrainData(
- currentTrain.filter((a) => a.num == trainNum)
- ),
- }); //遅延情報は未実装
- if (isLandscape) return;
- const payload = {
- data: {
- trainNum,
- limited,
- },
- navigate,
- originalStationList,
- openStationACFromEachTrainInfo,
- };
- SheetManager.show("EachTrainInfo", {
- payload,
- });
- return;
- }
- case "currentLines": {
- const lineInfo = dataSet.currentLines.split("\n")[0];
- const lineID = stationNamePair[lineInfo];
-
- setSelectedLine(lineID);
- return;
- }
- default: {
- return;
- }
- }
- };
-
- const onNavigationStateChange = (event) => {
- if (event.url != urlcache) {
- //URL二重判定回避
- urlcache = event.url;
-
- if (event.url.includes("https://train.jr-shikoku.co.jp/usage.htm")) {
- if (Platform.OS === "android") navigate("howto", { info: event.url });
- webview?.current.goBack();
- //Actions.howto();
- } else if (
- event.url.includes("https://train.jr-shikoku.co.jp/train.html")
- ) {
- //Actions.trainbase({info: event.url});
- if (Platform.OS === "android")
- navigate("trainbase", { info: event.url });
- webview?.current.goBack();
- }
- }
- };
- function sleep(waitSec, callbackFunc) {
- // 経過時間(秒)
- var spanedSec = 0;
-
- // 1秒間隔で無名関数を実行
- var id = setInterval(function () {
- spanedSec++;
-
- // 経過時間 >= 待機時間の場合、待機終了。
- if (spanedSec >= waitSec) {
- // タイマー停止
- clearInterval(id);
-
- // 完了時、コールバック関数を実行
- if (callbackFunc) callbackFunc();
- }
- }, 1);
- }
-
const openStationACFromEachTrainInfo = async (stationName) => {
await SheetManager.hide("EachTrainInfo");
const findStationEachLine = (selectLine) => {
@@ -241,17 +107,10 @@ export default function Apps() {
originalStationList: originalStationList,
navigate: navigate,
goTo: "Apps",
- useShow: () =>
- SheetManager.show("StationDetailView", {
- payload,
- }),
- onExit: () => {
- SheetManager.hide("StationDetailView");
- },
+ useShow: () => SheetManager.show("StationDetailView", { payload }),
+ onExit: () => SheetManager.hide("StationDetailView"),
};
- SheetManager.show("StationDetailView", {
- payload,
- });
+ SheetManager.show("StationDetailView", { payload });
} else {
SheetManager.hide("StationDetailView");
}
@@ -260,7 +119,7 @@ export default function Apps() {
) : null}
{/* {Status} */}
- {
- if (once) return () => {};
- if (!stationData) return () => {};
- if (favoriteStation.length > 0) {
- const getStationLine = (now) => {
- const returnData = Object.keys(stationData).filter((d) => {
- const cache = stationData[d].findIndex(
- (data) => data.Station_JP == now.Station_JP
- );
- return cache != -1;
- });
- return returnData[0];
- };
- const lineName = getStationLine(favoriteStation[0][0]);
- webview.current?.injectJavaScript(
- `MoveDisplayStation('${lineName}_${favoriteStation[0][0].MyStation}_${favoriteStation[0][0].Station_JP}')`
- );
- once = true;
- }
+
{isLandscape && trainInfo.trainNum && (
@@ -340,7 +172,6 @@ export default function Apps() {
setInjectJavaScript("");
navigate("trainMenu", { webview });
}}
- top={Platform.OS == "ios" ? Constants.statusBarHeight : 0}
mapSwitch={mapSwitch == "true" ? "flex" : "none"}
/>
)}
@@ -354,13 +185,11 @@ export default function Apps() {
trainData: undefined,
});
}}
- top={Platform.OS == "ios" ? Constants.statusBarHeight : 0}
/>
)}
{mapSwitch == "true" ? (
Updates.reloadAsync()}
- top={Platform.OS == "ios" ? Constants.statusBarHeight : 0}
right={isLandscape && trainInfo.trainNum ? (width / 100) * 40 : 0}
LoadError={LoadError}
/>
@@ -375,15 +204,14 @@ export default function Apps() {
);
}
-
const NewMenu = ({ webview, LoadError }) => {
const { width } = useWindowDimensions();
return (
{
);
};
-const MapsButton = ({ onPress, top, mapSwitch }) => {
+const MapsButton = ({ onPress, mapSwitch }) => {
const styles = {
touch: {
position: "absolute",
@@ -496,11 +324,10 @@ const MapsButton = ({ onPress, top, mapSwitch }) => {
);
};
-const LandscapeBackButton = ({ onPress, top }) => {
+const LandscapeBackButton = ({ onPress }) => {
const styles = {
touch: {
position: "absolute",
- top,
left: 10,
width: 50,
height: 50,
@@ -532,13 +359,7 @@ const LandscapeBackButton = ({ onPress, top }) => {
);
};
-const ReloadButton = ({
- onPress,
- top,
- mapSwitch,
- LoadError = false,
- right,
-}) => {
+const ReloadButton = ({ onPress, mapSwitch, LoadError = false, right }) => {
const styles = {
touch: {
position: "absolute",
diff --git a/components/Apps/WebView.jsx b/components/Apps/WebView.jsx
new file mode 100644
index 0000000..1a5469f
--- /dev/null
+++ b/components/Apps/WebView.jsx
@@ -0,0 +1,161 @@
+import React from "react";
+import { Platform, LayoutAnimation } from "react-native";
+import { WebView } from "react-native-webview";
+
+import { lineList } from "../../lib/getStationList";
+import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
+import { useFavoriteStation } from "../../stateBox/useFavoriteStation";
+import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
+import { useDeviceOrientationChange } from "../../stateBox/useDeviceOrientationChange";
+import { SheetManager } from "react-native-actions-sheet";
+
+import { useNavigation } from "@react-navigation/native";
+import { useTrainMenu } from "../../stateBox/useTrainMenu";
+import { stationNamePair } from "../../lib/getStationList2";
+export const AppsWebView = ({
+ originalStationList,
+ setLoadError,
+ setTrainInfo,
+ openStationACFromEachTrainInfo,
+ injectJavascript,
+}) => {
+ const { webview, currentTrain } = useCurrentTrain();
+ const { navigate } = useNavigation();
+ const { favoriteStation } = useFavoriteStation();
+ const { isLandscape } = useDeviceOrientationChange();
+ const { setSelectedLine, mapsStationData: stationData } = useTrainMenu();
+ var urlcache = "";
+ let once = false;
+
+ const onNavigationStateChange = ({ url }) => {
+ if (url == urlcache) return;
+ //URL二重判定回避
+ urlcache = url;
+ switch (true) {
+ case url.includes("https://train.jr-shikoku.co.jp/usage.htm"):
+ if (Platform.OS === "android") navigate("howto", { info: url });
+ webview?.current.goBack();
+ //Actions.howto();
+ break;
+ case url.includes("https://train.jr-shikoku.co.jp/train.html"):
+ //Actions.trainbase({info: url});
+ if (Platform.OS === "android") navigate("trainbase", { info: url });
+ webview?.current.goBack();
+ break;
+ }
+ };
+
+ const onMessage = (event) => {
+ const { data } = event.nativeEvent;
+ if (data.includes("train.html")) {
+ navigate("trainbase", { info: data, from: "Train" });
+ return;
+ }
+ if (!originalStationList) {
+ alert("駅名標データを取得中...");
+ return;
+ }
+ const dataSet = JSON.parse(data);
+ switch (dataSet.type) {
+ case "LoadError": {
+ setLoadError(true);
+ return;
+ }
+ case "PopUpMenu":
+ {
+ const findStationEachLine = (selectLine) =>
+ selectLine.filter((d) => d.StationTimeTable == dataSet.pdf);
+ let returnDataBase = lineList
+ .map((d) => findStationEachLine(originalStationList[d]))
+ .filter((d) => d.length > 0)
+ .reduce((pre, current) => {
+ pre.push(...current);
+ return pre;
+ }, []);
+
+ if (returnDataBase.length) {
+ const payload = {
+ currentStation: returnDataBase,
+ originalStationList: originalStationList,
+ navigate: navigate,
+ goTo: "Apps",
+ useShow: () =>
+ SheetManager.show("StationDetailView", { payload }),
+ onExit: () => SheetManager.hide("StationDetailView"),
+ };
+ SheetManager.show("StationDetailView", { payload });
+ }
+ }
+ return;
+ case "ShowTrainTimeInfo": {
+ const { trainNum, limited } = dataSet;
+ //alert(trainNum, limited);
+ LayoutAnimation.easeInEaseOut();
+ setTrainInfo({
+ trainNum,
+ limited,
+ trainData: checkDuplicateTrainData(
+ currentTrain.filter((a) => a.num == trainNum)
+ ),
+ }); //遅延情報は未実装
+ if (isLandscape) return;
+ const payload = {
+ data: { trainNum, limited },
+ navigate,
+ originalStationList,
+ openStationACFromEachTrainInfo,
+ };
+ SheetManager.show("EachTrainInfo", { payload });
+ return;
+ }
+ case "currentLines": {
+ const lineInfo = dataSet.currentLines.split("\n")[0];
+ const lineID = stationNamePair[lineInfo];
+
+ setSelectedLine(lineID);
+ return;
+ }
+ default: {
+ return;
+ }
+ }
+ };
+
+ const onLoadEnd = () => {
+ if (once) return () => {};
+ if (!stationData) return () => {};
+ if (favoriteStation.length < 1) return () => {};
+ const getStationLine = (now) => {
+ const returnData = Object.keys(stationData).filter((d) => {
+ const cache = stationData[d].findIndex(
+ (data) => data.Station_JP == now.Station_JP
+ );
+ return cache != -1;
+ });
+ return returnData[0];
+ };
+ const lineName = getStationLine(favoriteStation[0][0]);
+ webview.current?.injectJavaScript(
+ `MoveDisplayStation('${lineName}_${favoriteStation[0][0].MyStation}_${favoriteStation[0][0].Station_JP}')`
+ );
+ once = true;
+ };
+
+ return (
+
+ );
+};
diff --git a/trainbaseview.js b/components/trainbaseview.js
similarity index 100%
rename from trainbaseview.js
rename to components/trainbaseview.js