path修正
This commit is contained in:
22
MenuPage.tsx
22
MenuPage.tsx
@@ -6,19 +6,19 @@ import Constants from "expo-constants";
|
|||||||
import { Dimensions, StatusBar } from "react-native";
|
import { Dimensions, StatusBar } from "react-native";
|
||||||
|
|
||||||
import { SheetManager } from "react-native-actions-sheet";
|
import { SheetManager } from "react-native-actions-sheet";
|
||||||
import { AS } from "./storageControl";
|
import { AS } from "@/storageControl";
|
||||||
import TrainBase from "./components/trainbaseview";
|
import TrainBase from "@/components/trainbaseview";
|
||||||
import HowTo from "./howto";
|
import HowTo from "@/howto";
|
||||||
import Menu from "./menu";
|
import { Menu } from "@/menu";
|
||||||
import News from "./components/news";
|
import News from "@/components/news";
|
||||||
import Setting from "./components/Settings/settings";
|
import Setting from "@/components/Settings/settings";
|
||||||
import { useFavoriteStation } from "./stateBox/useFavoriteStation";
|
import { useFavoriteStation } from "@/stateBox/useFavoriteStation";
|
||||||
import { optionData } from "./lib/stackOption";
|
import { optionData } from "@/lib/stackOption";
|
||||||
import AllTrainDiagramView from "./components/AllTrainDiagramView";
|
import AllTrainDiagramView from "@/components/AllTrainDiagramView";
|
||||||
import { useNavigation } from "@react-navigation/native";
|
import { useNavigation } from "@react-navigation/native";
|
||||||
import { news } from "./config/newsUpdate";
|
import { news } from "@/config/newsUpdate";
|
||||||
import { useBottomTabBarHeight } from "@react-navigation/bottom-tabs";
|
import { useBottomTabBarHeight } from "@react-navigation/bottom-tabs";
|
||||||
import GeneralWebView from "./GeneralWebView";
|
import GeneralWebView from "@/GeneralWebView";
|
||||||
import { StationDiagramView } from "@/components/StationDiagram/StationDiagramView";
|
import { StationDiagramView } from "@/components/StationDiagram/StationDiagramView";
|
||||||
const Stack = createStackNavigator();
|
const Stack = createStackNavigator();
|
||||||
|
|
||||||
|
@@ -1,17 +1,21 @@
|
|||||||
import lineColorList from "@/assets/originData/lineColorList";
|
import lineColorList from "@/assets/originData/lineColorList";
|
||||||
import { customTrainDataDetector } from "@/components/custom-train-data";
|
|
||||||
import { StationNumberMaker } from "@/components/駅名表/StationNumberMaker";
|
import { StationNumberMaker } from "@/components/駅名表/StationNumberMaker";
|
||||||
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
||||||
import { CustomTrainData, trainTypeID } from "@/lib/CommonTypes";
|
import {
|
||||||
|
CustomTrainData,
|
||||||
|
eachTrainDiagramType,
|
||||||
|
StationProps,
|
||||||
|
} from "@/lib/CommonTypes";
|
||||||
import { getCurrentTrainData } from "@/lib/getCurrentTrainData";
|
import { getCurrentTrainData } from "@/lib/getCurrentTrainData";
|
||||||
import { getTrainDelayStatus } from "@/lib/getTrainDelayStatus";
|
import { getTrainDelayStatus } from "@/lib/getTrainDelayStatus";
|
||||||
import { getTrainType } from "@/lib/getTrainType";
|
import { getTrainType } from "@/lib/getTrainType";
|
||||||
import { objectIsEmpty } from "@/lib/objectIsEmpty";
|
import { objectIsEmpty } from "@/lib/objectIsEmpty";
|
||||||
import { trainPosition } from "@/lib/trainPositionTextArray";
|
import { getTime, trainTimeFiltering } from "@/lib/trainTimeFiltering";
|
||||||
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
||||||
import { useAreaInfo } from "@/stateBox/useAreaInfo";
|
import { useAreaInfo } from "@/stateBox/useAreaInfo";
|
||||||
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
|
||||||
import { useStationList, StationProps } from "@/stateBox/useStationList";
|
import { useStationList } from "@/stateBox/useStationList";
|
||||||
|
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { Text, TouchableOpacity, View } from "react-native";
|
import { Text, TouchableOpacity, View } from "react-native";
|
||||||
@@ -30,112 +34,6 @@ export const FixedStation = ({ stationID }) => {
|
|||||||
: "white";
|
: "white";
|
||||||
////
|
////
|
||||||
|
|
||||||
const timeFiltering = (d) => {
|
|
||||||
const baseTime = 2;
|
|
||||||
if (currentTrain.filter((t) => t.num == d.train).length == 0) {
|
|
||||||
const date = dayjs();
|
|
||||||
const trainTime = date
|
|
||||||
.hour(parseInt(d.time.split(":")[0]))
|
|
||||||
.minute(parseInt(d.time.split(":")[1]));
|
|
||||||
|
|
||||||
if (date.isAfter(trainTime)) {
|
|
||||||
return false;
|
|
||||||
} else if (trainTime.diff(date) < baseTime * 60 * 60 * 1000) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
const Pos = trainPosition(
|
|
||||||
currentTrain.filter((t) => t.num == d.train)[0]
|
|
||||||
);
|
|
||||||
const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos;
|
|
||||||
const PrePos = Pos.isBetween ? Pos.Pos.from : "";
|
|
||||||
if (station[0].Station_JP == nextPos) {
|
|
||||||
if (d.lastStation != station[0].Station_JP) return true;
|
|
||||||
} else if (station[0].Station_JP == PrePos) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
let [h, m] = d.time.split(":");
|
|
||||||
let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay)
|
|
||||||
? 0
|
|
||||||
: currentTrain.filter((t) => t.num == d.train)[0].delay;
|
|
||||||
const date = dayjs();
|
|
||||||
let targetHour = parseInt(h);
|
|
||||||
|
|
||||||
// 4時を日付変更線として処理
|
|
||||||
if (targetHour < 4) {
|
|
||||||
targetHour += 24;
|
|
||||||
}
|
|
||||||
|
|
||||||
let currentHour = date.hour();
|
|
||||||
if (currentHour < 4) {
|
|
||||||
currentHour += 24;
|
|
||||||
}
|
|
||||||
|
|
||||||
const db = dayjs()
|
|
||||||
.hour(targetHour)
|
|
||||||
.minute(parseInt(m) + parseInt(delay));
|
|
||||||
const currentTime = dayjs().hour(currentHour);
|
|
||||||
|
|
||||||
return !currentTime.isAfter(db);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
type trainDataProps = {
|
|
||||||
train?: string;
|
|
||||||
lastStation?: string;
|
|
||||||
time?: string;
|
|
||||||
isThrough?: boolean;
|
|
||||||
};
|
|
||||||
const getTime = (stationDiagram, station) => {
|
|
||||||
const returnData = Object.keys(stationDiagram)
|
|
||||||
.map((trainNum) => {
|
|
||||||
let trainData: trainDataProps = {};
|
|
||||||
stationDiagram[trainNum].split("#").forEach((data) => {
|
|
||||||
if (data.match("着")) {
|
|
||||||
trainData.lastStation = data.split(",着,")[0];
|
|
||||||
}
|
|
||||||
if (data.match("着編")) {
|
|
||||||
trainData.lastStation = data.split(",着編,")[0];
|
|
||||||
}
|
|
||||||
if (data.split(",")[0] === station.Station_JP) {
|
|
||||||
if (data.match(",発,")) {
|
|
||||||
trainData.time = data.split(",発,")[1];
|
|
||||||
} else if (data.match(",発編,")) {
|
|
||||||
trainData.time = data.split(",発編,")[1];
|
|
||||||
} else if (data.match(",通編,")) {
|
|
||||||
trainData.time = data.split(",通編,")[1];
|
|
||||||
trainData.isThrough = true;
|
|
||||||
} else if (data.match(",着,")) {
|
|
||||||
trainData.time = data.split(",着,")[1];
|
|
||||||
} else if (data.match(",着編,")) {
|
|
||||||
trainData.time = data.split(",着編,")[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
train: trainNum,
|
|
||||||
time: trainData.time,
|
|
||||||
lastStation: trainData.lastStation,
|
|
||||||
isThrough: trainData.isThrough,
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.filter((d) => d.time);
|
|
||||||
return returnData.sort((a, b) => {
|
|
||||||
switch (true) {
|
|
||||||
case parseInt(a.time.split(":")[0]) < parseInt(b.time.split(":")[0]):
|
|
||||||
return -1;
|
|
||||||
case parseInt(a.time.split(":")[0]) > parseInt(b.time.split(":")[0]):
|
|
||||||
return 1;
|
|
||||||
case parseInt(a.time.split(":")[1]) < parseInt(b.time.split(":")[1]):
|
|
||||||
return -1;
|
|
||||||
case parseInt(a.time.split(":")[1]) > parseInt(b.time.split(":")[1]):
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const { allTrainDiagram } = useAllTrainDiagram();
|
const { allTrainDiagram } = useAllTrainDiagram();
|
||||||
const { areaInfo, areaStationID } = useAreaInfo();
|
const { areaInfo, areaStationID } = useAreaInfo();
|
||||||
const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表
|
const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表
|
||||||
@@ -162,7 +60,9 @@ export const FixedStation = ({ stationID }) => {
|
|||||||
setIsInfoArea(station.some((s) => areaStationID.includes(s.StationNumber)));
|
setIsInfoArea(station.some((s) => areaStationID.includes(s.StationNumber)));
|
||||||
}, [allTrainDiagram, station]);
|
}, [allTrainDiagram, station]);
|
||||||
|
|
||||||
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState([]);
|
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState<
|
||||||
|
eachTrainDiagramType[]
|
||||||
|
>([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
|
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
|
||||||
@@ -170,20 +70,15 @@ export const FixedStation = ({ stationID }) => {
|
|||||||
const getTimeData = getTime(stationDiagram, station[0]);
|
const getTimeData = getTime(stationDiagram, station[0]);
|
||||||
setTrainTimeAndNumber(getTimeData);
|
setTrainTimeAndNumber(getTimeData);
|
||||||
}, [stationDiagram]);
|
}, [stationDiagram]);
|
||||||
const [selectedTrain, setSelectedTrain] = useState<
|
const [selectedTrain, setSelectedTrain] = useState<eachTrainDiagramType[]>(
|
||||||
{
|
[]
|
||||||
isThrough?: boolean;
|
);
|
||||||
train?: string;
|
|
||||||
lastStation?: string;
|
|
||||||
time?: string;
|
|
||||||
}[]
|
|
||||||
>([]);
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!trainTimeAndNumber) return () => {};
|
if (!trainTimeAndNumber) return () => {};
|
||||||
if (!currentTrain) return () => {};
|
if (!currentTrain) return () => {};
|
||||||
const data = trainTimeAndNumber
|
const data = trainTimeAndNumber
|
||||||
.filter((d) => currentTrain.map((m) => m.num).includes(d.train)) //現在の列車に絞る[ToDo]
|
.filter((d) => currentTrain.map((m) => m.num).includes(d.train)) //現在の列車に絞る[ToDo]
|
||||||
.filter(timeFiltering)
|
.filter((d) => trainTimeFiltering({ d, currentTrain, station })) //時間フィルター
|
||||||
.filter((d) => !d.isThrough)
|
.filter((d) => !d.isThrough)
|
||||||
.filter((d) => d.lastStation != station[0].Station_JP); //最終列車表示設定
|
.filter((d) => d.lastStation != station[0].Station_JP); //最終列車表示設定
|
||||||
setSelectedTrain(data);
|
setSelectedTrain(data);
|
||||||
@@ -302,9 +197,11 @@ const FixedStationBoxEachTrain = ({ d, station }) => {
|
|||||||
currentTrainData,
|
currentTrainData,
|
||||||
station.Station_JP
|
station.Station_JP
|
||||||
)}`;
|
)}`;
|
||||||
const [train, setTrain] = useState<CustomTrainData>(getCurrentTrainData(d.train,currentTrain,allCustomTrainData));
|
const [train, setTrain] = useState<CustomTrainData>(
|
||||||
|
getCurrentTrainData(d.train, currentTrain, allCustomTrainData)
|
||||||
|
);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTrain(getCurrentTrainData(d.train,currentTrain,allCustomTrainData));
|
setTrain(getCurrentTrainData(d.train, currentTrain, allCustomTrainData));
|
||||||
}, [currentTrain, d.train]);
|
}, [currentTrain, d.train]);
|
||||||
const { name, color } = getTrainType({ type: train.type, whiteMode: true });
|
const { name, color } = getTrainType({ type: train.type, whiteMode: true });
|
||||||
return (
|
return (
|
||||||
|
@@ -1,12 +1,13 @@
|
|||||||
import lineColorList from "@/assets/originData/lineColorList";
|
import lineColorList from "@/assets/originData/lineColorList";
|
||||||
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
||||||
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
|
||||||
import { useStationList, StationProps } from "@/stateBox/useStationList";
|
import { useStationList } from "@/stateBox/useStationList";
|
||||||
|
import { StationProps } from "@/lib/CommonTypes";
|
||||||
import { FC, useEffect, useState } from "react";
|
import { FC, useEffect, useState } from "react";
|
||||||
import { Text, TouchableOpacity, View, Image } from "react-native";
|
import { Text, TouchableOpacity, View, Image } from "react-native";
|
||||||
import { getTrainType } from "@/lib/getTrainType";
|
import { getTrainType } from "@/lib/getTrainType";
|
||||||
import { trainPosition } from "@/lib/trainPositionTextArray";
|
import { trainPosition } from "@/lib/trainPositionTextArray";
|
||||||
import { StationNumberMaker } from "../../駅名表/StationNumberMaker";
|
import { StationNumberMaker } from "@/components/駅名表/StationNumberMaker";
|
||||||
import { lineListPair, stationIDPair } from "@/lib/getStationList";
|
import { lineListPair, stationIDPair } from "@/lib/getStationList";
|
||||||
import { findReversalPoints } from "@/lib/eachTrainInfoCoreLib/findReversalPoints";
|
import { findReversalPoints } from "@/lib/eachTrainInfoCoreLib/findReversalPoints";
|
||||||
import { CustomTrainData, trainTypeID } from "@/lib/CommonTypes";
|
import { CustomTrainData, trainTypeID } from "@/lib/CommonTypes";
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
import React, { FC, useState } from "react";
|
import React, { FC, useState } from "react";
|
||||||
import { View, Text, TouchableOpacity } from "react-native";
|
import { View, Text, TouchableOpacity } from "react-native";
|
||||||
import { useInterval } from "../../lib/useInterval";
|
import { useInterval } from "@/lib/useInterval";
|
||||||
|
|
||||||
import lineColorList from "../../assets/originData/lineColorList";
|
import lineColorList from "@/assets/originData/lineColorList";
|
||||||
import { StationProps } from "@/stateBox/useStationList";
|
import { StationProps } from "@/lib/CommonTypes";
|
||||||
type StationNumberProps = {
|
type StationNumberProps = {
|
||||||
currentStation: StationProps[];
|
currentStation: StationProps[];
|
||||||
active: boolean;
|
active: boolean;
|
||||||
|
@@ -1,24 +1,23 @@
|
|||||||
import React, { FC, useEffect, useState } from "react";
|
import React, { FC, useEffect, useState } from "react";
|
||||||
import { TouchableOpacity } from "react-native";
|
import { TouchableOpacity } from "react-native";
|
||||||
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
|
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
||||||
import { getTrainDelayStatus } from "../../lib/getTrainDelayStatus";
|
import { getTrainDelayStatus } from "@/lib/getTrainDelayStatus";
|
||||||
import { getTrainType } from "../../lib/getTrainType";
|
import { getTrainType } from "@/lib/getTrainType";
|
||||||
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
|
||||||
import { SheetManager } from "react-native-actions-sheet";
|
import { SheetManager } from "react-native-actions-sheet";
|
||||||
import { Description } from "./LED_inside_Component/Description";
|
import { Description } from "@/components/発車時刻表/LED_inside_Component/Description";
|
||||||
import { DependTime } from "./LED_inside_Component/DependTime";
|
import { DependTime } from "@/components/発車時刻表/LED_inside_Component/DependTime";
|
||||||
import { LastStation } from "./LED_inside_Component/LastStation";
|
import { LastStation } from "@/components/発車時刻表/LED_inside_Component/LastStation";
|
||||||
import { StatusAndDelay } from "./LED_inside_Component/StatusAndDelay";
|
import { StatusAndDelay } from "@/components/発車時刻表/LED_inside_Component/StatusAndDelay";
|
||||||
import { TrainName } from "./LED_inside_Component/TrainName";
|
import { TrainName } from "@/components/発車時刻表/LED_inside_Component/TrainName";
|
||||||
import { customTrainDataDetector } from "../custom-train-data";
|
import { TrainPosition } from "@/components/発車時刻表/LED_inside_Component/TrainPosition";
|
||||||
import { TrainPosition } from "./LED_inside_Component/TrainPosition";
|
import { StationPosPushDialog } from "@/components/発車時刻表/LED_inside_Component/TrainPositionDataPush";
|
||||||
import { StationPosPushDialog } from "./LED_inside_Component/TrainPositionDataPush";
|
import { StationPosDeleteDialog } from "@/components/発車時刻表/LED_inside_Component/TrainPositionDataDelete";
|
||||||
import { StationPosDeleteDialog } from "./LED_inside_Component/TrainPositionDataDelete";
|
import { useStationList } from "@/stateBox/useStationList";
|
||||||
import { useStationList } from "../../stateBox/useStationList";
|
|
||||||
import useInterval from "@/lib/useInterval";
|
import useInterval from "@/lib/useInterval";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
||||||
import { CustomTrainData, trainTypeID } from "@/lib/CommonTypes";
|
import { CustomTrainData, StationProps, trainTypeID } from "@/lib/CommonTypes";
|
||||||
import { getCurrentTrainData } from "@/lib/getCurrentTrainData";
|
import { getCurrentTrainData } from "@/lib/getCurrentTrainData";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -30,10 +29,7 @@ type Props = {
|
|||||||
};
|
};
|
||||||
trainIDSwitch: boolean;
|
trainIDSwitch: boolean;
|
||||||
trainDescriptionSwitch: boolean;
|
trainDescriptionSwitch: boolean;
|
||||||
station: {
|
station: StationProps;
|
||||||
Station_JP: string;
|
|
||||||
StationNumber: string;
|
|
||||||
};
|
|
||||||
navigate: (screen: string, data?: any) => void;
|
navigate: (screen: string, data?: any) => void;
|
||||||
openStationACFromEachTrainInfo: (station: string) => void;
|
openStationACFromEachTrainInfo: (station: string) => void;
|
||||||
};
|
};
|
||||||
|
@@ -1,18 +1,17 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect, FC } from "react";
|
||||||
import { View, useWindowDimensions } from "react-native";
|
import { View, useWindowDimensions } from "react-native";
|
||||||
import dayjs from "dayjs";
|
import { objectIsEmpty } from "@/lib/objectIsEmpty";
|
||||||
import { useInterval } from "../../lib/useInterval";
|
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
|
||||||
import { objectIsEmpty } from "../../lib/objectIsEmpty";
|
import { useAreaInfo } from "@/stateBox/useAreaInfo";
|
||||||
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
import { AS } from "@/storageControl";
|
||||||
import { useAreaInfo } from "../../stateBox/useAreaInfo";
|
import { Footer } from "@/components/発車時刻表/LED_Vision_Component/Footer";
|
||||||
import { AS } from "../../storageControl";
|
import { Header } from "@/components/発車時刻表/LED_Vision_Component/Header";
|
||||||
import { Footer } from "./LED_Vision_Component/Footer";
|
import { EachData } from "@/components/発車時刻表/EachData";
|
||||||
import { Header } from "./LED_Vision_Component/Header";
|
|
||||||
import { Description } from "./LED_inside_Component/Description";
|
|
||||||
import { EachData } from "./EachData";
|
|
||||||
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
||||||
import { trainPosition } from "@/lib/trainPositionTextArray";
|
import { AreaDescription } from "@/components/発車時刻表/LED_inside_Component/AreaDescription";
|
||||||
import { AreaDescription } from "./LED_inside_Component/AreaDescription";
|
import { getTime, trainTimeFiltering } from "@/lib/trainTimeFiltering";
|
||||||
|
import { eachTrainDiagramType, StationProps } from "@/lib/CommonTypes";
|
||||||
|
import { useNavigation } from "@react-navigation/native";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -43,10 +42,17 @@ import { AreaDescription } from "./LED_inside_Component/AreaDescription";
|
|||||||
* 9031M サンライズ瀬戸琴平(延長)(臨時?)
|
* 9031M サンライズ瀬戸琴平(延長)(臨時?)
|
||||||
* 9062D 四国まんなか千年ものがたり(臨時?)
|
* 9062D 四国まんなか千年ものがたり(臨時?)
|
||||||
*/
|
*/
|
||||||
export default function LED_vision(props) {
|
type props = {
|
||||||
const { station, navigate, openStationACFromEachTrainInfo } = props;
|
station: StationProps[];
|
||||||
|
};
|
||||||
|
export const LED_vision: FC<props> = (props) => {
|
||||||
|
const { station } = props;
|
||||||
|
|
||||||
|
const { navigate, addListener, isFocused } = useNavigation();
|
||||||
const { currentTrain } = useCurrentTrain();
|
const { currentTrain } = useCurrentTrain();
|
||||||
const [stationDiagram, setStationDiagram] = useState({}); //当該駅の全時刻表
|
const [stationDiagram, setStationDiagram] = useState<{
|
||||||
|
[key: string]: string;
|
||||||
|
}>({}); //当該駅の全時刻表
|
||||||
const [finalSwitch, setFinalSwitch] = useState(false);
|
const [finalSwitch, setFinalSwitch] = useState(false);
|
||||||
const [trainIDSwitch, setTrainIDSwitch] = useState(false);
|
const [trainIDSwitch, setTrainIDSwitch] = useState(false);
|
||||||
const [trainDescriptionSwitch, setTrainDescriptionSwitch] = useState(false);
|
const [trainDescriptionSwitch, setTrainDescriptionSwitch] = useState(false);
|
||||||
@@ -85,7 +91,9 @@ export default function LED_vision(props) {
|
|||||||
/*
|
/*
|
||||||
{lastStation: "当駅止", time: "12:34", train: "1234M"}
|
{lastStation: "当駅止", time: "12:34", train: "1234M"}
|
||||||
*/
|
*/
|
||||||
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState([]);
|
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState<
|
||||||
|
eachTrainDiagramType[]
|
||||||
|
>([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
|
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
|
||||||
@@ -94,102 +102,19 @@ export default function LED_vision(props) {
|
|||||||
setTrainTimeAndNumber(getTimeData);
|
setTrainTimeAndNumber(getTimeData);
|
||||||
}, [stationDiagram]);
|
}, [stationDiagram]);
|
||||||
|
|
||||||
const [selectedTrain, setSelectedTrain] = useState([]);
|
const [selectedTrain, setSelectedTrain] = useState<eachTrainDiagramType[]>(
|
||||||
|
[]
|
||||||
|
);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!trainTimeAndNumber) return () => {};
|
if (!trainTimeAndNumber) return () => {};
|
||||||
if (!currentTrain) return () => {};
|
if (!currentTrain) return () => {};
|
||||||
const data = trainTimeAndNumber
|
const data = trainTimeAndNumber
|
||||||
.filter((d) => currentTrain.map((m) => m.num).includes(d.train)) //現在の列車に絞る[ToDo]
|
.filter((d) => currentTrain.map((m) => m.num).includes(d.train)) //現在の列車に絞る[ToDo]
|
||||||
.filter(timeFiltering)
|
.filter((d) => trainTimeFiltering({ d, currentTrain, station })) //時間フィルター
|
||||||
.filter((d) => !!finalSwitch || d.lastStation != station[0].Station_JP) //最終列車表示設定
|
.filter((d) => !!finalSwitch || d.lastStation != station[0].Station_JP); //最終列車表示設定
|
||||||
setSelectedTrain(data);
|
setSelectedTrain(data);
|
||||||
}, [trainTimeAndNumber, currentTrain, finalSwitch]);
|
}, [trainTimeAndNumber, currentTrain, finalSwitch]);
|
||||||
|
|
||||||
const getTime = (stationDiagram, station) => {
|
|
||||||
const returnData = Object.keys(stationDiagram)
|
|
||||||
.map((trainNum) => {
|
|
||||||
let trainData = {};
|
|
||||||
stationDiagram[trainNum].split("#").forEach((data) => {
|
|
||||||
if (data.match("着")) {
|
|
||||||
trainData.lastStation = data.split(",着,")[0];
|
|
||||||
}
|
|
||||||
if (data.match("着編")) {
|
|
||||||
trainData.lastStation = data.split(",着編,")[0];
|
|
||||||
}
|
|
||||||
if (data.split(",")[0] === station.Station_JP) {
|
|
||||||
if (data.match(",発,")) {
|
|
||||||
trainData.time = data.split(",発,")[1];
|
|
||||||
}else if (data.match(",発編,")) {
|
|
||||||
trainData.time = data.split(",発編,")[1];
|
|
||||||
} else if (data.match(",通編,")) {
|
|
||||||
trainData.time = data.split(",通編,")[1];
|
|
||||||
trainData.isThrough = true;
|
|
||||||
} else if (data.match(",着,")) {
|
|
||||||
trainData.time = data.split(",着,")[1];
|
|
||||||
}else if (data.match(",着編,")) {
|
|
||||||
trainData.time = data.split(",着編,")[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
train: trainNum,
|
|
||||||
time: trainData.time,
|
|
||||||
lastStation: trainData.lastStation,
|
|
||||||
isThrough: trainData.isThrough,
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.filter((d) => d.time);
|
|
||||||
return returnData.sort((a, b) => {
|
|
||||||
switch (true) {
|
|
||||||
case parseInt(a.time.split(":")[0]) < parseInt(b.time.split(":")[0]):
|
|
||||||
return -1;
|
|
||||||
case parseInt(a.time.split(":")[0]) > parseInt(b.time.split(":")[0]):
|
|
||||||
return 1;
|
|
||||||
case parseInt(a.time.split(":")[1]) < parseInt(b.time.split(":")[1]):
|
|
||||||
return -1;
|
|
||||||
case parseInt(a.time.split(":")[1]) > parseInt(b.time.split(":")[1]):
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const timeFiltering = (d) => {
|
|
||||||
|
|
||||||
const baseTime = 2;
|
|
||||||
if (currentTrain.filter((t) => t.num == d.train).length == 0) {
|
|
||||||
const date = dayjs();
|
|
||||||
const trainTime = date
|
|
||||||
.hour(parseInt(d.time.split(":")[0]))
|
|
||||||
.minute(parseInt(d.time.split(":")[1]));
|
|
||||||
|
|
||||||
if (date.isAfter(trainTime)) {
|
|
||||||
return false;
|
|
||||||
} else if (trainTime.diff(date) < baseTime * 60 * 60 * 1000) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
const Pos = trainPosition(
|
|
||||||
currentTrain.filter((t) => t.num == d.train)[0]
|
|
||||||
);
|
|
||||||
const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos;
|
|
||||||
const PrePos = Pos.isBetween ? Pos.Pos.from : "";
|
|
||||||
if (station[0].Station_JP == nextPos) {
|
|
||||||
if(d.lastStation != station[0].Station_JP) return true;
|
|
||||||
} else if (station[0].Station_JP == PrePos) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const date = dayjs();
|
|
||||||
let [h, m] = d.time.split(":");
|
|
||||||
let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay)
|
|
||||||
? 0
|
|
||||||
: currentTrain.filter((t) => t.num == d.train)[0].delay;
|
|
||||||
const db = date.hour(parseInt(h)).minute(parseInt(m) + parseInt(delay));
|
|
||||||
return !date.isAfter(db);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const { width } = useWindowDimensions();
|
const { width } = useWindowDimensions();
|
||||||
const adjustedWidth = width * 0.98;
|
const adjustedWidth = width * 0.98;
|
||||||
return (
|
return (
|
||||||
@@ -210,7 +135,7 @@ export default function LED_vision(props) {
|
|||||||
trainIDSwitch,
|
trainIDSwitch,
|
||||||
trainDescriptionSwitch,
|
trainDescriptionSwitch,
|
||||||
navigate,
|
navigate,
|
||||||
openStationACFromEachTrainInfo,
|
openStationACFromEachTrainInfo: () => {},
|
||||||
}}
|
}}
|
||||||
station={station[0]}
|
station={station[0]}
|
||||||
key={d.train}
|
key={d.train}
|
||||||
@@ -236,4 +161,4 @@ export default function LED_vision(props) {
|
|||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
import React, { FC } from "react";
|
import React, { FC } from "react";
|
||||||
import { Text, View } from "react-native";
|
import { Text, View } from "react-native";
|
||||||
import { useWindowDimensions } from "react-native";
|
import { useWindowDimensions } from "react-native";
|
||||||
import lineColorList from "../../assets/originData/lineColorList";
|
import lineColorList from "@/assets/originData/lineColorList";
|
||||||
import { StationProps } from "@/stateBox/useStationList";
|
import { StationProps } from "@/lib/CommonTypes";
|
||||||
|
|
||||||
type props = {
|
type props = {
|
||||||
currentStation: StationProps[];
|
currentStation: StationProps[];
|
||||||
|
@@ -35,4 +35,24 @@ export type CustomTrainData = {
|
|||||||
isSeason?: boolean;
|
isSeason?: boolean;
|
||||||
vehicleFormation?: string;
|
vehicleFormation?: string;
|
||||||
trainInfoUrl?: string;
|
trainInfoUrl?: string;
|
||||||
|
};
|
||||||
|
export type eachTrainDiagramType = {
|
||||||
|
train: string;
|
||||||
|
time: string;
|
||||||
|
lastStation: string;
|
||||||
|
isThrough: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type StationProps = {
|
||||||
|
DispNum: string;
|
||||||
|
JrHpUrl?: string;
|
||||||
|
MyStation: string;
|
||||||
|
StationMap: string;
|
||||||
|
StationNumber: string | null;
|
||||||
|
StationTimeTable: string;
|
||||||
|
Station_EN: string;
|
||||||
|
Station_JP: string;
|
||||||
|
jslodApi: string;
|
||||||
|
lat: number;
|
||||||
|
lng: number;
|
||||||
};
|
};
|
112
lib/trainTimeFiltering.ts
Normal file
112
lib/trainTimeFiltering.ts
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
import dayjs from "dayjs";
|
||||||
|
import { trainDataType, trainPosition } from "@/lib/trainPositionTextArray";
|
||||||
|
import { eachTrainDiagramType, StationProps } from "@/lib/CommonTypes";
|
||||||
|
type trainDataProps = {
|
||||||
|
d: eachTrainDiagramType;
|
||||||
|
currentTrain: trainDataType[];
|
||||||
|
station: StationProps[];
|
||||||
|
};
|
||||||
|
export const trainTimeFiltering: (x: trainDataProps) => boolean = (props) => {
|
||||||
|
const { d, currentTrain, station } = props;
|
||||||
|
const baseTime = 2;
|
||||||
|
if (currentTrain.filter((t) => t.num == d.train).length == 0) {
|
||||||
|
const date = dayjs();
|
||||||
|
const trainTime = date
|
||||||
|
.hour(parseInt(d.time.split(":")[0]))
|
||||||
|
.minute(parseInt(d.time.split(":")[1]));
|
||||||
|
|
||||||
|
if (date.isAfter(trainTime)) {
|
||||||
|
return false;
|
||||||
|
} else if (trainTime.diff(date) < baseTime * 60 * 60 * 1000) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
const Pos = trainPosition(currentTrain.filter((t) => t.num == d.train)[0]);
|
||||||
|
const nextPos = Pos.isBetween ? Pos.Pos.to : Pos.Pos.Pos;
|
||||||
|
const PrePos = Pos.isBetween ? Pos.Pos.from : "";
|
||||||
|
if (station[0].Station_JP == nextPos) {
|
||||||
|
if (d.lastStation != station[0].Station_JP) return true;
|
||||||
|
} else if (station[0].Station_JP == PrePos) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let [h, m] = d.time.split(":");
|
||||||
|
let delay = isNaN(currentTrain.filter((t) => t.num == d.train)[0].delay)
|
||||||
|
? 0
|
||||||
|
: currentTrain.filter((t) => t.num == d.train)[0].delay;
|
||||||
|
const date = dayjs();
|
||||||
|
let targetHour = parseInt(h);
|
||||||
|
|
||||||
|
// 4時を日付変更線として処理
|
||||||
|
if (targetHour < 4) {
|
||||||
|
targetHour += 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
let currentHour = date.hour();
|
||||||
|
if (currentHour < 4) {
|
||||||
|
currentHour += 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
const db = dayjs()
|
||||||
|
.hour(targetHour)
|
||||||
|
.minute(parseInt(m) + parseInt(delay));
|
||||||
|
const currentTime = dayjs().hour(currentHour);
|
||||||
|
|
||||||
|
return !currentTime.isAfter(db);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
type getTimeProps = (stationDiagram: { [key: string]: string }, station: StationProps) => eachTrainDiagramType[];
|
||||||
|
export const getTime: getTimeProps = (stationDiagram, station) => {
|
||||||
|
const returnData = Object.keys(stationDiagram)
|
||||||
|
.map((trainNum) => {
|
||||||
|
let trainData: eachTrainDiagramType = {
|
||||||
|
time: "",
|
||||||
|
lastStation: "",
|
||||||
|
isThrough: false,
|
||||||
|
train: trainNum,
|
||||||
|
};
|
||||||
|
stationDiagram[trainNum].split("#").forEach((data) => {
|
||||||
|
if (data.match("着")) {
|
||||||
|
trainData.lastStation = data.split(",着,")[0];
|
||||||
|
}
|
||||||
|
if (data.match("着編")) {
|
||||||
|
trainData.lastStation = data.split(",着編,")[0];
|
||||||
|
}
|
||||||
|
if (data.split(",")[0] === station.Station_JP) {
|
||||||
|
if (data.match(",発,")) {
|
||||||
|
trainData.time = data.split(",発,")[1];
|
||||||
|
} else if (data.match(",発編,")) {
|
||||||
|
trainData.time = data.split(",発編,")[1];
|
||||||
|
} else if (data.match(",通編,")) {
|
||||||
|
trainData.time = data.split(",通編,")[1];
|
||||||
|
trainData.isThrough = true;
|
||||||
|
} else if (data.match(",着,")) {
|
||||||
|
trainData.time = data.split(",着,")[1];
|
||||||
|
} else if (data.match(",着編,")) {
|
||||||
|
trainData.time = data.split(",着編,")[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
train: trainNum,
|
||||||
|
time: trainData.time,
|
||||||
|
lastStation: trainData.lastStation,
|
||||||
|
isThrough: trainData.isThrough,
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.filter((d) => d.time);
|
||||||
|
return returnData.sort((a, b) => {
|
||||||
|
switch (true) {
|
||||||
|
case parseInt(a.time.split(":")[0]) < parseInt(b.time.split(":")[0]):
|
||||||
|
return -1;
|
||||||
|
case parseInt(a.time.split(":")[0]) > parseInt(b.time.split(":")[0]):
|
||||||
|
return 1;
|
||||||
|
case parseInt(a.time.split(":")[1]) < parseInt(b.time.split(":")[1]):
|
||||||
|
return -1;
|
||||||
|
case parseInt(a.time.split(":")[1]) > parseInt(b.time.split(":")[1]):
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
@@ -1,58 +1,54 @@
|
|||||||
import React, { useRef, useState, useEffect, useLayoutEffect } from "react";
|
import React, { useRef, useState, useEffect, useLayoutEffect, FC } from "react";
|
||||||
import {
|
import { Platform, View, ScrollView, LayoutAnimation } from "react-native";
|
||||||
Platform,
|
|
||||||
View,
|
|
||||||
ScrollView,
|
|
||||||
useWindowDimensions,
|
|
||||||
LayoutAnimation,
|
|
||||||
Text,
|
|
||||||
TouchableOpacity,
|
|
||||||
} from "react-native";
|
|
||||||
import Constants from "expo-constants";
|
import Constants from "expo-constants";
|
||||||
import {
|
import {
|
||||||
configureReanimatedLogger,
|
configureReanimatedLogger,
|
||||||
ReanimatedLogLevel,
|
ReanimatedLogLevel,
|
||||||
} from "react-native-reanimated";
|
} from "react-native-reanimated";
|
||||||
import StatusbarDetect from "./StatusbarDetect";
|
import StatusbarDetect from "@/StatusbarDetect";
|
||||||
|
|
||||||
import LED_vision from "./components/発車時刻表/LED_vidion";
|
import { LED_vision } from "@/components/発車時刻表/LED_vidion";
|
||||||
import { TitleBar } from "./components/Menu/TitleBar";
|
import { TitleBar } from "@/components/Menu/TitleBar";
|
||||||
import { FixedContentBottom } from "./components/Menu/FixedContentBottom";
|
import { FixedContentBottom } from "@/components/Menu/FixedContentBottom";
|
||||||
|
|
||||||
import { lineList, stationIDPair } from "./lib/getStationList";
|
import { lineList, stationIDPair } from "@/lib/getStationList";
|
||||||
import { useFavoriteStation } from "./stateBox/useFavoriteStation";
|
import { useFavoriteStation } from "@/stateBox/useFavoriteStation";
|
||||||
import { useNavigation } from "@react-navigation/native";
|
import { useNavigation } from "@react-navigation/native";
|
||||||
import { useStationList } from "./stateBox/useStationList";
|
import { useStationList } from "@/stateBox/useStationList";
|
||||||
import { TopMenuButton } from "@/components/Menu/TopMenuButton";
|
import { TopMenuButton } from "@/components/Menu/TopMenuButton";
|
||||||
import { JRSTraInfoBox } from "@/components/Menu/JRSTraInfoBox";
|
import { JRSTraInfoBox } from "@/components/Menu/JRSTraInfoBox";
|
||||||
import MapView, { Marker } from "react-native-maps";
|
import MapView, { Marker } from "react-native-maps";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { CarouselBox } from "@/components/Menu/Carousel/CarouselBox";
|
||||||
import { useBottomTabBarHeight } from "@react-navigation/bottom-tabs";
|
import { CarouselTypeChanger } from "@/components/Menu/Carousel/CarouselTypeChanger";
|
||||||
import { CarouselBox } from "./components/Menu/Carousel/CarouselBox";
|
import { useUserPosition } from "@/stateBox/useUserPosition";
|
||||||
import { CarouselTypeChanger } from "./components/Menu/Carousel/CarouselTypeChanger";
|
import { AS } from "@/storageControl";
|
||||||
import { useUserPosition } from "./stateBox/useUserPosition";
|
import { lineList_LineWebID } from "@/lib/getStationList";
|
||||||
import { AS } from "./storageControl";
|
import { StationProps } from "@/lib/CommonTypes";
|
||||||
import { lineList_LineWebID } from "./lib/getStationList";
|
import { LocationObject } from "expo-location";
|
||||||
import { Ionicons } from "@expo/vector-icons";
|
|
||||||
configureReanimatedLogger({
|
configureReanimatedLogger({
|
||||||
level: ReanimatedLogLevel.error, // Set the log level to error
|
level: ReanimatedLogLevel.error, // Set the log level to error
|
||||||
strict: true, // Reanimated runs in strict mode by default
|
strict: true, // Reanimated runs in strict mode by default
|
||||||
});
|
});
|
||||||
export default function Menu(props) {
|
|
||||||
|
type props = {
|
||||||
|
scrollRef: React.RefObject<ScrollView>;
|
||||||
|
mapHeight: number;
|
||||||
|
MapFullHeight: number;
|
||||||
|
mapMode: boolean;
|
||||||
|
setMapMode: React.Dispatch<React.SetStateAction<boolean>>;
|
||||||
|
};
|
||||||
|
export const Menu: FC<props> = (props) => {
|
||||||
const { scrollRef, mapHeight, MapFullHeight, mapMode, setMapMode } = props;
|
const { scrollRef, mapHeight, MapFullHeight, mapMode, setMapMode } = props;
|
||||||
const { navigate, addListener, isFocused } = useNavigation();
|
const { navigate } = useNavigation();
|
||||||
const { favoriteStation } = useFavoriteStation();
|
const { favoriteStation } = useFavoriteStation();
|
||||||
const { originalStationList, getStationDataFromNameBase } = useStationList();
|
const { originalStationList, getStationDataFromNameBase } = useStationList();
|
||||||
const { height, width } = useWindowDimensions();
|
const [stationListMode, setStationListMode] = useState<
|
||||||
const { bottom, left, right, top } = useSafeAreaInsets();
|
"position" | "favorite"
|
||||||
const tabBarHeight = useBottomTabBarHeight();
|
>("position");
|
||||||
const [stationListMode, setStationListMode] = useState(
|
|
||||||
/*<"position"|"favorite">*/ "position"
|
|
||||||
);
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
AS.getItem("stationListMode")
|
AS.getItem("stationListMode")
|
||||||
.then((res) => setStationListMode(res))
|
.then((res) => setStationListMode(res))
|
||||||
.catch((e) => {
|
.catch(() => {
|
||||||
// AS.setItem("stationListMode", "position");
|
// AS.setItem("stationListMode", "position");
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
@@ -92,11 +88,17 @@ export default function Menu(props) {
|
|||||||
};
|
};
|
||||||
//現在地基準の駅名標リストアップ機能
|
//現在地基準の駅名標リストアップ機能
|
||||||
const { position, locationStatus } = useUserPosition();
|
const { position, locationStatus } = useUserPosition();
|
||||||
|
|
||||||
|
const [nearPositionStation, setNearPositionStation] = useState<
|
||||||
|
StationProps[][]
|
||||||
|
>([]); //第三要素
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!position) return () => {};
|
if (!position) return () => {};
|
||||||
makeCurrentStation(position);
|
makeCurrentStation(position);
|
||||||
}, [position, stationListMode]);
|
}, [position, stationListMode]);
|
||||||
const makeCurrentStation = (location) => {
|
|
||||||
|
const makeCurrentStation = (location: LocationObject) => {
|
||||||
if (!originalStationList) return () => {};
|
if (!originalStationList) return () => {};
|
||||||
const findStationEachLine = (selectLine) => {
|
const findStationEachLine = (selectLine) => {
|
||||||
const searchArea = 0.055; //検索範囲
|
const searchArea = 0.055; //検索範囲
|
||||||
@@ -128,7 +130,7 @@ export default function Menu(props) {
|
|||||||
return NearStation;
|
return NearStation;
|
||||||
};
|
};
|
||||||
|
|
||||||
let _stList = lineList
|
let _stList: StationProps[] = lineList
|
||||||
.map((d) => findStationEachLine(originalStationList[d]))
|
.map((d) => findStationEachLine(originalStationList[d]))
|
||||||
.filter((d) => d.length > 0)
|
.filter((d) => d.length > 0)
|
||||||
.reduce((pre, current) => {
|
.reduce((pre, current) => {
|
||||||
@@ -137,7 +139,9 @@ export default function Menu(props) {
|
|||||||
}, []);
|
}, []);
|
||||||
if (_stList.length == 0) setNearPositionStation([]);
|
if (_stList.length == 0) setNearPositionStation([]);
|
||||||
else {
|
else {
|
||||||
let returnData = [];
|
console.log("hoge");
|
||||||
|
console.log(_stList);
|
||||||
|
let returnData: StationProps[][] = [];
|
||||||
_stList.forEach((d, index, array) => {
|
_stList.forEach((d, index, array) => {
|
||||||
const stationName = d.Station_JP;
|
const stationName = d.Station_JP;
|
||||||
if (returnData.findIndex((d) => d[0].Station_JP == stationName) != -1)
|
if (returnData.findIndex((d) => d[0].Station_JP == stationName) != -1)
|
||||||
@@ -166,19 +170,17 @@ export default function Menu(props) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const [nearPositionStation, setNearPositionStation] = useState([]); //第三要素
|
|
||||||
|
|
||||||
const [listIndex, setListIndex] = useState(0);
|
const [listIndex, setListIndex] = useState(0);
|
||||||
|
|
||||||
const [listUpStation, setListUpStation] = useState([]);
|
const [listUpStation, setListUpStation] = useState<StationProps[][]>([]);
|
||||||
const [isSearchMode, setisSearchMode] = useState(false);
|
const [isSearchMode, setisSearchMode] = useState(false);
|
||||||
const [input, setInput] = React.useState("");
|
const [input, setInput] = useState("");
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
if (!!isSearchMode) {
|
if (!!isSearchMode) {
|
||||||
const returnData = [];
|
const returnData = [];
|
||||||
if (!input || input == "") {
|
if (!input || input == "") {
|
||||||
Object.keys(lineList_LineWebID).forEach((d, indexBase) => {
|
Object.keys(lineList_LineWebID).forEach((d) => {
|
||||||
originalStationList[d].forEach((D, index) => {
|
originalStationList[d].forEach((D) => {
|
||||||
if (
|
if (
|
||||||
isSearchMode &&
|
isSearchMode &&
|
||||||
isSearchMode != stationIDPair[lineList_LineWebID[d]]
|
isSearchMode != stationIDPair[lineList_LineWebID[d]]
|
||||||
@@ -196,12 +198,16 @@ export default function Menu(props) {
|
|||||||
const hoge = getStationDataFromNameBase(input);
|
const hoge = getStationDataFromNameBase(input);
|
||||||
hoge.forEach((d, index, array) => {
|
hoge.forEach((d, index, array) => {
|
||||||
const stationName = d.Station_JP;
|
const stationName = d.Station_JP;
|
||||||
if (returnData.findIndex((d1) => d1[0].Station_JP == stationName) != -1)
|
if (
|
||||||
|
returnData.findIndex((d1) => d1[0].Station_JP == stationName) != -1
|
||||||
|
)
|
||||||
return;
|
return;
|
||||||
returnData.push(array.filter((d2) => d2.Station_JP == stationName));
|
returnData.push(array.filter((d2) => d2.Station_JP == stationName));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (JSON.stringify(returnData) == JSON.stringify(listUpStation)) return;
|
if (JSON.stringify(returnData) == JSON.stringify(listUpStation)) return;
|
||||||
|
console.log("returnData");
|
||||||
|
console.log(returnData);
|
||||||
setListUpStation(returnData);
|
setListUpStation(returnData);
|
||||||
} else if (stationListMode == "position") {
|
} else if (stationListMode == "position") {
|
||||||
const returnData = nearPositionStation.filter((d) => d != undefined);
|
const returnData = nearPositionStation.filter((d) => d != undefined);
|
||||||
@@ -242,8 +248,8 @@ export default function Menu(props) {
|
|||||||
if (mapMode) {
|
if (mapMode) {
|
||||||
mapsRef?.current.fitToCoordinates(
|
mapsRef?.current.fitToCoordinates(
|
||||||
listUpStation.map((d) => ({
|
listUpStation.map((d) => ({
|
||||||
latitude: parseFloat(d[0].lat),
|
latitude: d[0].lat,
|
||||||
longitude: parseFloat(d[0].lng),
|
longitude: d[0].lng,
|
||||||
})),
|
})),
|
||||||
{ edgePadding: { top: 80, bottom: 120, left: 50, right: 50 } } // Add margin values here
|
{ edgePadding: { top: 80, bottom: 120, left: 50, right: 50 } } // Add margin values here
|
||||||
);
|
);
|
||||||
@@ -261,24 +267,7 @@ export default function Menu(props) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<StatusbarDetect />
|
<StatusbarDetect />
|
||||||
{!mapMode ? (
|
{!mapMode ? <TitleBar /> : <></>}
|
||||||
<TitleBar />
|
|
||||||
) : (
|
|
||||||
<></>
|
|
||||||
// <Text
|
|
||||||
// style={{
|
|
||||||
// fontSize: 30,
|
|
||||||
// color: "#0099CC",
|
|
||||||
// fontWeight: "bold",
|
|
||||||
// position: "absolute",
|
|
||||||
// top: 0,
|
|
||||||
// zIndex: 1000,
|
|
||||||
// fontStyle: "italic",
|
|
||||||
// }}
|
|
||||||
// >
|
|
||||||
// JRShikoku RailScope
|
|
||||||
// </Text>
|
|
||||||
)}
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
ref={scrollRef}
|
ref={scrollRef}
|
||||||
snapToStart={false}
|
snapToStart={false}
|
||||||
@@ -334,8 +323,8 @@ export default function Menu(props) {
|
|||||||
<Marker
|
<Marker
|
||||||
key={index + StationNumber}
|
key={index + StationNumber}
|
||||||
coordinate={{
|
coordinate={{
|
||||||
latitude: parseFloat(lat),
|
latitude: lat,
|
||||||
longitude: parseFloat(lng),
|
longitude: lng,
|
||||||
}}
|
}}
|
||||||
image={require("@/assets/reccha-small.png")}
|
image={require("@/assets/reccha-small.png")}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
@@ -344,8 +333,8 @@ export default function Menu(props) {
|
|||||||
if (mapsRef.current) {
|
if (mapsRef.current) {
|
||||||
mapsRef.current.animateToRegion(
|
mapsRef.current.animateToRegion(
|
||||||
{
|
{
|
||||||
latitude: parseFloat(lat),
|
latitude: lat,
|
||||||
longitude: parseFloat(lng),
|
longitude: lng,
|
||||||
latitudeDelta: 0.05,
|
latitudeDelta: 0.05,
|
||||||
longitudeDelta: 0.05,
|
longitudeDelta: 0.05,
|
||||||
},
|
},
|
||||||
@@ -401,11 +390,7 @@ export default function Menu(props) {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{listUpStation[listIndex] && (
|
{listUpStation[listIndex] && (
|
||||||
<LED_vision
|
<LED_vision station={listUpStation[listIndex]} />
|
||||||
station={listUpStation[listIndex]}
|
|
||||||
navigate={navigate}
|
|
||||||
openStationACFromEachTrainInfo={() => {}}
|
|
||||||
/>
|
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
@@ -433,4 +418,4 @@ export default function Menu(props) {
|
|||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
}
|
};
|
@@ -6,10 +6,10 @@ import React, {
|
|||||||
useRef,
|
useRef,
|
||||||
FC,
|
FC,
|
||||||
} from "react";
|
} from "react";
|
||||||
import { HeaderConfig } from "../lib/HeaderConfig";
|
import { HeaderConfig } from "@/lib/HeaderConfig";
|
||||||
|
|
||||||
import useInterval from "../lib/useInterval";
|
import useInterval from "@/lib/useInterval";
|
||||||
import { useStationList } from "./useStationList";
|
import { useStationList } from "@/stateBox/useStationList";
|
||||||
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
||||||
import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData";
|
import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData";
|
||||||
import { trainDataType } from "@/lib/trainPositionTextArray";
|
import { trainDataType } from "@/lib/trainPositionTextArray";
|
||||||
@@ -167,7 +167,6 @@ export const CurrentTrainProvider:FC<props> = ({ children }) => {
|
|||||||
) => {
|
) => {
|
||||||
//e:trainNumber
|
//e:trainNumber
|
||||||
if (!currentTrain.length) return;
|
if (!currentTrain.length) return;
|
||||||
console.log(currentTrain);
|
|
||||||
return checkDuplicateTrainData(
|
return checkDuplicateTrainData(
|
||||||
currentTrain.filter((d) => d.num == e),
|
currentTrain.filter((d) => d.num == e),
|
||||||
stationList
|
stationList
|
||||||
|
@@ -6,8 +6,9 @@ import React, {
|
|||||||
useLayoutEffect,
|
useLayoutEffect,
|
||||||
FC,
|
FC,
|
||||||
} from "react";
|
} from "react";
|
||||||
import { AS } from "../storageControl";
|
import { AS } from "@/storageControl";
|
||||||
import { StationProps, useStationList } from "./useStationList";
|
import { useStationList } from "@/stateBox/useStationList";
|
||||||
|
import { StationProps } from "@/lib/CommonTypes";
|
||||||
const initialState = {
|
const initialState = {
|
||||||
favoriteStation: [],
|
favoriteStation: [],
|
||||||
setFavoriteStation: () => {},
|
setFavoriteStation: () => {},
|
||||||
|
@@ -9,20 +9,8 @@ import {
|
|||||||
lineList,
|
lineList,
|
||||||
getStationList,
|
getStationList,
|
||||||
lineList_LineWebID,
|
lineList_LineWebID,
|
||||||
} from "../lib/getStationList";
|
} from "@/lib/getStationList";
|
||||||
export type StationProps = {
|
import { StationProps } from "@/lib/CommonTypes";
|
||||||
DispNum: string;
|
|
||||||
JrHpUrl: string;
|
|
||||||
MyStation: string;
|
|
||||||
StationMap: string;
|
|
||||||
StationNumber: string | null;
|
|
||||||
StationTimeTable: string;
|
|
||||||
Station_EN: string;
|
|
||||||
Station_JP: string;
|
|
||||||
jslodApi: string;
|
|
||||||
lat: number;
|
|
||||||
lng: number;
|
|
||||||
};
|
|
||||||
type initialStateType = {
|
type initialStateType = {
|
||||||
originalStationList: StationProps[][];
|
originalStationList: StationProps[][];
|
||||||
setOriginalStationList: React.Dispatch<React.SetStateAction<StationProps[]>>;
|
setOriginalStationList: React.Dispatch<React.SetStateAction<StationProps[]>>;
|
||||||
|
Reference in New Issue
Block a user