import React, { Component, useRef, useState, useEffect } from "react"; import { StatusBar, View, LayoutAnimation, ScrollView, Linking, Text, TouchableOpacity, } from "react-native"; import { widthPercentageToDP as wp, heightPercentageToDP as hp, } from "react-native-responsive-screen"; import LottieView from "lottie-react-native"; import { useInterval } from "../../lib/useInterval"; import { AS } from "../../storageControl"; export default function Sign(props) { const { currentStation, originalStationList, oP, oLP, favoriteStation, setFavoriteStation, } = props; const [nexPrePosition, setNexPrePosition] = useState(0); const [preStation, setPreStation] = useState(); const [nexStation, setNexStation] = useState(); const [testButtonStatus, setTestButtonStatus] = useState(false); useEffect(() => { const isFavorite = favoriteStation.filter((d) => { const compare = JSON.stringify(d); const current = JSON.stringify(currentStation); if (compare === current) { return true; } else { return false; } }); setTestButtonStatus(isFavorite.length != 0); }, [favoriteStation, currentStation]); useInterval(() => { if (currentStation.length == 1) { setNexPrePosition(0); return () => {}; } setNexPrePosition( nexPrePosition + 1 == currentStation.length ? 0 : nexPrePosition + 1 ); }, 2000); useEffect(() => { setNexPrePosition(0); getPreNextStation(currentStation[0]); }, [currentStation]); useEffect(() => { if (!currentStation[nexPrePosition]) return () => {}; getPreNextStation(currentStation[nexPrePosition]); }, [nexPrePosition]); const getPreNextStation = (now) => { const lineList = [ "予讃線(高松-松山間)[Y]", "予讃線(松山-宇和島間)[U]", "予讃線/愛ある伊予灘線(向井原-伊予大洲間)[S]", "土讃線(多度津-高知間)[D]", "土讃線(高知-窪川間)[K]", "高徳線(高松-徳島間)[T]", "徳島線(徳島-阿波池田)[B]", "鳴門線(池谷-鳴門間)[N]", "瀬戸大橋線(宇多津-児島間)[M]", ]; let returnData; lineList.forEach((d) => { let cache = originalStationList[d].findIndex( (data) => data.StationNumber == now.StationNumber ); if (cache != -1) { returnData = [ originalStationList[d][cache - 1], originalStationList[d][cache + 1], ]; } }); setPreStation(returnData[0]); setNexStation(returnData[1]); }; const lottieRef = useRef(); return ( { if (testButtonStatus) { const otherData = favoriteStation.filter((d) => { const compare = JSON.stringify(d); const current = JSON.stringify(currentStation); if (compare !== current) { return true; } else { return false; } }); AS.setItem("favoriteStation", JSON.stringify(otherData)); setFavoriteStation(otherData); } else { let ret = favoriteStation; ret.push(currentStation); AS.setItem("favoriteStation", JSON.stringify(ret)); setFavoriteStation(ret); } setTestButtonStatus(!testButtonStatus); }} > JR ); } const LottieDelayView = ({ progress, speed, style, source, lottieRef, loop, }) => { const [progressState, setProgressState] = useState(undefined); useEffect(() => { if (progress == 0) { lottieRef.current.play(progressState !== undefined ? 35 : 7, 7); } else { lottieRef.current.play(progressState !== undefined ? 7 : 35, 35); } }, [progress]); return ( { setProgressState(progress); }} /> ); }; const NexPreStationLine = ({ nexStation, preStation }) => { return ( {preStation ? ( <> {preStation.StationNumber ? ( {preStation.StationNumber} ) : ( <> )} ) : ( <> )} {nexStation ? ( <> {nexStation.StationNumber ? ( {nexStation.StationNumber} ) : ( <> )} ) : ( <> )} ); }; const StationNumberMaker = (props) => { const getTop = (array, index) => { if (array.length == 1) return 20; else if (index == 0) return 5; else if (index == 1) return 35; else return 20; }; return props.currentStation .filter((d) => (d.StationNumber ? true : false)) .map((d, index, array) => ( {d.StationNumber} )); }; const StationNameArea = (props) => { const { currentStation } = props; return ( {/* {stationName.今.LineName} */} {currentStation[0].Station_JP} {currentStation[0].Station_EN} ); }; const StationName = (props) => { const { stringData, ss } = props; return ( {stringData.Station_JP} {stringData.Station_EN} ); }; const styleSheet = { 外枠: { width: wp("80%"), height: (wp("80%") / 20) * 9, borderColor: "#2E94BB", borderWidth: 1, backgroundColor: "white", }, 下帯: { position: "absolute", bottom: "0%", left: "0%", width: "100%", height: "30%", backgroundColor: "#2E94BB", }, JRStyle: { position: "absolute", top: "2%", left: "2%", fontWeight: "bold", fontSize: parseInt("30%"), color: "#2E94BB", }, stationNameAreaOverWrap: { position: "absolute", top: "10%", alignContent: "center", flexDirection: "row", }, Station_JP: { fontWeight: "bold", fontSize: parseInt("40%"), color: "#005170", }, Station_EN: { fontWeight: "bold", fontSize: parseInt("15%"), color: "#005170", }, 下帯内容: { position: "absolute", bottom: "0%", height: "30%", width: "100%", alignItems: "center", flexDirection: "column", }, 下枠フレーム: { flex: 1, flexDirection: "row", alignContent: "center", alignItems: "center", }, 下枠左右マーク: { fontWeight: "bold", fontSize: parseInt("20%"), color: "white", paddingHorizontal: 10, textAlignVertical: "center", }, 下枠駅ナンバー: { alignContent: "center", alignItems: "center", width: wp("8%"), height: wp("8%"), margin: wp("1%"), borderColor: "white", borderWidth: parseInt("2%"), borderRadius: parseInt("100%"), }, 下枠駅名: { fontWeight: "bold", fontSize: parseInt("15%"), color: "white", flex: 1, textAlignVertical: "center", }, };