import React, { useEffect, useState } from "react"; import { View, Platform, Text, TouchableOpacity, useWindowDimensions, LayoutAnimation, } from "react-native"; import Constants from "expo-constants"; import { Ionicons } from "@expo/vector-icons"; import * as Updates from "expo-updates"; import { AS, ASCore } from "../storageControl"; import { news } from "../config/newsUpdate"; import { getStationList, lineList } from "../lib/getStationList"; import { injectJavascriptData } from "../lib/webViewInjectjavascript"; import { useCurrentTrain } from "../stateBox/useCurrentTrain"; import { useDeviceOrientationChange } from "../stateBox/useDeviceOrientationChange"; import { SheetManager } from "react-native-actions-sheet"; import TrainMenu from "../components/trainMenu"; import { EachTrainInfoCore } from "../components/ActionSheetComponents/EachTrainInfoCore"; import { useNavigation } from "@react-navigation/native"; import { useTrainMenu } from "../stateBox/useTrainMenu"; import { AppsWebView } from "./Apps/WebView"; /* import StatusbarDetect from '../StatusbarDetect'; var Status = StatusbarDetect(); */ const top = Platform.OS == "ios" ? Constants.statusBarHeight : 0; export default function Apps() { const { webview } = useCurrentTrain(); const { height, width } = useWindowDimensions(); const { navigate } = useNavigation(); const { isLandscape } = useDeviceOrientationChange(); const handleLayout = () => {}; const { setInjectJavaScript, mapsStationData } = useTrainMenu(); //画面表示関連 const [iconSetting, setIconSetting] = useState(undefined); const [mapSwitch, setMapSwitch] = useState(undefined); const [stationMenu, setStationMenu] = useState(undefined); const [LoadError, setLoadError] = useState(false); //列車情報表示関連 const [trainInfo, setTrainInfo] = useState({ trainNum: undefined, limited: undefined, trainData: undefined, }); //駅情報画面用 const [originalStationList, setOriginalStationList] = useState(); const [trainMenu, setTrainMenu] = useState("true"); useEffect(() => getStationList().then(setOriginalStationList), []); //地図表示テキスト const injectJavascript = injectJavascriptData( mapSwitch, iconSetting, stationMenu, trainMenu ); useEffect(() => { //ニュース表示 AS.getItem("status") .then((d) => { if (d != news) navigate("news"); }) .catch(() => navigate("news")); }, []); useEffect(() => { //列車アイコンスイッチ ASCore({ k: "iconSwitch", s: setIconSetting, d: "true", u: true }); //地図スイッチ ASCore({ k: "mapSwitch", s: setMapSwitch, d: "false", u: true }); //駅メニュースイッチ ASCore({ k: "stationSwitch", s: setStationMenu, d: "true", u: true }); //列車メニュースイッチ ASCore({ k: "trainSwitch", s: setTrainMenu, d: "true", u: true }); }, []); const openStationACFromEachTrainInfo = async (stationName) => { await SheetManager.hide("EachTrainInfo"); const findStationEachLine = (selectLine) => { let NearStation = selectLine.filter((d) => d.Station_JP == stationName); return NearStation; }; let returnDataBase = lineList .map((d) => findStationEachLine(originalStationList[d])) .filter((d) => d.length > 0) .reduce((pre, current) => { pre.push(...current); return pre; }, []); if (returnDataBase.length) { const payload = { currentStation: returnDataBase, originalStationList: originalStationList, navigate: navigate, goTo: "Apps", useShow: () => SheetManager.show("StationDetailView", { payload }), onExit: () => SheetManager.hide("StationDetailView"), }; SheetManager.show("StationDetailView", { payload }); } else { SheetManager.hide("StationDetailView"); } }; return ( {!trainInfo.trainNum && isLandscape ? ( ) : null} {/* {Status} */} {isLandscape && trainInfo.trainNum && ( )} {isLandscape || ( { setInjectJavaScript(""); navigate("trainMenu", { webview }); }} mapSwitch={mapSwitch == "true" ? "flex" : "none"} /> )} {isLandscape && trainInfo.trainNum && ( { LayoutAnimation.easeInEaseOut(); setTrainInfo({ trainNum: undefined, limited: undefined, trainData: undefined, }); }} /> )} {mapSwitch == "true" ? ( Updates.reloadAsync()} right={isLandscape && trainInfo.trainNum ? (width / 100) * 40 : 0} LoadError={LoadError} /> ) : ( )} ); } const NewMenu = ({ LoadError }) => { const { webview } = useCurrentTrain(); const { width } = useWindowDimensions(); return ( { webview.current?.injectJavaScript(`AccordionClassEvent()`); }} > <> メニュー Updates.reloadAsync()} style={{ width: 54, height: 54, backgroundColor: LoadError ? "red" : "#0099CC", borderColor: "white", borderStyle: "solid", borderWidth: 1, alignContent: "center", alignSelf: "center", alignItems: "center", }} > ); }; const MapsButton = ({ onPress, mapSwitch }) => { const styles = { touch: { position: "absolute", top, left: 10, width: 50, height: 50, backgroundColor: "#0099CC", borderColor: "white", borderStyle: "solid", borderWidth: 1, borderRadius: 50, alignContent: "center", alignSelf: "center", alignItems: "center", display: mapSwitch, }, text: { textAlign: "center", width: "auto", height: "auto", textAlignVertical: "center", fontWeight: "bold", color: "white", fontSize: 20, }, }; return ( ); }; const LandscapeBackButton = ({ onPress }) => { const styles = { touch: { position: "absolute", left: 10, width: 50, height: 50, backgroundColor: "#0099CC", borderColor: "white", borderStyle: "solid", borderWidth: 1, borderRadius: 50, alignContent: "center", alignSelf: "center", alignItems: "center", display: "flex", }, text: { textAlign: "center", width: "auto", height: "auto", textAlignVertical: "center", fontWeight: "bold", color: "white", }, }; return ( ); }; const ReloadButton = ({ onPress, mapSwitch, LoadError = false, right }) => { const styles = { touch: { position: "absolute", top, right: 10 + right, width: 50, height: 50, backgroundColor: LoadError ? "red" : "#0099CC", borderColor: "white", borderStyle: "solid", borderWidth: 1, borderRadius: 50, alignContent: "center", alignSelf: "center", alignItems: "center", display: mapSwitch, }, text: { textAlign: "center", width: "auto", height: "auto", textAlignVertical: "center", fontWeight: "bold", color: "white", }, }; return ( ); };