位置情報と地図フィルタリング機能の協調化

This commit is contained in:
harukin-expo-dev-env 2024-05-30 13:09:08 +00:00
parent 4194a83c8e
commit d07c05e523
4 changed files with 48 additions and 12 deletions

View File

@ -39,7 +39,7 @@ export default function Apps({ stationData }) {
const { favoriteStation } = useFavoriteStation(); const { favoriteStation } = useFavoriteStation();
const { isLandscape, setIsLandscape } = useDeviceOrientationChange(); const { isLandscape, setIsLandscape } = useDeviceOrientationChange();
const handleLayout = () => {}; const handleLayout = () => {};
const { setSelectedLine } = useTrainMenu(); const { setSelectedLine, setInjectJavaScript } = useTrainMenu();
//画面表示関連 //画面表示関連
const [iconSetting, setIconSetting] = useState(undefined); const [iconSetting, setIconSetting] = useState(undefined);
@ -332,7 +332,10 @@ export default function Apps({ stationData }) {
)} )}
{isLandscape || ( {isLandscape || (
<MapsButton <MapsButton
onPress={() => navigate("trainMenu", { webview })} onPress={() => {
setInjectJavaScript("");
navigate("trainMenu", { webview });
}}
top={Platform.OS == "ios" ? Constants.statusBarHeight : 0} top={Platform.OS == "ios" ? Constants.statusBarHeight : 0}
mapSwitch={mapSwitch == "true" ? "flex" : "none"} mapSwitch={mapSwitch == "true" ? "flex" : "none"}
/> />

18
Top.js
View File

@ -17,12 +17,17 @@ import { AS } from "./storageControl.js";
import { useTrainMenu } from "./stateBox/useTrainMenu"; import { useTrainMenu } from "./stateBox/useTrainMenu";
const Stack = createStackNavigator(); const Stack = createStackNavigator();
export const Top = ({ navigationRef }) => { export const Top = ({ navigationRef }) => {
const { webview, getCurrentTrain } = useCurrentTrain(); const { webview } = useCurrentTrain();
const navigation = useNavigation(); const navigation = useNavigation();
const { navigate, addListener } = navigation; const { navigate, addListener } = navigation;
//地図用 //地図用
const { mapsStationData, setMapsStationData } = useTrainMenu(); const {
mapsStationData,
setMapsStationData,
injectJavaScript,
setInjectJavaScript,
} = useTrainMenu();
useEffect(() => { useEffect(() => {
getStationList2().then(setMapsStationData); getStationList2().then(setMapsStationData);
@ -48,15 +53,20 @@ export const Top = ({ navigationRef }) => {
if (navigationRef.current?.getCurrentRoute().name == "Apps") { if (navigationRef.current?.getCurrentRoute().name == "Apps") {
if (mapSwitch == "true") { if (mapSwitch == "true") {
navigation.navigate("trainMenu"); navigation.navigate("trainMenu");
setInjectJavaScript("");
} else { } else {
webview.current?.injectJavaScript(`AccordionClassEvent()`); webview.current?.injectJavaScript(`AccordionClassEvent()`);
} }
} else { } else {
if (mapSwitch == "true") {
if (injectJavaScript)
webview.current?.injectJavaScript(injectJavaScript);
}
navigation.navigate("Apps"); navigation.navigate("Apps");
} }
}); });
return unsubscribe; return unsubscribe;
}, [navigation, mapSwitch]); }, [navigation, mapSwitch, injectJavaScript]);
return ( return (
<Stack.Navigator> <Stack.Navigator>
@ -85,7 +95,7 @@ export const Top = ({ navigationRef }) => {
<Stack.Screen <Stack.Screen
name="trainMenu" name="trainMenu"
options={optionData} options={optionData}
children={() => <TrainMenu stationData={mapsStationData} />} children={() => <TrainMenu />}
/> />
<Stack.Screen <Stack.Screen

View File

@ -10,15 +10,21 @@ import { stationIDPair } from "../lib/getStationList2";
import { lineListPair } from "../lib/getStationList"; import { lineListPair } from "../lib/getStationList";
import { SheetManager } from "react-native-actions-sheet"; import { SheetManager } from "react-native-actions-sheet";
import { useTrainMenu } from "../stateBox/useTrainMenu"; import { useTrainMenu } from "../stateBox/useTrainMenu";
export default function TrainMenu({ stationData, style }) { export default function TrainMenu({ style }) {
const { webview } = useCurrentTrain(); const { webview } = useCurrentTrain();
const mapRef = useRef(); const mapRef = useRef();
const { navigate } = useNavigation(); const { navigate } = useNavigation();
const [stationPin, setStationPin] = useState([]); const [stationPin, setStationPin] = useState([]);
const { selectedLine, setSelectedLine } = useTrainMenu(); const {
selectedLine,
setSelectedLine,
injectJavaScript,
setInjectJavaScript,
mapsStationData: stationData,
} = useTrainMenu();
useEffect(() => { useEffect(() => {
const stationPinData = []; const stationPinData = [];
Object.keys(stationData).map((d, indexBase) => Object.keys(stationData).map((d, indexBase) => {
stationData[d].map((D, index) => { stationData[d].map((D, index) => {
if (!D.StationMap) return null; if (!D.StationMap) return null;
if (selectedLine && selectedLine != d) return; if (selectedLine && selectedLine != d) return;
@ -27,9 +33,14 @@ export default function TrainMenu({ stationData, style }) {
"" ""
).split(","); ).split(",");
if (latlng.length == 0) return null; if (latlng.length == 0) return null;
if (index == 0 && stationPin.length > 0) {
setInjectJavaScript(
`MoveDisplayStation('${d}_${D.MyStation}_${D.Station_JP}');`
);
}
stationPinData.push({ D, d, latlng, indexBase: 0, index }); stationPinData.push({ D, d, latlng, indexBase: 0, index });
}) });
); });
setStationPin(stationPinData); setStationPin(stationPinData);
}, [stationData, selectedLine]); }, [stationData, selectedLine]);
useEffect(() => { useEffect(() => {
@ -185,7 +196,14 @@ export default function TrainMenu({ stationData, style }) {
</UsefulBox> </UsefulBox>
</View> </View>
)} )}
<MapsButton onPress={() => navigate("Apps")} top={0} mapSwitch={"flex"} /> <MapsButton
onPress={() => {
navigate("Apps");
webview.current?.injectJavaScript(injectJavaScript);
}}
top={0}
mapSwitch={"flex"}
/>
</View> </View>
); );
} }

View File

@ -4,6 +4,8 @@ const initialState = {
setSelectedLine: () => {}, setSelectedLine: () => {},
mapsStationData: undefined, mapsStationData: undefined,
setMapsStationData: () => {}, setMapsStationData: () => {},
injectJavaScript: "",
setInjectJavaScript: () => {},
}; };
const TrainMenuContext = createContext(initialState); const TrainMenuContext = createContext(initialState);
@ -15,6 +17,7 @@ export const useTrainMenu = () => {
export const TrainMenuProvider = ({ children }) => { export const TrainMenuProvider = ({ children }) => {
const [selectedLine, setSelectedLine] = useState(undefined); const [selectedLine, setSelectedLine] = useState(undefined);
const [mapsStationData, setMapsStationData] = useState(undefined); const [mapsStationData, setMapsStationData] = useState(undefined);
const [injectJavaScript, setInjectJavaScript] = useState();
return ( return (
<TrainMenuContext.Provider <TrainMenuContext.Provider
@ -23,6 +26,8 @@ export const TrainMenuProvider = ({ children }) => {
setSelectedLine, setSelectedLine,
mapsStationData, mapsStationData,
setMapsStationData, setMapsStationData,
injectJavaScript,
setInjectJavaScript,
}} }}
> >
{children} {children}