diff --git a/App.js b/App.js
index 87592e3..da40942 100644
--- a/App.js
+++ b/App.js
@@ -3,6 +3,7 @@ import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { Platform, UIManager } from "react-native";
+import { GestureHandlerRootView } from "react-native-gesture-handler";
import { UpdateAsync } from "./UpdateAsync.js";
import { AS } from "./storageControl";
import TNDView from "./ndView";
@@ -45,26 +46,28 @@ export default function App() {
useEffect(() => UpdateAsync(), []);
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
export function AppContainer() {
- const { setBusAndTrainData } = useBusAndTrainData();
+ const { setBusAndTrainData, setTrainPairData } = useBusAndTrainData();
useEffect(() => {
AS.getItem("busAndTrain")
.then((d) => {
@@ -82,6 +85,23 @@ export function AppContainer() {
});
});
}, []);
+ useEffect(() => {
+ AS.getItem("trainPairData")
+ .then((d) => {
+ const returnData = JSON.parse(d);
+ setTrainPairData(returnData);
+ })
+ .catch(() => {
+ fetch(
+ "https://script.google.com/macros/s/AKfycbyoBH7_rBwzPmhU1ghRBNTAVuvGltIrZtWxE07gDdhGGlDL9Ip2qk3pFM5u2xtRBl8/exec"
+ )
+ .then((d) => d.json())
+ .then((d) => {
+ setTrainPairData(d);
+ AS.setItem("trainPairData", JSON.stringify(d));
+ });
+ });
+ }, []);
const { areaInfo, setAreaInfo } = useAreaInfo();
const getAreaData = () =>
diff --git a/components/ActionSheetComponents/EachTrainInfo.js b/components/ActionSheetComponents/EachTrainInfo.js
index 5afc5d5..de91f14 100644
--- a/components/ActionSheetComponents/EachTrainInfo.js
+++ b/components/ActionSheetComponents/EachTrainInfo.js
@@ -30,6 +30,8 @@ import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
import dayjs from "dayjs";
import { getTrainType } from "../../lib/getTrainType";
import { customTrainDataDetector } from "../custom-train-data";
+import { useBusAndTrainData } from "../../stateBox/useBusAndTrainData";
+import { Swipeable } from "react-native-gesture-handler";
export const EachTrainInfo = (props) => {
if (!props.payload) return <>>;
@@ -46,14 +48,26 @@ export const EachTrainInfo = (props) => {
const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
const { currentTrain } = useCurrentTrain();
+ const { trainPairData } = useBusAndTrainData();
const [currentTrainData, setCurrentTrainData] = useState([]);
const [nearTrainIDList, setNearTrainIDList] = useState([]);
+ const [showNearTrain, setShowNearTrain] = useState([]);
+ const [isConcatNear, setIsConcatNear] = useState(false);
+ //裏列車探索
useEffect(() => {
+ const trainPairList = {};
+ trainPairData.forEach((d) => {
+ trainPairList[Object.keys(d)[0]] = d[Object.keys(d)[0]];
+ });
const returnArray = [];
if (!data.trainNum) return;
+ if (trainPairList[data.trainNum]) {
+ returnArray.push(Object.keys(trainPairList[data.trainNum])[0]);
+ }
if (
+ // 列番が4xxDまたは5xxDの場合はxxDの列番を検索
new RegExp(/^4[1-9]\d\d[DM]$/).test(data.trainNum) ||
new RegExp(/^5[1-7]\d\d[DM]$/).test(data.trainNum)
) {
@@ -62,15 +76,53 @@ export const EachTrainInfo = (props) => {
}
}
if (new RegExp(/^[1-9]\d\d[DM]$/).test(data.trainNum)) {
- if (trainList["4" + data.trainNum]) {
- returnArray.push("4" + data.trainNum);
- }
- if (trainList["5" + data.trainNum]) {
- returnArray.push("5" + data.trainNum);
- }
+ // 列番がxxDの場合は4xxDと5xxDの列番を検索
+ if (trainList["4" + data.trainNum]) returnArray.push("4" + data.trainNum);
+ if (trainList["5" + data.trainNum]) returnArray.push("5" + data.trainNum);
}
setNearTrainIDList(returnArray);
+ if (!returnArray[0]) return;
+ const TD = trainList[returnArray[0]];
+ if (!TD) return;
+ const TDArray = TD.split("#").filter((d) => d != "");
+ setShowNearTrain(TDArray);
}, [data]);
+
+ const openBackTrainInfo = (stationInfo, currentTrainIndex) => {
+ console.log(trainData);
+ console.log(showNearTrain);
+ const stationPosition = showNearTrain.findIndex(
+ (d) => d.split(",")[0] == stationInfo
+ );
+ const relationBackTrain =
+ stationPosition == 0
+ ? "head"
+ : stationPosition == showNearTrain.length - 1
+ ? "tail"
+ : "middle";
+ if (relationBackTrain === "head") {
+ const migrationTrainData = [
+ ...trainData.slice(0, currentTrainIndex),
+ ...showNearTrain,
+ ];
+ setTrainData(migrationTrainData);
+ } else if (relationBackTrain === "tail") {
+ const migrationTrainData = [
+ ...showNearTrain.slice(0, showNearTrain.length - 1),
+ ...trainData.slice(currentTrainIndex),
+ ];
+ setTrainData(migrationTrainData);
+ } else if (relationBackTrain === "middle") {
+ const migrationTrainData = [
+ ...trainData.slice(0, currentTrainIndex),
+ ...showNearTrain.slice(0, stationPosition),
+ ...trainData.slice(currentTrainIndex),
+ ];
+ setTrainData(migrationTrainData);
+ }
+ setIsConcatNear(true);
+ };
+
const openTrainInfo = (d) => {
const train = customTrainDataDetector(d);
let TrainNumber = "";
@@ -90,9 +142,7 @@ export const EachTrainInfo = (props) => {
originalStationList,
from: "AllTrainDiagramView",
};
- SheetManager.show("EachTrainInfo", {
- payload,
- });
+ //SheetManager.show("EachTrainInfo", { payload });
};
useEffect(() => {
setCurrentTrainData(
@@ -349,16 +399,10 @@ export const EachTrainInfo = (props) => {
: ""}
- {
- nearTrainIDList.length && openTrainInfo(nearTrainIDList[0]);
- }}
- >
-
- {data.trainNum}
- {nearTrainIDList.length ? "..." : ""}
-
-
+
+ {data.trainNum}
+ {isConcatNear ? ` + ${nearTrainIDList}` : ""}
+
{data.limited != undefined &&
getType(data.limited.split(":")[0]) &&
@@ -553,6 +597,9 @@ export const EachTrainInfo = (props) => {
points={points}
currentTrainData={currentTrainData}
openStationACFromEachTrainInfo={openStationACFromEachTrainInfo}
+ headAndTail={showNearTrain.map((d) => d.split(",")[0])}
+ openBackTrainInfo={openBackTrainInfo}
+ isConcatNear={isConcatNear}
/>
))}
@@ -583,6 +630,9 @@ const StationButton = ({
points,
currentTrainData,
openStationACFromEachTrainInfo,
+ headAndTail,
+ openBackTrainInfo,
+ isConcatNear,
}) => {
const [station, se, time] = i.split(","); // 阿波池田,発,6:21
const Stations = stationList
@@ -618,94 +668,120 @@ const StationButton = ({
.add(isNaN(currentTrainData?.delay) ? 0 : currentTrainData.delay, "minute");
const timeString = dates.format("HH:mm").split(":");
+ const StationNames = Stations && Stations[0]?.StationName;
+ const [isConnected, setIsConnected] = useState(
+ headAndTail.includes(StationNames)
+ );
+ const swipagleRef = useRef(null);
return (
- openStationACFromEachTrainInfo(station)}
+ {
+ openBackTrainInfo(station, index);
+ swipagleRef.current.close();
+ }}
+ renderRightActions={
+ isConnected && !isConcatNear
+ ? (progress, dragX) => {
+ //openBackTrainInfo(station, index);
+ return ;
+ }
+ : null
+ }
>
-
-
- {lineIDs.map((lineID, index) => (
-
-
-
- {lineIDs[index]}
- {"\n"}
- {EachIDs[index]}
-
-
-
- ))}
-
-
- {station}
-
- {points && points.findIndex((d) => d == index) >= 0 ? (
- 🚊
- ) : null}
- {!isNaN(currentTrainData?.delay) && currentTrainData?.delay != 0 && (
-
- {time}
-
- )}
- openStationACFromEachTrainInfo(station)}
+ key={station}
+ >
+
+
- {timeString[0]}:{timeString[1]}
-
-
- {se?.replace("発", "出発").replace("着", "到着")}
-
+ {lineIDs.map((lineID, index) => (
+
+
+
+ {lineIDs[index]}
+ {"\n"}
+ {EachIDs[index]}
+
+
+
+ ))}
+
+
+ {station}
+
+ {points && points.findIndex((d) => d == index) >= 0 ? (
+ 🚊
+ ) : null}
+ {!isNaN(currentTrainData?.delay) &&
+ currentTrainData?.delay != 0 && (
+
+ {time}
+
+ )}
+
+ {timeString[0]}:{timeString[1]}
+
+
+ {se?.replace("発", "出発").replace("着", "到着")}
+
+
-
-
+
+
);
};
diff --git a/stateBox/useBusAndTrainData.js b/stateBox/useBusAndTrainData.js
index a4791b5..e8694bd 100644
--- a/stateBox/useBusAndTrainData.js
+++ b/stateBox/useBusAndTrainData.js
@@ -2,6 +2,8 @@ import React, { createContext, useContext, useState } from "react";
const initialState = {
busAndTrainData: [],
setBusAndTrainData: () => {},
+ trainPairData: [],
+ setTrainPairData: () => {},
};
const BusAndTrainDataContext = createContext(initialState);
@@ -12,10 +14,16 @@ export const useBusAndTrainData = () => {
export const BusAndTrainDataProvider = ({ children }) => {
const [busAndTrainData, setBusAndTrainData] = useState([]);
+ const [trainPairData, setTrainPairData] = useState([]);
return (
{children}