jrshikoku/components/FavoriteList.tsx
2025-07-05 10:49:30 +00:00

87 lines
3.0 KiB
TypeScript

import React, { FC, useEffect } from "react";
import { View, Text, ScrollView } from "react-native";
import Icon from "react-native-vector-icons/Entypo";
import { useFavoriteStation } from "../stateBox/useFavoriteStation";
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";
import { useStationList } from "@/stateBox/useStationList";
export const FavoriteList: FC = () => {
const { favoriteStation } = useFavoriteStation();
const { webview } = useCurrentTrain();
const { navigate, addListener, goBack, canGoBack } = useNavigation();
const { mapsStationData: stationData } = useTrainMenu();
const { getInjectJavascriptAddress } = useStationList();
useEffect(() => {
const unsubscribe = addListener("tabPress", goToTrainMenu);
return unsubscribe;
}, [{ navigate, addListener }]);
const goToTrainMenu = (e) => {
e.preventDefault();
goBack();
};
return (
<View style={{ height: "100%", backgroundColor: "#0099CC" }}>
<Text
style={{
textAlign: "center",
fontSize: 20,
color: "white",
fontWeight: "bold",
paddingVertical: 10,
}}
>
</Text>
<ScrollView style={{ height: "100%", backgroundColor: "white" }}>
{favoriteStation
.map((currentStation) => {
return (
<FavoriteListItem
currentStation={currentStation}
onPress={() => {
const scriptString = getInjectJavascriptAddress(
currentStation[0].StationNumber
);
if (!scriptString) return;
webview.current?.injectJavaScript(scriptString);
goBack();
if (canGoBack()) goBack();
}}
>
<View
style={{
flex: 2,
flexDirection: "row",
alignContent: "center",
alignItems: "center",
marginVertical: 4,
}}
>
<View style={{ flex: 1 }} />
<Text style={{ fontSize: 20 }}></Text>
<Icon name="chevron-right" size={20} />
</View>
</FavoriteListItem>
);
})}
</ScrollView>
<Text
style={{
backgroundColor: "white",
borderWidth: 1,
borderStyle: "solid",
}}
>
</Text>
<BigButton onPress={() => goBack()} string="閉じる" />
</View>
);
};