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", +};