diff --git a/App.js b/App.js index 76d74dd..09ab333 100644 --- a/App.js +++ b/App.js @@ -80,30 +80,6 @@ export function AppContainer() { }); }, []); - const { setCurrentTrain, setCurrentTrainLoading } = useCurrentTrain(); - - const getCurrentTrain = () => - fetch( - "https://script.google.com/macros/s/AKfycby9Y2-Bm75J_WkbZimi7iS8v5r9wMa9wtzpdwES9sOGF4i6HIYEJOM60W6gM1gXzt1o/exec", - HeaderConfig - ) - .then((response) => response.json()) - .then((d) => - d.map((x) => ({ num: x.TrainNum, delay: x.delay, Pos: x.Pos })) - ) - .then((d) => { - setCurrentTrain(d); - setCurrentTrainLoading("success"); - }) - .catch(() => { - console.log("えらー"); - setCurrentTrainLoading("error"); - }); - - useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 - - useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得 - const { areaInfo, setAreaInfo } = useAreaInfo(); const getAreaData = () => fetch( @@ -128,7 +104,7 @@ export function AppContainer() { tabBarIcon: initIcon("barchart", "AntDesign"), }} > - {(props) => } + {(props) => } - {(props) => } + {(props) => } a.num == trainNum) - ), }, navigate, originalStationList, @@ -251,23 +246,21 @@ export default function Apps({ navigation, webview, stationData }) { return pre; }, []); if (returnDataBase.length) { - sleep(25, function () { - const payload = { - currentStation: returnDataBase, - originalStationList: originalStationList, - navigate: navigate, - goTo: "Apps", - useShow: () => - SheetManager.show("StationDetailView", { - payload, - }), - onExit: () => { - SheetManager.hide("StationDetailView"); - }, - }; - SheetManager.show("StationDetailView", { - payload, - }); + 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"); @@ -327,13 +320,6 @@ export default function Apps({ navigation, webview, stationData }) { top={Platform.OS == "ios" ? Constants.statusBarHeight : 0} LoadError={LoadError} /> - - ); } diff --git a/MenuPage.js b/MenuPage.js index 804f385..a7b01f0 100644 --- a/MenuPage.js +++ b/MenuPage.js @@ -12,10 +12,12 @@ import { useFavoriteStation } from "./stateBox/useFavoriteStation"; import { optionData } from "./lib/stackOption.js"; import CurrentTrainListView from "./components/CurrentTrainListView.js"; import AllTrainDiagramView from "./components/AllTrainDiagramView.js"; +import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; const Stack = createStackNavigator(); -export function MenuPage({ navigation, getCurrentTrain }) { +export function MenuPage({ navigation }) { const { favoriteStation, setFavoriteStation } = useFavoriteStation(); + const { getCurrentTrain } = useCurrentTrain(); useEffect(() => { const unsubscribe = navigation.addListener("tabPress", (e) => { AS.getItem("favoriteStation") diff --git a/Top.js b/Top.js index 9120dc8..b320f59 100644 --- a/Top.js +++ b/Top.js @@ -12,10 +12,12 @@ import TrainMenu from "./components/trainMenu.js"; import FavoriteList from "./components/FavoriteList.js"; import { useFavoriteStation } from "./stateBox/useFavoriteStation"; import { optionData } from "./lib/stackOption.js"; +import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; const Stack = createStackNavigator(); -export const Top = ({ navigation, getCurrentTrain }) => { +export const Top = ({ navigation }) => { const webview = useRef(); const { favoriteStation, setFavoriteStation } = useFavoriteStation(); + const { getCurrentTrain } = useCurrentTrain(); //地図用 const [mapsStationData, setMapsStationData] = useState(undefined); diff --git a/components/ActionSheetComponents/EachTrainInfo.js b/components/ActionSheetComponents/EachTrainInfo.js index ecaa412..5d0c64f 100644 --- a/components/ActionSheetComponents/EachTrainInfo.js +++ b/components/ActionSheetComponents/EachTrainInfo.js @@ -24,6 +24,8 @@ import { widthPercentageToDP, } from "react-native-responsive-screen"; import lineColorList from "../../assets/originData/lineColorList"; +import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; +import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData"; export const EachTrainInfo = (props) => { if (!props.payload) return <>; @@ -40,6 +42,18 @@ export const EachTrainInfo = (props) => { const [trainPositionSwitch, setTrainPositionSwitch] = useState("false"); + const { currentTrain } = useCurrentTrain(); + + const [currentTrainData, setCurrentTrainData] = useState([]); + + useEffect(() => { + setCurrentTrainData( + checkDuplicateTrainData( + currentTrain.filter((d) => d.num == data.trainNum) + ) + ); + }, [currentTrain]); + useEffect(() => { //列車現在地アイコン表示スイッチ AS.getItem("trainPositionSwitch") @@ -65,17 +79,17 @@ export const EachTrainInfo = (props) => { return Station.map((d) => d.StationNumber)[0]; }; useEffect(() => { - //data.trainData.Pos = "鴨川~端岡"; //test - if (!data.trainData?.Pos) return; - if (data.trainData?.Pos.match("~")) { - const pos = data.trainData?.Pos.replace("(下り)", "") + //currentTrainData.Pos = "鴨川~端岡"; //test + if (!currentTrainData?.Pos) return; + if (currentTrainData?.Pos.match("~")) { + const pos = currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~"); setCurrentPosition([getStationData(pos[0]), getStationData(pos[1])]); } else { - setCurrentPosition([getStationData(data.trainData?.Pos)]); + setCurrentPosition([getStationData(currentTrainData?.Pos)]); } - }, [data.trainData]); + }, [currentTrainData]); const stationList = originalStationList && @@ -249,6 +263,7 @@ export const EachTrainInfo = (props) => { gestureEnabled={isTop} CustomHeaderComponent={<>} ref={actionSheetRef} + drawUnderStatusBar={false} > { 現在地 {currentPosition.toString()} - {data.trainData?.Pos && data.trainData?.Pos.match("~") ? ( + {currentTrainData?.Pos && currentTrainData?.Pos.match("~") ? ( <> { }} > { - data.trainData?.Pos.replace("(下り)", "") + currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~")[0] } @@ -365,7 +380,7 @@ export const EachTrainInfo = (props) => { }} > { - data.trainData?.Pos.replace("(下り)", "") + currentTrainData?.Pos.replace("(下り)", "") .replace("(上り)", "") .split("~")[1] } @@ -379,7 +394,7 @@ export const EachTrainInfo = (props) => { textAlign: "right", }} > - {data.trainData?.Pos} + {currentTrainData?.Pos} )} @@ -394,7 +409,7 @@ export const EachTrainInfo = (props) => { }} > - {isNaN(data.trainData?.delay) ? "状態" : "遅延時分"} + {isNaN(currentTrainData?.delay) ? "状態" : "遅延時分"} { textAlign: "right", }} > - {data.trainData?.delay} - {isNaN(data.trainData?.delay) ? "" : "分"} + {currentTrainData?.delay} + {isNaN(currentTrainData?.delay) ? "" : "分"} { textAlign: "right", }} > - {data.trainData?.num} + {currentTrainData?.num} @@ -511,6 +526,57 @@ export const EachTrainInfo = (props) => { */} )} + + + 停車駅 + + + {!isNaN(currentTrainData?.delay) && + currentTrainData?.delay != 0 && ( + + (定刻) + + )} + + 見込 + + + + + { from == "AllTrainDiagramView" ? "70%" : "50%" ), }} - nestedScrollEnabled onScroll={(e) => { if (!Platform.OS !== "android") return; setIsTop(e.nativeEvent.contentOffset.y < 0); }} > - - - {/* + {/* ほげほげふがふが */} - - { + const [station, se, time] = i.split(","); + const Stations = stationList.map((a) => + a.filter((d) => d.StationName == station) + ); + const StationNumbers = + Stations && + Stations.reduce((newArray, e) => { + return newArray.concat(e); + }, []) + .filter((d) => d.StationNumber) + .map((d) => d.StationNumber); + + const colorIDs = + StationNumbers != null + ? StationNumbers.map((d) => { + return d.split("").filter((s) => "A" < s && s < "Z"); + }).reduce((newArray, e) => { + return newArray.concat(e); + }, []) + : []; + const EachIDs = + StationNumbers != null + ? StationNumbers.map((d) => { + return d + .split("") + .filter((s) => "0" <= s && s <= "9") + .join(""); + }) + : []; + const date = new Date(); + if (time) { + date.setHours(time.split(":")[0], time.split(":")[1]); + } + if (!isNaN(currentTrainData?.delay)) { + date.setMinutes(date.getMinutes() + currentTrainData?.delay); + } + const timeString = date.toTimeString().split(" ")[0].split(":"); + return ( + openStationACFromEachTrainInfo(station)} + key={station} > - 停車駅 - - {!isNaN(data.trainData?.delay) && - data.trainData?.delay != 0 && ( - - (定刻) - - )} - - 見込 - - - - - - {trainData.map((i, index) => { - const [station, se, time] = i.split(","); - const Stations = stationList.map((a) => - a.filter((d) => d.StationName == station) - ); - const StationNumbers = - Stations && - Stations.reduce((newArray, e) => { - return newArray.concat(e); - }, []) - .filter((d) => d.StationNumber) - .map((d) => d.StationNumber); - - const colorIDs = - StationNumbers != null - ? StationNumbers.map((d) => { - return d.split("").filter((s) => "A" < s && s < "Z"); - }).reduce((newArray, e) => { - return newArray.concat(e); - }, []) - : []; - const EachIDs = - StationNumbers != null - ? StationNumbers.map((d) => { - return d - .split("") - .filter((s) => "0" <= s && s <= "9") - .join(""); - }) - : []; - const date = new Date(); - if (time) { - date.setHours(time.split(":")[0], time.split(":")[1]); - } - if (!isNaN(data.trainData?.delay)) { - date.setMinutes(date.getMinutes() + data.trainData?.delay); - } - const timeString = date.toTimeString().split(" ")[0].split(":"); - return ( - openStationACFromEachTrainInfo(station)} - key={station} - > - - - {colorIDs.map((color, index) => ( - - - - {colorIDs[index]} - - - {EachIDs[index]} - - - - ))} - - - {station} - - {points && points.findIndex((d) => d == index) >= 0 ? ( + {colorIDs.map((color, index) => ( + + - 🚊 + {colorIDs[index]} - ) : null} - {!isNaN(data.trainData?.delay) && - data.trainData?.delay != 0 && ( - - {time} - - )} + + {EachIDs[index]} + + + + ))} + + + {station} + + {points && points.findIndex((d) => d == index) >= 0 ? ( - {timeString[0]}:{timeString[1]} + 🚊 - - {se?.replace("発", "出発").replace("着", "到着")} - - + ) : null} + {!isNaN(currentTrainData?.delay) && + currentTrainData?.delay != 0 && ( + + {time} + + )} + + {timeString[0]}:{timeString[1]} + + + {se?.replace("発", "出発").replace("着", "到着")} + - - ); - })} - + + + ); + })} diff --git a/components/AllTrainDiagramView.js b/components/AllTrainDiagramView.js index c37a048..9b122d2 100644 --- a/components/AllTrainDiagramView.js +++ b/components/AllTrainDiagramView.js @@ -16,7 +16,6 @@ import { MaterialCommunityIcons } from "@expo/vector-icons"; import { useCurrentTrain } from "../stateBox/useCurrentTrain"; import { useAreaInfo } from "../stateBox/useAreaInfo"; import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram"; -import { EachTrainInfo } from "./ActionSheetComponents/EachTrainInfo"; import { customTrainDataDetector } from "./custom-train-data"; import { getStationList, lineList } from "../lib/getStationList"; @@ -65,9 +64,6 @@ export default function AllTrainDiagramView({ navigation: { navigate } }) { limited: `${getTrainType(train.type).data}:${ train.trainName }${TrainNumber}`, - trainData: checkDuplicateTrainData( - currentTrain.filter((a) => a.num == d) - ), }, navigate, originalStationList, diff --git a/components/settings.js b/components/settings.js index 7f7b871..72bca39 100644 --- a/components/settings.js +++ b/components/settings.js @@ -165,7 +165,7 @@ export default function Setting(props) { textAlignVertical: "center", }} > - 内部バージョン: 4.6.1 + 内部バージョン: 4.6.2 diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js index 33f078c..db4faf9 100644 --- a/components/発車時刻表/LED_vidion.js +++ b/components/発車時刻表/LED_vidion.js @@ -321,9 +321,6 @@ const EachData = ({ limited: `${getTrainType(train.type).data}:${ train.trainName }${TrainNumber}`, - trainData: checkDuplicateTrainData( - currentTrain.filter((a) => a.num == d.train) - ), }, navigate, originalStationList, diff --git a/components/駅名表/Sign.js b/components/駅名表/Sign.js index 7f07697..e5ec5cf 100644 --- a/components/駅名表/Sign.js +++ b/components/駅名表/Sign.js @@ -6,6 +6,8 @@ import { useInterval } from "../../lib/useInterval"; import { AS } from "../../storageControl"; import { useFavoriteStation } from "../../stateBox/useFavoriteStation"; +import lineColorList from "../../assets/originData/lineColorList"; + export default function Sign(props) { const { currentStation, originalStationList, oP, oLP } = props; const { favoriteStation, setFavoriteStation } = useFavoriteStation(); @@ -24,7 +26,7 @@ export default function Sign(props) { return false; } }); - setTestButtonStatus(isFavorite.length != 0); + setTestButtonStatus(isFavorite.length == 0 ? false : true); }, [favoriteStation, currentStation]); useInterval(() => { @@ -220,27 +222,40 @@ const StationNumberMaker = (props) => { }; return props.currentStation .filter((d) => (d.StationNumber ? true : false)) - .map((d, index, array) => ( - - - {d.StationNumber} - - - )); + .map((d, index, array) => { + const lineID = d.StationNumber.slice(0, 1); + const lineName = d.StationNumber.slice(1); + return ( + + + + {lineID + "\n" + lineName} + + + + ); + }); }; const StationNameArea = (props) => { diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js index 241822e..944b37c 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.js @@ -1,9 +1,13 @@ -import React, { createContext, useContext, useState } from "react"; +import React, { createContext, useContext, useState, useEffect } from "react"; +import { HeaderConfig } from "../lib/HeaderConfig"; + +import useInterval from "../lib/useInterval"; const initialState = { currentTrain: [], setCurrentTrain: () => {}, currentTrainLoading: "loading", setCurrentTrainLoading: () => {}, + getCurrentTrain: () => {}, }; const CurrentTrainContext = createContext(initialState); @@ -15,7 +19,27 @@ export const useCurrentTrain = () => { export const CurrentTrainProvider = ({ children }) => { const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 } const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading + const getCurrentTrain = () => + fetch( + "https://script.google.com/macros/s/AKfycby9Y2-Bm75J_WkbZimi7iS8v5r9wMa9wtzpdwES9sOGF4i6HIYEJOM60W6gM1gXzt1o/exec", + HeaderConfig + ) + .then((response) => response.json()) + .then((d) => + d.map((x) => ({ num: x.TrainNum, delay: x.delay, Pos: x.Pos })) + ) + .then((d) => { + setCurrentTrain(d); + setCurrentTrainLoading("success"); + }) + .catch(() => { + console.log("えらー"); + setCurrentTrainLoading("error"); + }); + useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 + + useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得 return ( { setCurrentTrain, currentTrainLoading, setCurrentTrainLoading, + getCurrentTrain, }} > {children} diff --git a/trainbaseview.js b/trainbaseview.js index 7486fd9..d5b9f1c 100644 --- a/trainbaseview.js +++ b/trainbaseview.js @@ -36,7 +36,7 @@ export default function TrainBase({ route, navigation }) { setSupportMultipleWindows={false} onMessage={(event) => {}} /> - {from == "LED" && ( + {(from == "LED" || from == "AllTrainDiagramView") && ( navigate("menu")} + onPress={() => + navigate(from == "AllTrainDiagramView" ? "AllTrainIDList" : "menu") + } >