Merge commit '9fdc717d7cf9e04c42843f838e3394438c991460' into feature/new-setting-system

This commit is contained in:
harukin-expo-dev-env 2024-03-26 12:49:19 +00:00
commit 5fc1c57806
5 changed files with 70 additions and 39 deletions

8
App.js
View File

@ -57,10 +57,10 @@ export default function App() {
); );
} }
export function AppContainer() { export function AppContainer() {
const { areaInfo, setAreaInfo } = useAreaInfo(); const { areaInfo } = useAreaInfo();
const navigationRef = React.useRef();
return ( return (
<NavigationContainer name="Root" style={{ flex: 1 }}> <NavigationContainer name="Root" style={{ flex: 1 }} ref={navigationRef}>
<Tab.Navigator <Tab.Navigator
tabBarOptions={{ keyboardHidesTabBar: Platform.OS === "android" }} tabBarOptions={{ keyboardHidesTabBar: Platform.OS === "android" }}
> >
@ -73,7 +73,7 @@ export function AppContainer() {
tabBarIcon: initIcon("barchart", "AntDesign"), tabBarIcon: initIcon("barchart", "AntDesign"),
}} }}
> >
{(props) => <Top {...props} />} {(props) => <Top {...props} navigationRef={navigationRef} />}
</Tab.Screen> </Tab.Screen>
<Tab.Screen <Tab.Screen
name="menuPage" name="menuPage"

30
Top.js
View File

@ -13,9 +13,9 @@ import FavoriteList from "./components/FavoriteList.js";
import { useFavoriteStation } from "./stateBox/useFavoriteStation"; import { useFavoriteStation } from "./stateBox/useFavoriteStation";
import { optionData } from "./lib/stackOption.js"; import { optionData } from "./lib/stackOption.js";
import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; import { useCurrentTrain } from "./stateBox/useCurrentTrain.js";
import { AS } from "./storageControl.js";
const Stack = createStackNavigator(); const Stack = createStackNavigator();
export const Top = ({ navigation }) => { export const Top = ({ navigation, navigationRef }) => {
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
const { webview, getCurrentTrain } = useCurrentTrain(); const { webview, getCurrentTrain } = useCurrentTrain();
//地図用 //地図用
@ -24,14 +24,36 @@ export const Top = ({ navigation }) => {
useEffect(() => { useEffect(() => {
getStationList2().then(setMapsStationData); getStationList2().then(setMapsStationData);
}, []); }, []);
const [mapSwitch, setMapSwitch] = React.useState("false");
const ASCore = ({ k, s, d }) =>
AS.getItem(k)
.then((d) => (d ? s(d) : AS.setItem(k, d)))
.catch(() => AS.setItem(k, d));
useEffect(() => {
//地図スイッチ
ASCore({ k: "mapSwitch", s: setMapSwitch, d: "false" });
}, []);
useEffect(() => { useEffect(() => {
const unsubscribe = navigation.addListener("tabLongPress", (e) => { const unsubscribe = navigation.addListener("tabLongPress", () => {
navigation.navigate("favoriteList"); navigation.navigate("favoriteList");
}); });
return unsubscribe; return unsubscribe;
}, [navigation]); }, [navigation]);
useEffect(() => {
const unsubscribe = navigation.addListener("tabPress", () => {
if (navigationRef.current?.getCurrentRoute().name == "Apps") {
if (mapSwitch == "true") {
navigation.navigate("trainMenu");
} else {
webview.current?.injectJavaScript(`AccordionClassEvent()`);
}
} else {
navigation.navigate("Apps");
}
});
return unsubscribe;
}, [navigation, mapSwitch]);
return ( return (
<Stack.Navigator> <Stack.Navigator>

View File

@ -42,13 +42,16 @@ export const TrainDataView = ({
if (x.StationNumber == currentPosition[0]) if (x.StationNumber == currentPosition[0])
test.push({ line: d, station: x }); test.push({ line: d, station: x });
}); });
if(currentPosition[0]== "M12"){ if (currentPosition[0] == "M12") {
test.push({ line: "seto", station: {Station_JP: "児島", MyStation: "0"}}); test.push({
line: "seto",
station: { Station_JP: "児島", MyStation: "0" },
});
} }
}); });
if (!test.length) return; if (!test.length) return;
webview.current?.injectJavaScript( webview.current?.injectJavaScript(
`MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}')` `MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}');setStrings();`
); );
navigate("Apps"); navigate("Apps");
SheetManager.hide("EachTrainInfo"); SheetManager.hide("EachTrainInfo");

View File

@ -39,7 +39,8 @@ export default function FavoriteList({ navigation, webview, stationData }) {
const lineName = getStationLine(currentStation[0]); const lineName = getStationLine(currentStation[0]);
webview.current?.injectJavaScript( webview.current?.injectJavaScript(
`MoveDisplayStation('${lineName}_${currentStation[0].MyStation}_${currentStation[0].Station_JP}')` `MoveDisplayStation('${lineName}_${currentStation[0].MyStation}_${currentStation[0].Station_JP}');
setStrings();`
); );
navigate("Apps"); navigate("Apps");
}} }}

View File

@ -1,4 +1,4 @@
import React, { useRef } from "react"; import React, { useRef, useMemo } from "react";
import { View, Text, TouchableOpacity, Linking } from "react-native"; import { View, Text, TouchableOpacity, Linking } from "react-native";
import MapView, { Marker } from "react-native-maps"; import MapView, { Marker } from "react-native-maps";
import { MaterialCommunityIcons } from "@expo/vector-icons"; import { MaterialCommunityIcons } from "@expo/vector-icons";
@ -9,6 +9,36 @@ export default function TrainMenu({
style, style,
}) { }) {
const mapRef = useRef(); const mapRef = useRef();
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 (
<Marker
key={index + indexBase}
coordinate={{
latitude: parseFloat(latlng[0]),
longitude: parseFloat(latlng[1]),
}}
onPress={() => {
webview.current?.injectJavaScript(
`MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');
setStrings();`
);
if (navigate) navigate("Apps");
}}
></Marker>
);
})
),
[stationData]
);
return ( return (
<View style={{ height: "100%", backgroundColor: "#0099CC", ...style }}> <View style={{ height: "100%", backgroundColor: "#0099CC", ...style }}>
<MapView <MapView
@ -27,32 +57,7 @@ export default function TrainMenu({
longitudeDelta: 1.8, longitudeDelta: 1.8,
}} }}
> >
{stationData && {stationPin}
Object.keys(stationData).map((d) =>
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 (
<Marker
key={index}
coordinate={{
latitude: parseFloat(latlng[0]),
longitude: parseFloat(latlng[1]),
}}
onPress={() => {
webview.current?.injectJavaScript(
`MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}')`
);
if (navigate) navigate("Apps");
}}
></Marker>
);
})
)}
</MapView> </MapView>
{navigate && ( {navigate && (
<View style={{ flexDirection: "row" }}> <View style={{ flexDirection: "row" }}>