diff --git a/StatusbarDetect.js b/StatusbarDetect.tsx
similarity index 65%
rename from StatusbarDetect.js
rename to StatusbarDetect.tsx
index 930d558..d8b8439 100644
--- a/StatusbarDetect.js
+++ b/StatusbarDetect.tsx
@@ -1,10 +1,12 @@
-import React from "react";
+import React, { FC } from "react";
import { Platform, StatusBar, View } from "react-native";
-export default function StatusbarDetect() {
+const StatusbarDetect: FC = () => {
if (Platform.OS == "ios") {
return ;
} else if (Platform.OS == "android") {
return ;
}
-}
+};
+
+export default StatusbarDetect;
diff --git a/Top.js b/Top.js
index acbd5d8..5449cbb 100644
--- a/Top.js
+++ b/Top.js
@@ -3,7 +3,6 @@ import {
createStackNavigator,
TransitionPresets,
} from "@react-navigation/stack";
-import { getStationList2 } from "./lib/getStationList2";
import Apps from "./components/Apps";
import TrainBase from "./components/trainbaseview";
import HowTo from "./howto";
@@ -29,7 +28,6 @@ export const Top = ({ navigationRef }) => {
return unsubscribe;
}, [{ navigate, addListener }]);
-
const goToTrainMenu = () => {
if (navigationRef.current?.getCurrentRoute().name == "Apps") {
if (mapSwitch == "true") {
diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js
index 6b84549..98e0541 100644
--- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js
+++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js
@@ -5,7 +5,6 @@ import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientati
import { getStationList2 } from "../../../lib/getStationList2";
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
import { SheetManager } from "react-native-actions-sheet";
-import { useNavigation } from "@react-navigation/native";
export const TrainDataView = ({
currentTrainData,
diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js
index d6f9678..c145c36 100644
--- a/components/ActionSheetComponents/EachTrainInfoCore.js
+++ b/components/ActionSheetComponents/EachTrainInfoCore.js
@@ -33,6 +33,7 @@ import { openBackTrainInfo } from "../../lib/eachTrainInfoCoreLib/openBackTrainI
import { ShowSpecialTrain } from "./EachTrainInfo/ShowSpecialTrain";
import { useTrainMenu } from "../../stateBox/useTrainMenu";
import { HeaderText } from "./EachTrainInfoCore/HeaderText";
+import { useStationList } from "../../stateBox/useStationList";
export const EachTrainInfoCore = ({
actionSheetRef,
@@ -43,7 +44,8 @@ export const EachTrainInfoCore = ({
}) => {
// const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false);
const { currentTrain } = useCurrentTrain();
- const { setTrainInfo, originalStationList } = useTrainMenu();
+ const { originalStationList } = useStationList();
+ const { setTrainInfo } = useTrainMenu();
const [currentTrainData, setCurrentTrainData] = useState();
// const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false);
diff --git a/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx b/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx
index 9479047..45b0ab0 100644
--- a/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx
+++ b/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx
@@ -58,7 +58,7 @@ export const HeaderText: FC = ({
}, [data.limited, trainData]);
return (
-
+
{trainName}
diff --git a/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx
index 1fcd4cf..141a10b 100644
--- a/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx
+++ b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx
@@ -72,7 +72,7 @@ export const TrainIconStatus: FC = ({ data, navigate, from }) => {
onPress={() => {
navigate("howto", {
info: "https://www.jr-eki.com/aptrain/index.html",
- goTo: from,
+ goTo: from == "LED" ? "menu" : from,
});
SheetManager.hide("EachTrainInfo");
}}
diff --git a/components/ActionSheetComponents/sheets.js b/components/ActionSheetComponents/sheets.ts
similarity index 100%
rename from components/ActionSheetComponents/sheets.js
rename to components/ActionSheetComponents/sheets.ts
diff --git a/components/AllTrainDiagramView.js b/components/AllTrainDiagramView.js
index 15585f4..07169b7 100644
--- a/components/AllTrainDiagramView.js
+++ b/components/AllTrainDiagramView.js
@@ -12,19 +12,13 @@ import {
import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram";
import { customTrainDataDetector } from "./custom-train-data";
-import { getStationList } from "../lib/getStationList";
import { getTrainType } from "../lib/getTrainType";
import { SheetManager } from "react-native-actions-sheet";
import { useNavigation } from "@react-navigation/native";
-import { useTrainMenu } from "../stateBox/useTrainMenu";
+import { BigButton } from "./atom/BigButton";
export default function AllTrainDiagramView() {
const { navigate } = useNavigation();
- const { allTrainDiagram } = useAllTrainDiagram();
- const [keyList, setKeyList] = useState(); // 第二要素
- useEffect(
- () => allTrainDiagram && setKeyList(Object.keys(allTrainDiagram)),
- []
- );
+ const { keyList } = useAllTrainDiagram();
const [input, setInput] = useState(""); // 文字入力
const [keyBoardVisible, setKeyBoardVisible] = useState(false);
@@ -50,13 +44,10 @@ export default function AllTrainDiagramView() {
parseInt(d.replace("M", "").replace("D", "")) - train.trainNumDistance;
TrainNumber = timeInfo + "号";
}
+ const type = getTrainType(train.type).data;
+ const limited = `${type}:${train.trainName}${TrainNumber}`;
const payload = {
- data: {
- trainNum: d,
- limited: `${getTrainType(train.type).data}:${
- train.trainName
- }${TrainNumber}`,
- },
+ data: { trainNum: d, limited },
navigate,
from: "AllTrainIDList",
};
@@ -69,11 +60,9 @@ export default function AllTrainDiagramView() {
d.includes(input))}
- renderItem={({ item }) => (
-
- )}
+ renderItem={({ item }) => }
keyExtractor={(item) => item}
- initialNumToRender={100}
+ //initialNumToRender={100}
/>
{
- setKeyBoardVisible(true);
- }}
+ onFocus={() => setKeyBoardVisible(true)}
onEndEditing={() => {}}
- onChange={(ret) => {
- setInput(ret.nativeEvent.text);
- }}
+ onChange={(ret) => setInput(ret.nativeEvent.text)}
value={input}
style={{ flex: 1 }}
/>
-
- navigate("menu")}
+ string="閉じる"
style={{
- padding: 10,
- flexDirection: "row",
- borderColor: "white",
- borderWidth: 1,
- margin: 10,
- borderRadius: 5,
- alignItems: "center",
display:
Platform.OS === "ios" ? "flex" : keyBoardVisible ? "none" : "flex",
}}
- onPress={() => navigate("menu")}
- >
-
-
- 閉じる
-
-
-
+ />
);
}
diff --git a/components/Apps.js b/components/Apps.js
index 52af34a..2052ba7 100644
--- a/components/Apps.js
+++ b/components/Apps.js
@@ -22,6 +22,7 @@ import { NewMenu } from "./Apps/NewMenu";
import { MapsButton } from "./Apps/MapsButton";
import { ReloadButton } from "./Apps/ReloadButton";
import { LandscapeBackButton } from "./Apps/LandscapeBackButton";
+import { useStationList } from "../stateBox/useStationList";
/*
import StatusbarDetect from '../StatusbarDetect';
var Status = StatusbarDetect(); */
@@ -34,13 +35,9 @@ export default function Apps() {
const { navigate } = useNavigation();
const { isLandscape } = useDeviceOrientationChange();
const handleLayout = () => {};
- const {
- setInjectJavaScript,
- mapSwitch,
- trainInfo,
- setTrainInfo,
- originalStationList,
- } = useTrainMenu();
+ const { originalStationList } = useStationList();
+ const { setInjectJavaScript, mapSwitch, trainInfo, setTrainInfo } =
+ useTrainMenu();
const openStationACFromEachTrainInfo = async (stationName) => {
await SheetManager.hide("EachTrainInfo");
diff --git a/components/Apps/WebView.jsx b/components/Apps/WebView.jsx
index 7e64959..e5e8d7d 100644
--- a/components/Apps/WebView.jsx
+++ b/components/Apps/WebView.jsx
@@ -12,17 +12,18 @@ import { SheetManager } from "react-native-actions-sheet";
import { useNavigation } from "@react-navigation/native";
import { useTrainMenu } from "../../stateBox/useTrainMenu";
import { stationNamePair } from "../../lib/getStationList2";
+import { useStationList } from "../../stateBox/useStationList";
export const AppsWebView = ({ openStationACFromEachTrainInfo }) => {
const { webview, currentTrain } = useCurrentTrain();
const { navigate } = useNavigation();
const { favoriteStation } = useFavoriteStation();
const { isLandscape } = useDeviceOrientationChange();
+ const { originalStationList } = useStationList();
const {
setSelectedLine,
mapsStationData: stationData,
setLoadError,
setTrainInfo,
- originalStationList,
injectJavascript,
} = useTrainMenu();
var urlcache = "";
diff --git a/components/CurrentTrainListView.js b/components/CurrentTrainListView.js
index 72a6a1d..250a5da 100644
--- a/components/CurrentTrainListView.js
+++ b/components/CurrentTrainListView.js
@@ -1,53 +1,15 @@
-import React, { useRef } from "react";
-import { View, Text, TouchableOpacity, Linking } from "react-native";
-import MapView, { Marker } from "react-native-maps";
-import { MaterialCommunityIcons } from "@expo/vector-icons";
+import React from "react";
+import { View, Text } from "react-native";
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
import { useNavigation } from "@react-navigation/native";
+import { BigButton } from "./atom/BigButton";
export default function CurrentTrainListView() {
const { navigate } = useNavigation();
const { currentTrain } = useCurrentTrain();
return (
{currentTrain && currentTrain.map((d) => {d.num})}
- navigate("menu")}
- >
-
-
- 閉じる
-
-
-
+ navigate("menu")} string="閉じる" />
);
}
-const UsefulBox = (props) => {
- const { icon, backgroundColor, flex, onPressButton, children } = props;
- return (
-
-
-
- {children}
-
-
- );
-};
diff --git a/components/FavoriteList.js b/components/FavoriteList.js
index e46b613..d942952 100644
--- a/components/FavoriteList.js
+++ b/components/FavoriteList.js
@@ -7,6 +7,7 @@ import { useCurrentTrain } from "../stateBox/useCurrentTrain";
import { useNavigation } from "@react-navigation/native";
import { useTrainMenu } from "../stateBox/useTrainMenu";
import { FavoriteListItem } from "./atom/FavoriteListItem";
+import { BigButton } from "./atom/BigButton";
export default function FavoriteList() {
const { favoriteStation } = useFavoriteStation();
const { webview } = useCurrentTrain();
@@ -78,24 +79,7 @@ export default function FavoriteList() {
>
お気に入り登録した駅のうち、位置情報システムで移動可能な駅が表示されています。タップすることで位置情報システムの当該の駅に移動します。
- goBack()}
- >
-
-
- 閉じる
-
-
-
+ goBack()} string="閉じる" />
);
}
diff --git a/components/TrainMenu/MapPin.tsx b/components/TrainMenu/MapPin.tsx
new file mode 100644
index 0000000..e7e5d72
--- /dev/null
+++ b/components/TrainMenu/MapPin.tsx
@@ -0,0 +1,32 @@
+import React, { FC } from "react";
+import { Marker } from "react-native-maps";
+type Props = {
+ index: number;
+ indexBase: number;
+ latlng: string[];
+ D: any;
+ d: string;
+ navigate: (screen: string) => void;
+ webview: any;
+};
+
+export const MapPin: FC = (props) => {
+ const { index, indexBase, latlng, D, d, navigate, webview } = props;
+ return (
+ {
+ webview.current?.injectJavaScript(
+ `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');
+ document.getElementById("disp").insertAdjacentHTML("afterbegin", "");`
+ );
+ if (navigate) navigate("Apps");
+ }}
+ image={require("../../assets/reccha-small.png")}
+ >
+ );
+};
diff --git a/components/TrainMenu/MapsButton.tsx b/components/TrainMenu/MapsButton.tsx
new file mode 100644
index 0000000..52bc5de
--- /dev/null
+++ b/components/TrainMenu/MapsButton.tsx
@@ -0,0 +1,35 @@
+import React, { FC } from "react";
+import { View, TouchableOpacity, TouchableOpacityProps } from "react-native";
+import { Ionicons } from "@expo/vector-icons";
+
+type Props = {
+ onPress: () => void;
+ top: number;
+ mapSwitch: "flex" | "none";
+};
+
+export const MapsButton: FC = ({ onPress, top, mapSwitch }) => {
+ const styles: TouchableOpacityProps["style"] = {
+ position: "absolute",
+ top,
+ left: 10,
+ width: 50,
+ height: 50,
+ backgroundColor: "#0099CC",
+ borderColor: "white",
+ borderStyle: "solid",
+ borderWidth: 1,
+ borderRadius: 50,
+ alignContent: "center",
+ alignSelf: "center",
+ alignItems: "center",
+ display: mapSwitch,
+ };
+ return (
+
+
+
+
+
+ );
+};
diff --git a/components/TrainMenu/UsefulBox.tsx b/components/TrainMenu/UsefulBox.tsx
new file mode 100644
index 0000000..0acdc2b
--- /dev/null
+++ b/components/TrainMenu/UsefulBox.tsx
@@ -0,0 +1,32 @@
+import React, { FC } from "react";
+import { Text, TouchableOpacity } from "react-native";
+import { MaterialCommunityIcons } from "@expo/vector-icons";
+
+type Props = {
+ icon: keyof typeof MaterialCommunityIcons.glyphMap;
+ backgroundColor: string;
+ flex: number;
+ onPressButton: () => void;
+ children: string;
+};
+
+export const UsefulBox: FC = (props) => {
+ const { icon, backgroundColor, flex, onPressButton, children } = props;
+ return (
+
+
+
+ {children}
+
+
+ );
+};
diff --git a/components/atom/BigButton.tsx b/components/atom/BigButton.tsx
new file mode 100644
index 0000000..a014fee
--- /dev/null
+++ b/components/atom/BigButton.tsx
@@ -0,0 +1,41 @@
+import React, { FC } from "react";
+import {
+ Text,
+ TextStyle,
+ TouchableOpacity,
+ View,
+ ViewStyle,
+} from "react-native";
+
+type Props = {
+ onPress: () => void;
+ string: string;
+ style?: ViewStyle;
+ tS?: TextStyle;
+ children?: any;
+};
+export const BigButton: FC = (props) => {
+ const { onPress, string, style, tS, children } = props;
+ return (
+
+
+ {children}
+
+ {string}
+
+
+
+ );
+};
diff --git a/components/custom-train-data.js b/components/custom-train-data.ts
similarity index 99%
rename from components/custom-train-data.js
rename to components/custom-train-data.ts
index c9e0349..71ba164 100644
--- a/components/custom-train-data.js
+++ b/components/custom-train-data.ts
@@ -1,4 +1,4 @@
-export const customTrainDataDetector = (TrainNumber) => {
+export const customTrainDataDetector = (TrainNumber: string) => {
switch (TrainNumber) {
//しおかぜメイン
//8000 ノーマル
@@ -627,7 +627,7 @@ export const customTrainDataDetector = (TrainNumber) => {
break;
}
};
-export const getJRF = (num) => {
+export const getJRF = (num: string) => {
switch (num) {
case "71":
return "東京(タ)→高松(タ)\\n";
@@ -657,7 +657,6 @@ export const getJRF = (num) => {
case "9070":
return "臨時貨物\\n";
default:
- JRF = true;
return null;
}
};
diff --git a/components/news.js b/components/news.js
deleted file mode 100644
index 34fef7b..0000000
--- a/components/news.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from "react";
-import { View, Text, TouchableOpacity } from "react-native";
-import { WebView } from "react-native-webview";
-import StatusbarDetect from "../StatusbarDetect";
-import { AS } from "../storageControl";
-import { news } from "../config/newsUpdate";
-import { useNavigation } from "@react-navigation/native";
-var Status = StatusbarDetect();
-export default function News() {
- const { navigate } = useNavigation();
- return (
-
-
- {
- AS.setItem("status", news);
- navigate("Apps");
- }}
- >
-
-
- 更新情報を閉じる
-
-
-
-
- );
-}
diff --git a/components/news.tsx b/components/news.tsx
new file mode 100644
index 0000000..cd5c09a
--- /dev/null
+++ b/components/news.tsx
@@ -0,0 +1,30 @@
+import React, { FC } from "react";
+import { View } from "react-native";
+import { WebView } from "react-native-webview";
+import { AS } from "../storageControl";
+import { news } from "../config/newsUpdate";
+import { useNavigation } from "@react-navigation/native";
+import { BigButton } from "./atom/BigButton";
+const News: FC = () => {
+ const { navigate } = useNavigation();
+ return (
+
+
+ {
+ AS.setItem("status", news);
+ navigate("Apps");
+ }}
+ string="更新情報を閉じる"
+ />
+
+ );
+};
+export default News;
diff --git a/components/trainMenu.js b/components/trainMenu.js
index e95df18..ea00fac 100644
--- a/components/trainMenu.js
+++ b/components/trainMenu.js
@@ -1,7 +1,6 @@
-import React, { useRef, useState, useEffect } from "react";
-import { View, Text, TouchableOpacity, Linking, Platform } from "react-native";
+import React, { useRef, useState, useEffect, useLayoutEffect } from "react";
+import { View, Text, TouchableOpacity, Linking } from "react-native";
import MapView, { Marker } from "react-native-maps";
-import Constants from "expo-constants";
import { MaterialCommunityIcons, Ionicons } from "@expo/vector-icons";
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
import { useNavigation } from "@react-navigation/native";
@@ -10,6 +9,9 @@ import { stationIDPair } from "../lib/getStationList2";
import { lineListPair } from "../lib/getStationList";
import { SheetManager } from "react-native-actions-sheet";
import { useTrainMenu } from "../stateBox/useTrainMenu";
+import { MapPin } from "./TrainMenu/MapPin";
+import { UsefulBox } from "./TrainMenu/UsefulBox";
+import { MapsButton } from "./TrainMenu/MapsButton";
export default function TrainMenu({ style }) {
const { webview } = useCurrentTrain();
const mapRef = useRef();
@@ -24,8 +26,8 @@ export default function TrainMenu({ style }) {
} = useTrainMenu();
useEffect(() => {
const stationPinData = [];
- Object.keys(stationData).map((d, indexBase) => {
- stationData[d].map((D, index) => {
+ Object.keys(stationData).forEach((d, indexBase) => {
+ stationData[d].forEach((D, index) => {
if (!D.StationMap) return null;
if (selectedLine && selectedLine != d) return;
const latlng = D.StationMap.replace(
@@ -44,7 +46,7 @@ export default function TrainMenu({ style }) {
});
setStationPin(stationPinData);
}, [stationData, selectedLine]);
- useEffect(() => {
+ useLayoutEffect(() => {
mapRef.current.fitToCoordinates(
stationPin.map(({ latlng }) => ({
latitude: parseFloat(latlng[0]),
@@ -207,80 +209,4 @@ export default function TrainMenu({ style }) {
/>
);
-}
-const UsefulBox = (props) => {
- const { icon, backgroundColor, flex, onPressButton, children } = props;
- return (
-
-
-
- {children}
-
-
- );
-};
-
-const MapPin = ({ index, indexBase, latlng, D, d, navigate, webview }) => {
- return (
- {
- webview.current?.injectJavaScript(
- `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');
- document.getElementById("disp").insertAdjacentHTML("afterbegin", "");`
- );
- if (navigate) navigate("Apps");
- }}
- image={require("../assets/reccha-small.png")}
- >
- );
-};
-
-const MapsButton = ({ onPress, top, mapSwitch }) => {
- const styles = {
- touch: {
- position: "absolute",
- top,
- left: 10,
- width: 50,
- height: 50,
- backgroundColor: "#0099CC",
- borderColor: "white",
- borderStyle: "solid",
- borderWidth: 1,
- borderRadius: 50,
- alignContent: "center",
- alignSelf: "center",
- alignItems: "center",
- display: mapSwitch,
- },
- text: {
- textAlign: "center",
- width: "auto",
- height: "auto",
- textAlignVertical: "center",
- fontWeight: "bold",
- color: "white",
- },
- };
- return (
-
-
-
-
-
- );
-};
+}
\ No newline at end of file
diff --git a/components/trainbaseview.js b/components/trainbaseview.js
index dd68263..5c99a28 100644
--- a/components/trainbaseview.js
+++ b/components/trainbaseview.js
@@ -1,14 +1,9 @@
-import React, { Component, useRef } from "react";
-import {
- StatusBar,
- Platform,
- View,
- TouchableOpacity,
- Text,
-} from "react-native";
+import React, { useRef } from "react";
+import { StatusBar, Platform, View } from "react-native";
import { WebView } from "react-native-webview";
-import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
+import { MaterialCommunityIcons } from "@expo/vector-icons";
import { useNavigation } from "@react-navigation/native";
+import { BigButton } from "./atom/BigButton";
export default function TrainBase({ route }) {
const { info, from } = route.params;
@@ -38,27 +33,16 @@ export default function TrainBase({ route }) {
onMessage={(event) => {}}
/>
{(from == "LED" || from == "LED2" || from == "AllTrainIDList") && (
-
navigate(from == "AllTrainIDList" ? "AllTrainIDList" : "menu")
}
>
-
-
- 閉じる
-
-
-
+
)}
);
diff --git a/components/発車時刻表/EachData.tsx b/components/発車時刻表/EachData.tsx
new file mode 100644
index 0000000..1569ffc
--- /dev/null
+++ b/components/発車時刻表/EachData.tsx
@@ -0,0 +1,126 @@
+import React, { FC, useEffect, useState } from "react";
+import { TouchableOpacity } from "react-native";
+import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
+import { getTrainDelayStatus } from "../../lib/getTrainDelayStatus";
+import { getTrainType } from "../../lib/getTrainType";
+import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
+import { SheetManager } from "react-native-actions-sheet";
+import { Description } from "./LED_inside_Component/Description";
+import { DependTime } from "./LED_inside_Component/DependTime";
+import { LastStation } from "./LED_inside_Component/LastStation";
+import { StatusAndDelay } from "./LED_inside_Component/StatusAndDelay";
+import { TrainName } from "./LED_inside_Component/TrainName";
+
+type Props = {
+ d: {
+ train: string;
+ lastStation: string;
+ time: string;
+ };
+ trainIDSwitch: boolean;
+ trainDescriptionSwitch: boolean;
+ station: {
+ Station_JP: string;
+ };
+ customTrainDataDetector: (trainID: string) => {
+ trainName: string;
+ trainNumDistance?: number;
+ type: string;
+ info: string;
+ };
+ navigate: (screen: string, data?: any) => void;
+ openStationACFromEachTrainInfo: (station: string) => void;
+};
+export const EachData: FC = (props) => {
+ const {
+ d,
+ trainIDSwitch,
+ trainDescriptionSwitch,
+ station,
+ customTrainDataDetector,
+ navigate,
+ openStationACFromEachTrainInfo,
+ } = props;
+ const { currentTrain } = useCurrentTrain();
+ const openTrainInfo = (d: {
+ train: string;
+ lastStation: string;
+ time: string;
+ }) => {
+ let TrainNumber = "";
+ if (train.trainNumDistance != undefined) {
+ const timeInfo =
+ parseInt(d.train.replace("M", "").replace("D", "")) -
+ train.trainNumDistance;
+ TrainNumber = timeInfo + "号";
+ }
+ const payload = {
+ data: {
+ trainNum: d.train,
+ limited: `${getTrainType(train.type).data}:${
+ train.trainName
+ }${TrainNumber}`,
+ },
+ navigate,
+ openStationACFromEachTrainInfo,
+ from: "LED",
+ };
+ SheetManager.show("EachTrainInfo", {
+ payload,
+ });
+ };
+ const [train, setTrain] = useState(customTrainDataDetector(d.train));
+ useEffect(() => {
+ setTrain(customTrainDataDetector(d.train));
+ }, [currentTrain, d.train, trainDescriptionSwitch]);
+ // 土讃線複数存在対策
+ const currentTrainData = checkDuplicateTrainData(
+ currentTrain.filter((a) => a.num == d.train)
+ );
+ const trainDelayStatus = `${getTrainDelayStatus(
+ currentTrainData,
+ station.Station_JP
+ )}`;
+ const trainPositionText = currentTrainData?.Pos.match("~")
+ ? `現在地:${
+ currentTrainData?.Pos.replace("(下り)", "")
+ .replace("(上り)", "")
+ .split("~")[currentTrainData?.Direction == 1 ? 0 : 1]
+ }→${
+ currentTrainData?.Pos.replace("(下り)", "")
+ .replace("(上り)", "")
+ .split("~")[currentTrainData?.Direction == 1 ? 1 : 0]
+ }間を走行中`
+ : `現在地:${currentTrainData?.Pos}`;
+ return (
+ <>
+ openTrainInfo(d)}
+ >
+
+
+
+
+
+ {trainDescriptionSwitch && }
+ {trainDescriptionSwitch && !!train.info && (
+
+ )}
+ >
+ );
+};
diff --git a/components/発車時刻表/LED_inside_Component/DependTime.tsx b/components/発車時刻表/LED_inside_Component/DependTime.tsx
new file mode 100644
index 0000000..ebcd55c
--- /dev/null
+++ b/components/発車時刻表/LED_inside_Component/DependTime.tsx
@@ -0,0 +1,14 @@
+import React, { FC } from "react";
+import { Text, TextStyle, View } from "react-native";
+const descriptionStyle: TextStyle = {
+ fontSize: parseInt("16%"),
+ fontWeight: "bold",
+};
+type Props = {
+ time: string;
+};
+export const DependTime: FC = ({ time }) => (
+
+ {time}
+
+);
diff --git a/components/発車時刻表/LED_inside_Component/Description.tsx b/components/発車時刻表/LED_inside_Component/Description.tsx
new file mode 100644
index 0000000..69aba13
--- /dev/null
+++ b/components/発車時刻表/LED_inside_Component/Description.tsx
@@ -0,0 +1,45 @@
+import React, { FC } from "react";
+import { Text, TextStyle, View, TouchableOpacity } from "react-native";
+
+const descriptionStyle: TextStyle = {
+ fontSize: parseInt("16%"),
+ fontWeight: "bold",
+};
+
+type Props = {
+ info: string;
+ numberOfLines?: number;
+ onClick?: () => void;
+};
+export const Description:FC = ({ info, numberOfLines = 0, onClick }) => (
+
+
+ {numberOfLines == 1 ? (
+
+ 運行情報 >{" "}
+
+ ) : (
+ >
+ )}
+
+
+ {info}
+
+
+
+);
diff --git a/components/発車時刻表/LED_inside_Component/LastStation.tsx b/components/発車時刻表/LED_inside_Component/LastStation.tsx
new file mode 100644
index 0000000..3238a0b
--- /dev/null
+++ b/components/発車時刻表/LED_inside_Component/LastStation.tsx
@@ -0,0 +1,21 @@
+import React, { FC } from "react";
+import { Text, View } from "react-native";
+
+type Props = {
+ lastStation: string;
+};
+export const LastStation: FC = ({ lastStation }) => {
+ return (
+
+ 4 ? parseInt("12%") : parseInt("16%"),
+ color: "white",
+ fontWeight: "bold",
+ }}
+ >
+ {lastStation}
+
+
+ );
+};
diff --git a/components/発車時刻表/LED_inside_Component/StatusAndDelay.tsx b/components/発車時刻表/LED_inside_Component/StatusAndDelay.tsx
new file mode 100644
index 0000000..15b3960
--- /dev/null
+++ b/components/発車時刻表/LED_inside_Component/StatusAndDelay.tsx
@@ -0,0 +1,18 @@
+import React, { FC } from "react";
+import { Text, TextStyle, View } from "react-native";
+const descriptionStyle: TextStyle = {
+ fontSize: parseInt("16%"),
+ fontWeight: "bold",
+};
+type Props = {
+ trainDelayStatus: string;
+};
+export const StatusAndDelay: FC = ({ trainDelayStatus }) => {
+ return (
+
+
+ {trainDelayStatus}
+
+
+ );
+};
diff --git a/components/発車時刻表/LED_inside_Component/TrainName.tsx b/components/発車時刻表/LED_inside_Component/TrainName.tsx
new file mode 100644
index 0000000..88e87e9
--- /dev/null
+++ b/components/発車時刻表/LED_inside_Component/TrainName.tsx
@@ -0,0 +1,33 @@
+import React, { FC } from "react";
+import { Text, View } from "react-native";
+import { getTrainType } from "../../../lib/getTrainType";
+type Props = {
+ trainName: string;
+ trainNumDistance?: number;
+ trainIDSwitch: boolean;
+ trainID: string;
+ type: string;
+};
+export const TrainName: FC = (props) => {
+ const { trainName, trainNumDistance, trainIDSwitch, trainID, type } = props;
+ const { name, color } = getTrainType(type);
+ const TrainNumber =
+ trainNumDistance != undefined
+ ? `${
+ parseInt(trainID.replace("M", "").replace("D", "")) - trainNumDistance
+ }号`
+ : "";
+ return (
+
+ 6 ? parseInt("12%") : parseInt("16%"),
+ color: color,
+ fontWeight: "bold",
+ }}
+ >
+ {trainIDSwitch ? trainID : `${name} ${trainName}${TrainNumber}`}
+
+
+ );
+};
diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js
index dd91f9d..f787522 100644
--- a/components/発車時刻表/LED_vidion.js
+++ b/components/発車時刻表/LED_vidion.js
@@ -1,18 +1,17 @@
import React, { useState, useEffect } from "react";
-import { View, Text, TouchableOpacity } from "react-native";
+import { View } from "react-native";
import { widthPercentageToDP as wp } from "react-native-responsive-screen";
import { customTrainDataDetector } from "../custom-train-data";
import { useInterval } from "../../lib/useInterval";
import { objectIsEmpty } from "../../lib/objectIsEmpty";
-import { getTrainType } from "../../lib/getTrainType";
-import { getTrainDelayStatus } from "../../lib/getTrainDelayStatus";
-import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
import { useAreaInfo } from "../../stateBox/useAreaInfo";
-import { SheetManager } from "react-native-actions-sheet";
import { AS } from "../../storageControl";
import { Footer } from "./LED_Vision_Component/Footer";
import { Header } from "./LED_Vision_Component/Header";
+import { Description } from "./LED_inside_Component/Description";
+import { EachData } from "./EachData";
+
/**
@@ -232,192 +231,3 @@ export default function LED_vision(props) {
);
}
-
-const EachData = (props) => {
- const {
- d,
- trainIDSwitch,
- trainDescriptionSwitch,
- station,
- customTrainDataDetector,
- navigate,
- openStationACFromEachTrainInfo,
- } = props;
- const { currentTrain } = useCurrentTrain();
- const openTrainInfo = (d) => {
- let TrainNumber = "";
- if (train.trainNumDistance != undefined) {
- const timeInfo =
- parseInt(d.train.replace("M", "").replace("D", "")) -
- train.trainNumDistance;
- TrainNumber = timeInfo + "号";
- }
- const payload = {
- data: {
- trainNum: d.train,
- limited: `${getTrainType(train.type).data}:${
- train.trainName
- }${TrainNumber}`,
- },
- navigate,
- openStationACFromEachTrainInfo,
- from: "LED",
- };
- SheetManager.show("EachTrainInfo", {
- payload,
- });
- };
- const [train, setTrain] = useState(customTrainDataDetector(d.train));
- useEffect(() => {
- setTrain(customTrainDataDetector(d.train));
- }, [currentTrain, d.train, trainDescriptionSwitch]);
- // 土讃線複数存在対策
- const currentTrainData = checkDuplicateTrainData(
- currentTrain.filter((a) => a.num == d.train)
- );
- const trainDelayStatus = getTrainDelayStatus(
- currentTrainData,
- station.Station_JP
- );
- const trainPositionText = currentTrainData?.Pos.match("~")
- ? `現在地:${
- currentTrainData?.Pos.replace("(下り)", "")
- .replace("(上り)", "")
- .split("~")[currentTrainData?.Direction == 1 ? 0 : 1]
- }→${
- currentTrainData?.Pos.replace("(下り)", "")
- .replace("(上り)", "")
- .split("~")[currentTrainData?.Direction == 1 ? 1 : 0]
- }間を走行中`
- : `現在地:${currentTrainData?.Pos}`;
- return (
- <>
- openTrainInfo(d)}
- >
-
-
-
-
-
- {trainDescriptionSwitch && }
- {trainDescriptionSwitch && !!train.info && (
-
- )}
- >
- );
-};
-
-const TrainName = ({
- trainName,
- trainNumDistance,
- trainIDSwitch,
- trainID,
- type,
-}) => {
- const { name, color } = getTrainType(type);
- let TrainNumber =
- trainNumDistance != undefined
- ? `${
- parseInt(trainID.replace("M", "").replace("D", "")) - trainNumDistance
- }号`
- : "";
- return (
-
- 6 ? parseInt("12%") : parseInt("16%"),
- color: color,
- fontWeight: "bold",
- }}
- >
- {trainIDSwitch ? trainID : `${name} ${trainName}${TrainNumber}`}
-
-
- );
-};
-
-const LastStation = ({ lastStation }) => {
- return (
-
- 4 ? parseInt("12%") : parseInt("16%"),
- color: "white",
- fontWeight: "bold",
- }}
- >
- {lastStation}
-
-
- );
-};
-
-const descriptionStyle = {
- fontSize: parseInt("16%"),
- fontWeight: "bold",
-};
-
-const DependTime = ({ time }) => (
-
- {time}
-
-);
-
-const StatusAndDelay = ({ trainDelayStatus }) => {
- return (
-
-
- {trainDelayStatus}
-
-
- );
-};
-
-const Description = ({ info, numberOfLines = 0, onClick }) => (
-
-
- {numberOfLines == 1 ? (
-
- 運行情報 >{" "}
-
- ) : (
- >
- )}
-
-
- {info}
-
-
-
-);
diff --git a/components/駅名表/Sign.js b/components/駅名表/Sign.js
index 2d959f5..7cd1723 100644
--- a/components/駅名表/Sign.js
+++ b/components/駅名表/Sign.js
@@ -12,13 +12,13 @@ import { StationNumberMaker } from "./StationNumberMaker";
import { NextPreStationLine } from "./NextPreStationLine";
import { LottieDelayView } from "./LottieDelayView";
import { AddressText } from "./AddressText";
-import { useTrainMenu } from "../../stateBox/useTrainMenu";
+import { useStationList } from "../../stateBox/useStationList";
export default function Sign(props) {
const { currentStation, oP, oLP, isCurrentStation = false } = props;
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
const [nexPrePosition, setNexPrePosition] = useState(0);
- const { originalStationList } = useTrainMenu();
+ const { originalStationList } = useStationList();
const [preStation, setPreStation] = useState();
const [nexStation, setNexStation] = useState();
diff --git a/config/newsUpdate.js b/config/newsUpdate.ts
similarity index 100%
rename from config/newsUpdate.js
rename to config/newsUpdate.ts
diff --git a/howto.js b/howto.js
index e36d9a8..7bf9dd2 100644
--- a/howto.js
+++ b/howto.js
@@ -1,7 +1,7 @@
-const WEBVIEW = "WEBVIEW";
-import React, { Component } from "react";
-import { StatusBar, View, TouchableOpacity, Text } from "react-native";
+import React from "react";
+import { View } from "react-native";
import { WebView } from "react-native-webview";
+import { BigButton } from "./components/atom/BigButton";
export default ({ navigation: { navigate }, route }) => {
const { info, goTo, useShow } = route.params;
const onExit = () => {
@@ -9,30 +9,13 @@ export default ({ navigation: { navigate }, route }) => {
useShow && useShow();
};
return (
-
+
-
-
-
- 閉じる
-
-
-
+
);
};
-const styles = {
- View: { height: "100%", backgroundColor: "#0099CC" },
- touch: {
- padding: 10,
- flexDirection: "row",
- borderColor: "white",
- borderWidth: 1,
- margin: 10,
- borderRadius: 5,
- alignItems: "center",
- },
-};
+const styles = { height: "100%", backgroundColor: "#0099CC" };
diff --git a/lib/providerTreeProvider.js b/lib/providerTreeProvider.js
index e6fdd5f..f759cc7 100644
--- a/lib/providerTreeProvider.js
+++ b/lib/providerTreeProvider.js
@@ -17,7 +17,7 @@ export const buildProvidersTree = (providers) => {
return buildProvidersTree([
({ children }) => (
- {children}
+
),
...providers,
diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts
index c5a5177..4f4c922 100644
--- a/lib/webViewInjectjavascript.ts
+++ b/lib/webViewInjectjavascript.ts
@@ -1,5 +1,3 @@
-import { getJRF } from "../components/custom-train-data";
-
type InjectJavascriptData = (
a: string,
b: string,
diff --git a/menu.js b/menu.js
index d410287..066a74b 100644
--- a/menu.js
+++ b/menu.js
@@ -23,19 +23,19 @@ import { TitleBar } from "./components/Menu/TitleBar";
import { FixedContentBottom } from "./components/Menu/FixedContentBottom";
import { UsefulBox } from "./components/atom/UsefulBox";
-import { getStationList, lineList } from "./lib/getStationList";
+import { lineList } from "./lib/getStationList";
import useInterval from "./lib/useInterval";
import { HeaderConfig } from "./lib/HeaderConfig";
import { useFavoriteStation } from "./stateBox/useFavoriteStation";
import { SheetManager } from "react-native-actions-sheet";
import { useTrainDelayData } from "./stateBox/useTrainDelayData";
import { useNavigation } from "@react-navigation/native";
-import { useTrainMenu } from "./stateBox/useTrainMenu";
+import { useStationList } from "./stateBox/useStationList";
export default function Menu({ getCurrentTrain }) {
const { navigate } = useNavigation();
const { favoriteStation } = useFavoriteStation();
- const { originalStationList } = useTrainMenu();
+ const { originalStationList } = useStationList();
//位置情報
const [locationStatus, setLocationStatus] = useState(null);
@@ -137,6 +137,21 @@ export default function Menu({ getCurrentTrain }) {
setTrainDiagram(trainList);
});
}, []);
+
+ const oPSign = () => {
+ const payload = {
+ currentStation:
+ originalStationList &&
+ allStationData.length != 0 &&
+ allStationData[selectedCurrentStation],
+ navigate: navigate,
+ goTo: "menu",
+ useShow: () => SheetManager.show("StationDetailView", { payload }),
+ onExit: () => SheetManager.hide("StationDetailView"),
+ };
+ SheetManager.show("StationDetailView", { payload });
+ };
+
return (
{
- setSelectedCurrentStation(d);
- }}
+ onSnapToItem={setSelectedCurrentStation}
renderItem={({ item }) => {
return (
{
- const payload = {
- currentStation:
- originalStationList &&
- allStationData.length != 0 &&
- allStationData[selectedCurrentStation],
- navigate: navigate,
- goTo: "menu",
- useShow: () =>
- SheetManager.show("StationDetailView", {
- payload,
- }),
- onExit: () => {
- SheetManager.hide("StationDetailView");
- },
- };
- SheetManager.show("StationDetailView", {
- payload,
- });
- }}
+ oP={oPSign}
/>
);
@@ -260,12 +254,8 @@ const TopMenuButton = () => {
};
const JRSTraInfoBox = () => {
- const {
- getTime,
- delayData,
- loadingDelayData,
- setLoadingDelayData,
- } = useTrainDelayData();
+ const { getTime, delayData, loadingDelayData, setLoadingDelayData } =
+ useTrainDelayData();
const styles = {
touch: {
backgroundColor: "#0099CC",
diff --git a/stateBox/useAllTrainDiagram.js b/stateBox/useAllTrainDiagram.js
index a792222..f6c643c 100644
--- a/stateBox/useAllTrainDiagram.js
+++ b/stateBox/useAllTrainDiagram.js
@@ -6,12 +6,15 @@ const initialState = {
const AllTrainDiagramContext = createContext(initialState);
-export const useAllTrainDiagram = () => {
- return useContext(AllTrainDiagramContext);
-};
+export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
export const AllTrainDiagramProvider = ({ children }) => {
const [allTrainDiagram, setAllTrainDiagram] = useState();
+ const [keyList, setKeyList] = useState(); // 第二要素
+ useEffect(
+ () => allTrainDiagram && setKeyList(Object.keys(allTrainDiagram)),
+ [allTrainDiagram]
+ );
const customData = {};
useEffect(() => {
fetch(
@@ -55,7 +58,7 @@ export const AllTrainDiagramProvider = ({ children }) => {
return (
{children}
diff --git a/stateBox/useStationList.tsx b/stateBox/useStationList.tsx
index 2f66c81..d947796 100644
--- a/stateBox/useStationList.tsx
+++ b/stateBox/useStationList.tsx
@@ -3,10 +3,8 @@ import React, {
useContext,
useState,
useEffect,
- useLayoutEffect,
FC,
} from "react";
-import { AS } from "../storageControl";
import { getStationList } from "../lib/getStationList";
type initialStateType = {
@@ -38,12 +36,11 @@ export const StationListProvider: FC = ({ children }) => {
Object.keys(originalStationList).forEach((key) => {
originalStationList[key].forEach((station) => {
if (station.Station_JP === name) {
- if(!!station.jslodApi)returnArray.push(station);
+ if (!!station.jslodApi) returnArray.push(station);
}
});
});
return returnArray;
-
};
return (
diff --git a/stateBox/useTrainMenu.js b/stateBox/useTrainMenu.js
index 5e1c10b..fe66c3b 100644
--- a/stateBox/useTrainMenu.js
+++ b/stateBox/useTrainMenu.js
@@ -2,7 +2,6 @@ import React, { createContext, useContext, useState, useEffect } from "react";
import { AS, ASCore } from "../storageControl";
-import { getStationList } from "../lib/getStationList";
import { getStationList2 } from "../lib/getStationList2";
import { injectJavascriptData } from "../lib/webViewInjectjavascript";
@@ -27,8 +26,6 @@ const initialState = {
trainData: undefined,
},
setTrainInfo: () => {},
- originalStationList: [],
- setOriginalStationList: () => {},
trainMenu: "true",
setTrainMenu: () => {},
injectJavascript: "",
@@ -61,9 +58,7 @@ export const TrainMenuProvider = ({ children }) => {
});
//駅情報画面用
- const [originalStationList, setOriginalStationList] = useState([]);
const [trainMenu, setTrainMenu] = useState("true");
- useEffect(() => getStationList().then(setOriginalStationList), []);
//地図表示テキスト
const injectJavascript = injectJavascriptData(
@@ -112,8 +107,6 @@ export const TrainMenuProvider = ({ children }) => {
setLoadError,
trainInfo,
setTrainInfo,
- originalStationList,
- setOriginalStationList,
trainMenu,
setTrainMenu,
injectJavascript,
diff --git a/storageConfig.js b/storageConfig.ts
similarity index 100%
rename from storageConfig.js
rename to storageConfig.ts
diff --git a/storageControl.js b/storageControl.ts
similarity index 65%
rename from storageControl.js
rename to storageControl.ts
index 294f926..a08cfd4 100644
--- a/storageControl.js
+++ b/storageControl.ts
@@ -2,8 +2,8 @@ import storage from "./storageConfig";
import * as Updates from "expo-updates";
export const AS = {
- getItem: (key) => storage.load({ key }),
- setItem: (key, data) =>
+ getItem: (key: string) => storage.load({ key }),
+ setItem: (key: string, data: any) =>
storage.save({
key, // Note: Do not use underscore("_") in key!
data,
@@ -12,9 +12,12 @@ export const AS = {
// if set to null, then it will never expire.
expires: null,
}),
- removeItem: (key) => storage.remove({ key }),
+ removeItem: (key: string) => storage.remove({ key }),
};
-export const ASCore = ({ k, s, d, u }) =>
+
+type ASCoreProps = (s: { k: any; s: any; d: any; u: any }) => Promise;
+
+export const ASCore: ASCoreProps = ({ k, s, d, u }) =>
AS.getItem(k)
.then((d) =>
d ? s(d) : AS.setItem(k, d).then(() => u && Updates.reloadAsync())