diff --git a/components/CurrentTrainListView.js b/components/CurrentTrainListView.js index 72a6a1d..250a5da 100644 --- a/components/CurrentTrainListView.js +++ b/components/CurrentTrainListView.js @@ -1,53 +1,15 @@ -import React, { useRef } from "react"; -import { View, Text, TouchableOpacity, Linking } from "react-native"; -import MapView, { Marker } from "react-native-maps"; -import { MaterialCommunityIcons } from "@expo/vector-icons"; +import React from "react"; +import { View, Text } from "react-native"; import { useCurrentTrain } from "../stateBox/useCurrentTrain"; import { useNavigation } from "@react-navigation/native"; +import { BigButton } from "./atom/BigButton"; export default function CurrentTrainListView() { const { navigate } = useNavigation(); const { currentTrain } = useCurrentTrain(); return ( {currentTrain && currentTrain.map((d) => {d.num})} - navigate("menu")} - > - - - 閉じる - - - + navigate("menu")} string="閉じる" /> ); } -const UsefulBox = (props) => { - const { icon, backgroundColor, flex, onPressButton, children } = props; - return ( - - - - {children} - - - ); -}; diff --git a/components/FavoriteList.js b/components/FavoriteList.js index e46b613..d942952 100644 --- a/components/FavoriteList.js +++ b/components/FavoriteList.js @@ -7,6 +7,7 @@ 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"; export default function FavoriteList() { const { favoriteStation } = useFavoriteStation(); const { webview } = useCurrentTrain(); @@ -78,24 +79,7 @@ export default function FavoriteList() { > お気に入り登録した駅のうち、位置情報システムで移動可能な駅が表示されています。タップすることで位置情報システムの当該の駅に移動します。 - goBack()} - > - - - 閉じる - - - + goBack()} string="閉じる" /> ); } diff --git a/components/atom/BigButton.tsx b/components/atom/BigButton.tsx index 1e13926..a014fee 100644 --- a/components/atom/BigButton.tsx +++ b/components/atom/BigButton.tsx @@ -1,12 +1,21 @@ import React, { FC } from "react"; -import { Text, TouchableOpacity, View, ViewStyle } from "react-native"; +import { + Text, + TextStyle, + TouchableOpacity, + View, + ViewStyle, +} from "react-native"; type Props = { onPress: () => void; string: string; style?: ViewStyle; + tS?: TextStyle; + children?: any; }; -export const BigButton: FC = ({ onPress, string,style }) => { +export const BigButton: FC = (props) => { + const { onPress, string, style, tS, children } = props; return ( = ({ onPress, string,style }) => { onPress={onPress} > - + {children} + {string} diff --git a/components/news.js b/components/news.tsx similarity index 78% rename from components/news.js rename to components/news.tsx index 79e4172..cd5c09a 100644 --- a/components/news.js +++ b/components/news.tsx @@ -1,13 +1,11 @@ -import React from "react"; -import { View, Text, TouchableOpacity } from "react-native"; +import React, { FC } from "react"; +import { View } from "react-native"; import { WebView } from "react-native-webview"; -import StatusbarDetect from "../StatusbarDetect"; import { AS } from "../storageControl"; import { news } from "../config/newsUpdate"; import { useNavigation } from "@react-navigation/native"; import { BigButton } from "./atom/BigButton"; -var Status = StatusbarDetect(); -export default function News() { +const News: FC = () => { const { navigate } = useNavigation(); return ( @@ -28,4 +26,5 @@ export default function News() { /> ); -} +}; +export default News; diff --git a/components/trainbaseview.js b/components/trainbaseview.js index dd68263..5c99a28 100644 --- a/components/trainbaseview.js +++ b/components/trainbaseview.js @@ -1,14 +1,9 @@ -import React, { Component, useRef } from "react"; -import { - StatusBar, - Platform, - View, - TouchableOpacity, - Text, -} from "react-native"; +import React, { useRef } from "react"; +import { StatusBar, Platform, View } from "react-native"; import { WebView } from "react-native-webview"; -import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; import { useNavigation } from "@react-navigation/native"; +import { BigButton } from "./atom/BigButton"; export default function TrainBase({ route }) { const { info, from } = route.params; @@ -38,27 +33,16 @@ export default function TrainBase({ route }) { onMessage={(event) => {}} /> {(from == "LED" || from == "LED2" || from == "AllTrainIDList") && ( - navigate(from == "AllTrainIDList" ? "AllTrainIDList" : "menu") } > - - - 閉じる - - - + )} ); diff --git a/components/発車時刻表/EachData.tsx b/components/発車時刻表/EachData.tsx new file mode 100644 index 0000000..1569ffc --- /dev/null +++ b/components/発車時刻表/EachData.tsx @@ -0,0 +1,126 @@ +import React, { FC, useEffect, useState } from "react"; +import { TouchableOpacity } from "react-native"; +import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData"; +import { getTrainDelayStatus } from "../../lib/getTrainDelayStatus"; +import { getTrainType } from "../../lib/getTrainType"; +import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; +import { SheetManager } from "react-native-actions-sheet"; +import { Description } from "./LED_inside_Component/Description"; +import { DependTime } from "./LED_inside_Component/DependTime"; +import { LastStation } from "./LED_inside_Component/LastStation"; +import { StatusAndDelay } from "./LED_inside_Component/StatusAndDelay"; +import { TrainName } from "./LED_inside_Component/TrainName"; + +type Props = { + d: { + train: string; + lastStation: string; + time: string; + }; + trainIDSwitch: boolean; + trainDescriptionSwitch: boolean; + station: { + Station_JP: string; + }; + customTrainDataDetector: (trainID: string) => { + trainName: string; + trainNumDistance?: number; + type: string; + info: string; + }; + navigate: (screen: string, data?: any) => void; + openStationACFromEachTrainInfo: (station: string) => void; +}; +export const EachData: FC = (props) => { + const { + d, + trainIDSwitch, + trainDescriptionSwitch, + station, + customTrainDataDetector, + navigate, + openStationACFromEachTrainInfo, + } = props; + const { currentTrain } = useCurrentTrain(); + const openTrainInfo = (d: { + train: string; + lastStation: string; + time: string; + }) => { + let TrainNumber = ""; + if (train.trainNumDistance != undefined) { + const timeInfo = + parseInt(d.train.replace("M", "").replace("D", "")) - + train.trainNumDistance; + TrainNumber = timeInfo + "号"; + } + const payload = { + data: { + trainNum: d.train, + limited: `${getTrainType(train.type).data}:${ + train.trainName + }${TrainNumber}`, + }, + navigate, + openStationACFromEachTrainInfo, + from: "LED", + }; + SheetManager.show("EachTrainInfo", { + payload, + }); + }; + const [train, setTrain] = useState(customTrainDataDetector(d.train)); + useEffect(() => { + setTrain(customTrainDataDetector(d.train)); + }, [currentTrain, d.train, trainDescriptionSwitch]); + // 土讃線複数存在対策 + const currentTrainData = checkDuplicateTrainData( + currentTrain.filter((a) => a.num == d.train) + ); + const trainDelayStatus = `${getTrainDelayStatus( + currentTrainData, + station.Station_JP + )}`; + const trainPositionText = currentTrainData?.Pos.match("~") + ? `現在地:${ + currentTrainData?.Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~")[currentTrainData?.Direction == 1 ? 0 : 1] + }→${ + currentTrainData?.Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~")[currentTrainData?.Direction == 1 ? 1 : 0] + }間を走行中` + : `現在地:${currentTrainData?.Pos}`; + return ( + <> + openTrainInfo(d)} + > + + + + + + {trainDescriptionSwitch && } + {trainDescriptionSwitch && !!train.info && ( + + )} + + ); +}; diff --git a/components/発車時刻表/LED_inside_Component/DependTime.tsx b/components/発車時刻表/LED_inside_Component/DependTime.tsx new file mode 100644 index 0000000..ebcd55c --- /dev/null +++ b/components/発車時刻表/LED_inside_Component/DependTime.tsx @@ -0,0 +1,14 @@ +import React, { FC } from "react"; +import { Text, TextStyle, View } from "react-native"; +const descriptionStyle: TextStyle = { + fontSize: parseInt("16%"), + fontWeight: "bold", +}; +type Props = { + time: string; +}; +export const DependTime: FC = ({ time }) => ( + + {time} + +); diff --git a/components/発車時刻表/LED_inside_Component/Description.tsx b/components/発車時刻表/LED_inside_Component/Description.tsx new file mode 100644 index 0000000..69aba13 --- /dev/null +++ b/components/発車時刻表/LED_inside_Component/Description.tsx @@ -0,0 +1,45 @@ +import React, { FC } from "react"; +import { Text, TextStyle, View, TouchableOpacity } from "react-native"; + +const descriptionStyle: TextStyle = { + fontSize: parseInt("16%"), + fontWeight: "bold", +}; + +type Props = { + info: string; + numberOfLines?: number; + onClick?: () => void; +}; +export const Description:FC = ({ info, numberOfLines = 0, onClick }) => ( + + + {numberOfLines == 1 ? ( + + 運行情報 >{" "} + + ) : ( + > + )} + + + {info} + + + +); diff --git a/components/発車時刻表/LED_inside_Component/LastStation.tsx b/components/発車時刻表/LED_inside_Component/LastStation.tsx new file mode 100644 index 0000000..3238a0b --- /dev/null +++ b/components/発車時刻表/LED_inside_Component/LastStation.tsx @@ -0,0 +1,21 @@ +import React, { FC } from "react"; +import { Text, View } from "react-native"; + +type Props = { + lastStation: string; +}; +export const LastStation: FC = ({ lastStation }) => { + return ( + + 4 ? parseInt("12%") : parseInt("16%"), + color: "white", + fontWeight: "bold", + }} + > + {lastStation} + + + ); +}; diff --git a/components/発車時刻表/LED_inside_Component/StatusAndDelay.tsx b/components/発車時刻表/LED_inside_Component/StatusAndDelay.tsx new file mode 100644 index 0000000..15b3960 --- /dev/null +++ b/components/発車時刻表/LED_inside_Component/StatusAndDelay.tsx @@ -0,0 +1,18 @@ +import React, { FC } from "react"; +import { Text, TextStyle, View } from "react-native"; +const descriptionStyle: TextStyle = { + fontSize: parseInt("16%"), + fontWeight: "bold", +}; +type Props = { + trainDelayStatus: string; +}; +export const StatusAndDelay: FC = ({ trainDelayStatus }) => { + return ( + + + {trainDelayStatus} + + + ); +}; diff --git a/components/発車時刻表/LED_inside_Component/TrainName.tsx b/components/発車時刻表/LED_inside_Component/TrainName.tsx new file mode 100644 index 0000000..88e87e9 --- /dev/null +++ b/components/発車時刻表/LED_inside_Component/TrainName.tsx @@ -0,0 +1,33 @@ +import React, { FC } from "react"; +import { Text, View } from "react-native"; +import { getTrainType } from "../../../lib/getTrainType"; +type Props = { + trainName: string; + trainNumDistance?: number; + trainIDSwitch: boolean; + trainID: string; + type: string; +}; +export const TrainName: FC = (props) => { + const { trainName, trainNumDistance, trainIDSwitch, trainID, type } = props; + const { name, color } = getTrainType(type); + const TrainNumber = + trainNumDistance != undefined + ? `${ + parseInt(trainID.replace("M", "").replace("D", "")) - trainNumDistance + }号` + : ""; + return ( + + 6 ? parseInt("12%") : parseInt("16%"), + color: color, + fontWeight: "bold", + }} + > + {trainIDSwitch ? trainID : `${name} ${trainName}${TrainNumber}`} + + + ); +}; diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js index dd91f9d..f787522 100644 --- a/components/発車時刻表/LED_vidion.js +++ b/components/発車時刻表/LED_vidion.js @@ -1,18 +1,17 @@ import React, { useState, useEffect } from "react"; -import { View, Text, TouchableOpacity } from "react-native"; +import { View } from "react-native"; import { widthPercentageToDP as wp } from "react-native-responsive-screen"; import { customTrainDataDetector } from "../custom-train-data"; import { useInterval } from "../../lib/useInterval"; import { objectIsEmpty } from "../../lib/objectIsEmpty"; -import { getTrainType } from "../../lib/getTrainType"; -import { getTrainDelayStatus } from "../../lib/getTrainDelayStatus"; -import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData"; import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; import { useAreaInfo } from "../../stateBox/useAreaInfo"; -import { SheetManager } from "react-native-actions-sheet"; import { AS } from "../../storageControl"; import { Footer } from "./LED_Vision_Component/Footer"; import { Header } from "./LED_Vision_Component/Header"; +import { Description } from "./LED_inside_Component/Description"; +import { EachData } from "./EachData"; + /** @@ -232,192 +231,3 @@ export default function LED_vision(props) { ); } - -const EachData = (props) => { - const { - d, - trainIDSwitch, - trainDescriptionSwitch, - station, - customTrainDataDetector, - navigate, - openStationACFromEachTrainInfo, - } = props; - const { currentTrain } = useCurrentTrain(); - const openTrainInfo = (d) => { - let TrainNumber = ""; - if (train.trainNumDistance != undefined) { - const timeInfo = - parseInt(d.train.replace("M", "").replace("D", "")) - - train.trainNumDistance; - TrainNumber = timeInfo + "号"; - } - const payload = { - data: { - trainNum: d.train, - limited: `${getTrainType(train.type).data}:${ - train.trainName - }${TrainNumber}`, - }, - navigate, - openStationACFromEachTrainInfo, - from: "LED", - }; - SheetManager.show("EachTrainInfo", { - payload, - }); - }; - const [train, setTrain] = useState(customTrainDataDetector(d.train)); - useEffect(() => { - setTrain(customTrainDataDetector(d.train)); - }, [currentTrain, d.train, trainDescriptionSwitch]); - // 土讃線複数存在対策 - const currentTrainData = checkDuplicateTrainData( - currentTrain.filter((a) => a.num == d.train) - ); - const trainDelayStatus = getTrainDelayStatus( - currentTrainData, - station.Station_JP - ); - const trainPositionText = currentTrainData?.Pos.match("~") - ? `現在地:${ - currentTrainData?.Pos.replace("(下り)", "") - .replace("(上り)", "") - .split("~")[currentTrainData?.Direction == 1 ? 0 : 1] - }→${ - currentTrainData?.Pos.replace("(下り)", "") - .replace("(上り)", "") - .split("~")[currentTrainData?.Direction == 1 ? 1 : 0] - }間を走行中` - : `現在地:${currentTrainData?.Pos}`; - return ( - <> - openTrainInfo(d)} - > - - - - - - {trainDescriptionSwitch && } - {trainDescriptionSwitch && !!train.info && ( - - )} - - ); -}; - -const TrainName = ({ - trainName, - trainNumDistance, - trainIDSwitch, - trainID, - type, -}) => { - const { name, color } = getTrainType(type); - let TrainNumber = - trainNumDistance != undefined - ? `${ - parseInt(trainID.replace("M", "").replace("D", "")) - trainNumDistance - }号` - : ""; - return ( - - 6 ? parseInt("12%") : parseInt("16%"), - color: color, - fontWeight: "bold", - }} - > - {trainIDSwitch ? trainID : `${name} ${trainName}${TrainNumber}`} - - - ); -}; - -const LastStation = ({ lastStation }) => { - return ( - - 4 ? parseInt("12%") : parseInt("16%"), - color: "white", - fontWeight: "bold", - }} - > - {lastStation} - - - ); -}; - -const descriptionStyle = { - fontSize: parseInt("16%"), - fontWeight: "bold", -}; - -const DependTime = ({ time }) => ( - - {time} - -); - -const StatusAndDelay = ({ trainDelayStatus }) => { - return ( - - - {trainDelayStatus} - - - ); -}; - -const Description = ({ info, numberOfLines = 0, onClick }) => ( - - - {numberOfLines == 1 ? ( - - 運行情報 >{" "} - - ) : ( - > - )} - - - {info} - - - -);