diff --git a/components/Settings/SettingTopPage.js b/components/Settings/SettingTopPage.js
index ecd24d4..8ebd75a 100644
--- a/components/Settings/SettingTopPage.js
+++ b/components/Settings/SettingTopPage.js
@@ -12,7 +12,7 @@ import * as Updates from "expo-updates";
import { useWindowDimensions } from "react-native";
import { ListItem } from "native-base";
-const versionCode = "5.1.1";
+const versionCode = "5.2";
export const SettingTopPage = ({ navigate, testNFC, updateAndReload }) => {
const { width } = useWindowDimensions();
diff --git a/components/trainMenu.js b/components/trainMenu.js
index 13876a0..ebba80f 100644
--- a/components/trainMenu.js
+++ b/components/trainMenu.js
@@ -1,45 +1,71 @@
-import React, { useRef, useMemo } from "react";
+import React, { useRef, useState, useEffect } from "react";
import { View, Text, TouchableOpacity, Linking } from "react-native";
import MapView, { Marker } from "react-native-maps";
import { MaterialCommunityIcons } from "@expo/vector-icons";
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
import { useNavigation } from "@react-navigation/native";
+import lineColorList from "../assets/originData/lineColorList";
+import { stationIDPair } from "../lib/getStationList2";
+import { lineListPair } from "../lib/getStationList";
export default function TrainMenu({ stationData, style }) {
const { webview } = useCurrentTrain();
const mapRef = useRef();
const { navigate } = useNavigation();
- const stationPin = useMemo(
- () =>
- Object.keys(stationData).map((d, indexBase) =>
- stationData[d].map((D, index) => {
- if (!D.StationMap) return null;
- const latlng = D.StationMap.replace(
- "https://www.google.co.jp/maps/place/",
- ""
- ).split(",");
- if (latlng.length == 0) return null;
- return (
- {
- webview.current?.injectJavaScript(
- `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');
- setStrings();`
- );
- if (navigate) navigate("Apps");
- }}
- >
- );
- })
- ),
- [stationData]
- );
+ const [stationPin, setStationPin] = useState([]);
+ const [selectedLine, setSelectedLine] = useState(undefined);
+ useEffect(() => {
+ const stationPinData = [];
+ Object.keys(stationData).map((d, indexBase) =>
+ stationData[d].map((D, index) => {
+ if (!D.StationMap) return null;
+ if (selectedLine && selectedLine != d) return;
+ const latlng = D.StationMap.replace(
+ "https://www.google.co.jp/maps/place/",
+ ""
+ ).split(",");
+ if (latlng.length == 0) return null;
+ stationPinData.push({ D, d, latlng, indexBase: 0, index });
+ })
+ );
+ setStationPin(stationPinData);
+ }, [stationData, selectedLine]);
+ useEffect(() => {
+ mapRef.current.fitToCoordinates(
+ stationPin.map(({ latlng }) => ({
+ latitude: parseFloat(latlng[0]),
+ longitude: parseFloat(latlng[1]),
+ })),
+ { edgePadding: { top: 100, bottom: 50, left: 50, right: 50 } } // Add margin values here
+ );
+ }, [stationPin]);
return (
+ {selectedLine && (
+
+
+ {selectedLine ? lineListPair[stationIDPair[selectedLine]] : "全線"}
+
+
+ )}
+
- {stationPin}
+ {stationPin.map(({ D, d, latlng, indexBase, index }) => (
+
+ ))}
+
+
+
+ 路線記号からフィルタリング
+
+ {Object.keys(stationData).map((d) => (
+ setSelectedLine(selectedLine == d ? undefined : d)}
+ >
+
+ {stationIDPair[d]}
+
+
+ ))}
+
+
{navigate && (
{
);
};
+
+const MapPin = ({ index, indexBase, latlng, D, d, navigate, webview }) => {
+ return (
+ {
+ webview.current?.injectJavaScript(
+ `MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');
+ setStrings();`
+ );
+ if (navigate) navigate("Apps");
+ }}
+ >
+ );
+};
diff --git a/lib/eachTrainInfoCoreLib/searchSpecialTrain.js b/lib/eachTrainInfoCoreLib/searchSpecialTrain.js
index ec0e53d..39804cf 100644
--- a/lib/eachTrainInfoCoreLib/searchSpecialTrain.js
+++ b/lib/eachTrainInfoCoreLib/searchSpecialTrain.js
@@ -10,4 +10,17 @@ export const searchSpecialTrain = (trainNum, trainList) => {
};
if (search("D")) return searchBase + "D";
if (search("M")) return searchBase + "M";
+
+ //増結いしづちの場合
+ const baseStr = trainNum
+ .replace("D", "")
+ .replace("M", "")
+ .replace("S", "")
+ .replace("X", "");
+ const baseNum = parseInt(baseStr);
+ if (9000 < baseNum && baseNum < 9047) {
+ //いしづちの1001M-1046Mが9000番台になっている場合に発動
+ const TD = trainList[`${baseNum - 8000}M`];
+ if (TD) return `${baseNum - 8000}M`;
+ }
};
diff --git a/lib/getStationList.js b/lib/getStationList.js
index f1314de..06bb601 100644
--- a/lib/getStationList.js
+++ b/lib/getStationList.js
@@ -29,6 +29,17 @@ export const lineList = [
"鳴門線(池谷-鳴門間)[N]",
"瀬戸大橋線(宇多津-児島間)[M]",
];
+export const lineListPair = {
+ Y: "予讃線(高松-松山間)[Y]",
+ U: "予讃線(松山-宇和島間)[U]",
+ S: "予讃線/愛ある伊予灘線(向井原-伊予大洲間)[S]",
+ D: "土讃線(多度津-高知間)[D]",
+ K: "土讃線(高知-窪川間)[K]",
+ T: "高徳線(高松-徳島間)[T]",
+ B: "徳島線(徳島-阿波池田)[B]",
+ N: "鳴門線(池谷-鳴門間)[N]",
+ M: "瀬戸大橋線(宇多津-児島間)[M]",
+};
export const getStationList = async (props) => {
if (status) return status;
diff --git a/lib/getStationList2.js b/lib/getStationList2.js
index a8b392b..11397b8 100644
--- a/lib/getStationList2.js
+++ b/lib/getStationList2.js
@@ -1,4 +1,3 @@
-let status = undefined;
import yosan from "../assets/originData/yosan";
import uwajima from "../assets/originData/uwajima";
import uwajima2 from "../assets/originData/uwajima2";
@@ -21,3 +20,15 @@ export const getStationList2 = async (props) => {
seto,
};
};
+
+export const stationIDPair = {
+ yosan: "Y",
+ uwajima: "U",
+ uwajima2: "S",
+ dosan: "D",
+ dosan2: "K",
+ koutoku: "T",
+ tokushima: "B",
+ naruto: "N",
+ seto: "M",
+};