diff --git a/components/ActionSheetComponents/EachTrainInfo.js b/components/ActionSheetComponents/EachTrainInfo.js
index f369f3d..1d4701b 100644
--- a/components/ActionSheetComponents/EachTrainInfo.js
+++ b/components/ActionSheetComponents/EachTrainInfo.js
@@ -29,7 +29,7 @@ import { LongHeader } from "./EachTrainInfo/LongHeader";
import { ShortHeader } from "./EachTrainInfo/ShortHeader";
import { ScrollStickyContent } from "./EachTrainInfo/ScrollStickyContent";
import { LandscapeTrainInfo } from "./EachTrainInfo/LandscapeTrainInfo";
-
+import { EachTrainInfoCore } from "./EachTrainInfoCore";
export const EachTrainInfo = (props) => {
if (!props.payload) return <>>;
@@ -49,657 +49,3 @@ export const EachTrainInfo = (props) => {
);
};
-const styles = StyleSheet.create({
- header: {
- justifyContent: "center",
- alignItems: "center",
- left: 0,
- right: 0,
- //paddingTop: 10,
- position: "absolute",
- zIndex: 1,
- backgroundColor: "f0f0f0",
- },
- headerText: {
- color: "#fff",
- fontSize: 25,
- fontWeight: "bold",
- textAlign: "center",
- },
-});
-const EachTrainInfoCore = ({
- actionSheetRef,
- data,
- navigate,
- originalStationList,
- openStationACFromEachTrainInfo,
- from,
-}) => {
- // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false);
-
- const { currentTrain } = useCurrentTrain();
- const [currentTrainData, setCurrentTrainData] = useState();
-
- // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false);
-
- useEffect(() => {
- console.log(currentTrain.length);
- if (!currentTrain.length) return;
- setCurrentTrainData(
- checkDuplicateTrainData(
- currentTrain.filter((d) => d.num == data.trainNum)
- )
- );
- }, [currentTrain]);
-
- //bconst insets = useSafeAreaInsets();
-
- const [headStation, setHeadStation] = useState();
- const [tailStation, setTailStation] = useState();
- const [isConcatNear, setIsConcatNear] = useState(false);
- const [showNearTrain, setShowNearTrain] = useState([]);
- const [nearTrainIDList, setNearTrainIDList] = useState([]);
- const { getInfluencedTrainData } = useBusAndTrainData();
- const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
- const [currentPosition, setCurrentPosition] = useState([]);
- const [trainData, setTrainData] = useState([]);
- const stationList =
- originalStationList &&
- lineList.map((d) =>
- originalStationList[d].map((a) => ({
- StationNumber: a.StationNumber,
- StationName: a.Station_JP,
- }))
- );
-
- const getStationData = (stationName) => {
- const Stations = stationList.map((a) =>
- a.filter((d) => d.StationName == stationName)
- );
- const Station =
- Stations &&
- Stations.reduce((newArray, e) => {
- return newArray.concat(e);
- }, []);
- if (!Station[0]) return [];
- return Station.map((d) => d.StationNumber)[0];
- };
- const stopStationIDList = 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);
- return StationNumbers[0];
- });
- function findReversalPoints(array) {
- try {
- // arrayは現在位置の駅ID(駅在宅の場合は1つの配列、駅間の場合は2つの配列)
- // stopStationIDListは停車駅の駅IDの配列
- if (!stopStationIDList.length) return [];
- // arrayが二次元配列だったら早期リターン
- if (!array instanceof Array) return [];
- if (!array.length) return [];
- if (array[0] instanceof Array) return [];
- const arrayNumber = array.map((d) => ({
- line: d
- .split("")
- .filter((s) => "A" < s && s < "Z")
- .join(""),
- ID: d
- .split("")
- .filter((s) => "0" <= s && s <= "9")
- .join(""),
- }));
- const stopStationIDListNumber = stopStationIDList.map((d) => {
- if (!d) return { line: [], ID: [] };
- return {
- line: d
- .split("")
- .filter((s) => "A" < s && s < "Z")
- .join(""),
- ID: d
- .split("")
- .filter((s) => "0" <= s && s <= "9")
- .join(""),
- };
- });
- // 完全一致
- if (array.length == 1) {
- const index = stopStationIDList.indexOf(array[0]);
- if (index != -1) return [index];
- // 通過駅の場合
- for (let i = 0; i < stopStationIDListNumber.length - 1; i++) {
- if (stopStationIDListNumber[i].ID < arrayNumber[0].ID) {
- if (stopStationIDListNumber[i + 1].ID > arrayNumber[0].ID) {
- return [i + 1];
- }
- }
- if (stopStationIDListNumber[i].ID > arrayNumber[0].ID) {
- if (stopStationIDListNumber[i + 1].ID < arrayNumber[0].ID) {
- return [i + 1];
- }
- }
- }
- }
- // 駅間の場合
- if (array.length == 2) {
- const index1 = stopStationIDList.indexOf(array[0]);
- const index2 = stopStationIDList.indexOf(array[1]);
- if (index1 != -1 && index2 != -1) {
- // 駅間で通過駅も無い場合
- if (index1 < index2) {
- if (index1 + 1 == index2) {
- return [index2];
- } else {
- const returnArray = [];
- for (let i = index1 + 1; i <= index2; i++) {
- returnArray.push(i);
- }
- return returnArray;
- }
- }
- if (index1 > index2) {
- if (index2 + 1 == index1) return [index1];
- else {
- const returnArray = [];
- for (let i = index2 + 1; i <= index1; i++) {
- returnArray.push(i);
- }
- return returnArray;
- }
- }
- } else {
- const getNearStationID = (stationID) => {
- for (let i = 0; i <= stopStationIDListNumber.length; i++) {
- if (stopStationIDListNumber[i].ID < stationID) {
- if (stopStationIDListNumber[i + 1].ID > stationID) {
- return i + 1;
- }
- }
- if (stopStationIDListNumber[i].ID > stationID) {
- if (stopStationIDListNumber[i + 1].ID < stationID) {
- return i + 1;
- }
- }
- }
- };
- let newIndex1 = index1;
- let newIndex2 = index2;
- if (index1 == -1) {
- newIndex1 = getNearStationID(arrayNumber[0].ID);
- }
- if (index2 == -1) {
- newIndex2 = getNearStationID(arrayNumber[1].ID);
- }
- if (newIndex1 && newIndex2) {
- return [newIndex1, newIndex2];
- }
-
- // 通過駅の場合
- }
-
- return [];
- }
- } catch (e) {
- console.log(e);
- }
- }
- useEffect(() => {
- if (trainData.length == 0) return;
- if (showNearTrain.length == 0) return;
- showNearTrain.forEach((d) => {
- const [station, se, time] = d.split(",");
-
- if (station == trainData[0].split(",")[0])
- setHeadStation(trainData[0].split(",")[0]);
- if (station == trainData[trainData.length - 1].split(",")[0])
- setTailStation(trainData[trainData.length - 1].split(",")[0]);
- });
- }, [trainData, showNearTrain]);
- //裏列車探索
- useEffect(() => {
- if (!data.trainNum) return;
- const [returnArray, TDArray] = getInfluencedTrainData(data.trainNum);
- setNearTrainIDList(returnArray);
- setShowNearTrain(TDArray);
- }, [data]);
- const scrollHandlers = useScrollHandlers("scrollview-1", actionSheetRef);
- const migrateTrainName = (string) => {
- return string
- .replace("マリン", "マリンライナー")
- .replace("ライナーライナー", "ライナー");
- };
- const getType = (string) => {
- switch (string) {
- case "express":
- return "特急";
- case "rapid":
- return "快速";
- default:
- return "";
- }
- };
-
- // 使用例
- const points =
- trainPositionSwitch == "true" ? findReversalPoints(currentPosition) : [];
- const { height, width } = useWindowDimensions();
- const [isLandscape, setIsLandscape] = useState(false);
- useEffect(() => {
- //currentTrainData.Pos = "鴨川~端岡"; //test
- if (!currentTrainData) return;
- 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(currentTrainData?.Pos)]);
- }
- }, [currentTrainData]);
- useEffect(() => {
- if (height / width > 1.5) {
- setIsLandscape(false);
- }
- if (height / width < 1.5) {
- setIsLandscape(true);
- }
- }, [width, height]);
- useEffect(() => {
- if (!data.trainNum) return;
- const TD = trainList[data.trainNum];
- if (!TD) {
- setTrainData([]);
- return;
- }
- setTrainData(TD.split("#").filter((d) => d != ""));
- }, [data]);
- useEffect(() => {
- //列車現在地アイコン表示スイッチ
- AS.getItem("trainPositionSwitch")
- .then((d) => {
- if (d) {
- setTrainPositionSwitch(d);
- } else {
- }
- })
- .catch((d) => AS.setItem("trainPositionSwitch", "false"));
- }, []);
-
- const openBackTrainInfo = (stationInfo, currentTrainIndex) => {
- const migrationArray = (stationInfo) => {
- const mainTrainStationPosition = trainData.findIndex(
- (d) => d.split(",")[0] == stationInfo
- );
-
- const relationMain = (() => {
- if (mainTrainStationPosition == 0) return "head";
- if (mainTrainStationPosition == trainData.length - 1) return "tail";
- return "middle";
- })();
-
- const subTrainStationPosition = showNearTrain.findIndex(
- (d) => d.split(",")[0] == stationInfo
- );
- const relationSub = (() => {
- if (subTrainStationPosition == 0) return "head";
- if (subTrainStationPosition == showNearTrain.length - 1) return "tail";
- return "middle";
- })();
-
- switch (relationMain) {
- case "head":
- if (relationSub == "head") {
- return;
- } else if (relationSub == "tail") {
- return [
- ...showNearTrain.slice(0, subTrainStationPosition),
- ...trainData,
- ];
- } else if (relationSub == "middle") {
- return [
- ...showNearTrain.slice(0, subTrainStationPosition),
- ...trainData,
- ];
- } else return;
- case "tail":
- if (relationSub == "head") {
- return [
- ...trainData.slice(0, mainTrainStationPosition),
- ...showNearTrain,
- ];
- } else if (relationSub == "tail") {
- return;
- } else if (relationSub == "middle") {
- return [
- ...trainData.slice(0, mainTrainStationPosition),
- ...showNearTrain.slice(subTrainStationPosition),
- ];
- } else return;
- case "middle":
- if (relationSub == "head") {
- return [
- ...trainData.slice(0, mainTrainStationPosition),
- ...showNearTrain,
- ];
- } else if (relationSub == "tail") {
- return [
- ...showNearTrain.slice(0, subTrainStationPosition),
- ...trainData.slice(mainTrainStationPosition),
- ];
- } else return;
- }
- };
- const array = migrationArray(stationInfo);
- if (!array) return;
- setTrainData(array);
- setIsConcatNear(true);
- };
-
- const openTrainInfo = (d) => {
- const train = customTrainDataDetector(d);
- let TrainNumber = "";
- if (train.trainNumDistance != undefined) {
- const timeInfo =
- parseInt(d.replace("M", "").replace("D", "")) - train.trainNumDistance;
- TrainNumber = timeInfo + "号";
- }
- const payload = {
- data: {
- trainNum: d,
- limited: `${getTrainType(train.type).data}:${
- train.trainName
- }${TrainNumber}`,
- },
- navigate,
- originalStationList,
- from: "AllTrainDiagramView",
- };
- SheetManager.hide("EachTrainInfo").then(() => {
- //0.1秒待機してから開く
- setTimeout(() => {
- SheetManager.show("EachTrainInfo", { payload });
- }, 1);
- });
- };
- return (
-
-
-
-
-
-
- {data.limited
- ? getType(data.limited.split(":")[0]) +
- migrateTrainName(
- data.limited.split(":")[1] ||
- (trainData.length > 0
- ? trainData[trainData.length - 1].split(",")[0] + "行き"
- : " ")
- )
- : ""}
-
-
-
- {data.trainNum}
- {isConcatNear ? ` + ${nearTrainIDList}` : ""}
-
-
- {data.limited != undefined &&
- getType(data.limited.split(":")[0]) &&
- !data.limited.split(":")[1].match("サンポート") && (
- {
- LayoutAnimation.easeInEaseOut(); //setLoadingDelayData(true);
- navigate("trainbase", {
- info: "train.html?tn=" + data.trainNum,
- from,
- });
- SheetManager.hide("EachTrainInfo");
- }}
- />
- )}
-
- {isLandscape ? (
- >
- ) : (
-
- )
- }
- topStickyContent={
-
- }
- >
- {headStation && !isConcatNear && (
- openBackTrainInfo(headStation)}
- style={{
- padding: 10,
- flexDirection: "row",
- borderColor: "blue",
- borderWidth: 1,
- margin: 10,
- borderRadius: 5,
- alignItems: "center",
- }}
- >
-
- 「本当の始発駅」を表示
-
-
- )}
- {/*
- ほげほげふがふが */}
-
- {trainData.map((i, index) =>
- i.split(",")[1] == "提" ? (
-
- ) : (
-
- )
- )}
- {tailStation && !isConcatNear && (
- openBackTrainInfo(tailStation)}
- style={{
- padding: 10,
- flexDirection: "row",
- borderColor: "blue",
- borderWidth: 1,
- margin: 10,
- borderRadius: 5,
- alignItems: "center",
- }}
- >
-
- 「本当の終着駅」を表示
-
-
- )}
-
-
-
-
-
-
-
-
- ) : (
- >
- ) : (
-
- )
- }
- longHeader={
- from == "AllTrainDiagramView" ? (
- <>>
- ) : (
-
- )
- }
- topStickyContent={
-
- }
- >
- {headStation && !isConcatNear && (
- openBackTrainInfo(headStation)}
- style={{
- padding: 10,
- flexDirection: "row",
- borderColor: "blue",
- borderWidth: 1,
- margin: 10,
- borderRadius: 5,
- alignItems: "center",
- }}
- >
-
- 「本当の始発駅」を表示
-
-
- )}
- {/*
- ほげほげふがふが */}
-
- {trainData.map((i, index) =>
- i.split(",")[1] == "提" ? (
-
- ) : (
-
- )
- )}
- {tailStation && !isConcatNear && (
- openBackTrainInfo(tailStation)}
- style={{
- padding: 10,
- flexDirection: "row",
- borderColor: "blue",
- borderWidth: 1,
- margin: 10,
- borderRadius: 5,
- alignItems: "center",
- }}
- >
-
- 「本当の終着駅」を表示
-
-
- )}
-
-
-
-
-
-
-
-
- )}
-
- );
-};
diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js
new file mode 100644
index 0000000..4e6dd2b
--- /dev/null
+++ b/components/ActionSheetComponents/EachTrainInfoCore.js
@@ -0,0 +1,686 @@
+import React, { useEffect, useState, useRef } from "react";
+import {
+ View,
+ LayoutAnimation,
+ Text,
+ TouchableOpacity,
+ Platform,
+ StyleSheet,
+ useWindowDimensions,
+} from "react-native";
+import { Ionicons } from "@expo/vector-icons";
+import ActionSheet, {
+ SheetManager,
+ useScrollHandlers,
+} from "react-native-actions-sheet";
+import { AS } from "../../storageControl";
+import trainList from "../../assets/originData/trainList";
+import { lineList } from "../../lib/getStationList";
+import { heightPercentageToDP } from "react-native-responsive-screen";
+import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
+import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
+import { getTrainType } from "../../lib/getTrainType";
+import { customTrainDataDetector } from "../custom-train-data";
+import { useBusAndTrainData } from "../../stateBox/useBusAndTrainData";
+import { EachStopList } from "./EachTrainInfo/EachStopList";
+import { DataFromButton } from "./EachTrainInfo/DataFromButton";
+import { DynamicHeaderScrollView } from "../DynamicHeaderScrollView";
+import { LongHeader } from "./EachTrainInfo/LongHeader";
+import { ShortHeader } from "./EachTrainInfo/ShortHeader";
+import { ScrollStickyContent } from "./EachTrainInfo/ScrollStickyContent";
+import { LandscapeTrainInfo } from "./EachTrainInfo/LandscapeTrainInfo";
+export const EachTrainInfoCore = ({
+ actionSheetRef,
+ data,
+ navigate,
+ originalStationList,
+ openStationACFromEachTrainInfo,
+ from,
+}) => {
+ // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false);
+
+ const { currentTrain } = useCurrentTrain();
+ const [currentTrainData, setCurrentTrainData] = useState();
+
+ // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false);
+
+ useEffect(() => {
+ console.log(currentTrain.length);
+ if (!currentTrain.length) return;
+ setCurrentTrainData(
+ checkDuplicateTrainData(
+ currentTrain.filter((d) => d.num == data.trainNum)
+ )
+ );
+ }, [currentTrain]);
+
+ //bconst insets = useSafeAreaInsets();
+
+ const [headStation, setHeadStation] = useState();
+ const [tailStation, setTailStation] = useState();
+ const [isConcatNear, setIsConcatNear] = useState(false);
+ const [showNearTrain, setShowNearTrain] = useState([]);
+ const [nearTrainIDList, setNearTrainIDList] = useState([]);
+ const { getInfluencedTrainData } = useBusAndTrainData();
+ const [trainPositionSwitch, setTrainPositionSwitch] = useState("false");
+ const [currentPosition, setCurrentPosition] = useState([]);
+ const [trainData, setTrainData] = useState([]);
+ const stationList =
+ originalStationList &&
+ lineList.map((d) =>
+ originalStationList[d].map((a) => ({
+ StationNumber: a.StationNumber,
+ StationName: a.Station_JP,
+ }))
+ );
+
+ const getStationData = (stationName) => {
+ const Stations = stationList.map((a) =>
+ a.filter((d) => d.StationName == stationName)
+ );
+ const Station =
+ Stations &&
+ Stations.reduce((newArray, e) => {
+ return newArray.concat(e);
+ }, []);
+ if (!Station[0]) return [];
+ return Station.map((d) => d.StationNumber)[0];
+ };
+ const stopStationIDList = 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);
+ return StationNumbers[0];
+ });
+ function findReversalPoints(array) {
+ try {
+ // arrayは現在位置の駅ID(駅在宅の場合は1つの配列、駅間の場合は2つの配列)
+ // stopStationIDListは停車駅の駅IDの配列
+ if (!stopStationIDList.length) return [];
+ // arrayが二次元配列だったら早期リターン
+ if (!array instanceof Array) return [];
+ if (!array.length) return [];
+ if (array[0] instanceof Array) return [];
+ const arrayNumber = array.map((d) => ({
+ line: d
+ .split("")
+ .filter((s) => "A" < s && s < "Z")
+ .join(""),
+ ID: d
+ .split("")
+ .filter((s) => "0" <= s && s <= "9")
+ .join(""),
+ }));
+ const stopStationIDListNumber = stopStationIDList.map((d) => {
+ if (!d) return { line: [], ID: [] };
+ return {
+ line: d
+ .split("")
+ .filter((s) => "A" < s && s < "Z")
+ .join(""),
+ ID: d
+ .split("")
+ .filter((s) => "0" <= s && s <= "9")
+ .join(""),
+ };
+ });
+ // 完全一致
+ if (array.length == 1) {
+ const index = stopStationIDList.indexOf(array[0]);
+ if (index != -1) return [index];
+ // 通過駅の場合
+ for (let i = 0; i < stopStationIDListNumber.length - 1; i++) {
+ if (stopStationIDListNumber[i].ID < arrayNumber[0].ID) {
+ if (stopStationIDListNumber[i + 1].ID > arrayNumber[0].ID) {
+ return [i + 1];
+ }
+ }
+ if (stopStationIDListNumber[i].ID > arrayNumber[0].ID) {
+ if (stopStationIDListNumber[i + 1].ID < arrayNumber[0].ID) {
+ return [i + 1];
+ }
+ }
+ }
+ }
+ // 駅間の場合
+ if (array.length == 2) {
+ const index1 = stopStationIDList.indexOf(array[0]);
+ const index2 = stopStationIDList.indexOf(array[1]);
+ if (index1 != -1 && index2 != -1) {
+ // 駅間で通過駅も無い場合
+ if (index1 < index2) {
+ if (index1 + 1 == index2) {
+ return [index2];
+ } else {
+ const returnArray = [];
+ for (let i = index1 + 1; i <= index2; i++) {
+ returnArray.push(i);
+ }
+ return returnArray;
+ }
+ }
+ if (index1 > index2) {
+ if (index2 + 1 == index1) return [index1];
+ else {
+ const returnArray = [];
+ for (let i = index2 + 1; i <= index1; i++) {
+ returnArray.push(i);
+ }
+ return returnArray;
+ }
+ }
+ } else {
+ const getNearStationID = (stationID) => {
+ for (let i = 0; i <= stopStationIDListNumber.length; i++) {
+ if (stopStationIDListNumber[i].ID < stationID) {
+ if (stopStationIDListNumber[i + 1].ID > stationID) {
+ return i + 1;
+ }
+ }
+ if (stopStationIDListNumber[i].ID > stationID) {
+ if (stopStationIDListNumber[i + 1].ID < stationID) {
+ return i + 1;
+ }
+ }
+ }
+ };
+ let newIndex1 = index1;
+ let newIndex2 = index2;
+ if (index1 == -1) {
+ newIndex1 = getNearStationID(arrayNumber[0].ID);
+ }
+ if (index2 == -1) {
+ newIndex2 = getNearStationID(arrayNumber[1].ID);
+ }
+ if (newIndex1 && newIndex2) {
+ return [newIndex1, newIndex2];
+ }
+
+ // 通過駅の場合
+ }
+
+ return [];
+ }
+ } catch (e) {
+ console.log(e);
+ }
+ }
+ useEffect(() => {
+ if (trainData.length == 0) return;
+ if (showNearTrain.length == 0) return;
+ showNearTrain.forEach((d) => {
+ const [station, se, time] = d.split(",");
+
+ if (station == trainData[0].split(",")[0])
+ setHeadStation(trainData[0].split(",")[0]);
+ if (station == trainData[trainData.length - 1].split(",")[0])
+ setTailStation(trainData[trainData.length - 1].split(",")[0]);
+ });
+ }, [trainData, showNearTrain]);
+ //裏列車探索
+ useEffect(() => {
+ if (!data.trainNum) return;
+ const [returnArray, TDArray] = getInfluencedTrainData(data.trainNum);
+ setNearTrainIDList(returnArray);
+ setShowNearTrain(TDArray);
+ }, [data]);
+ const scrollHandlers = useScrollHandlers("scrollview-1", actionSheetRef);
+ const migrateTrainName = (string) => {
+ return string
+ .replace("マリン", "マリンライナー")
+ .replace("ライナーライナー", "ライナー");
+ };
+ const getType = (string) => {
+ switch (string) {
+ case "express":
+ return "特急";
+ case "rapid":
+ return "快速";
+ default:
+ return "";
+ }
+ };
+
+ // 使用例
+ const points =
+ trainPositionSwitch == "true" ? findReversalPoints(currentPosition) : [];
+ const { height, width } = useWindowDimensions();
+ const [isLandscape, setIsLandscape] = useState(false);
+ useEffect(() => {
+ //currentTrainData.Pos = "鴨川~端岡"; //test
+ if (!currentTrainData) return;
+ 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(currentTrainData?.Pos)]);
+ }
+ }, [currentTrainData]);
+ useEffect(() => {
+ if (height / width > 1.5) {
+ setIsLandscape(false);
+ }
+ if (height / width < 1.5) {
+ setIsLandscape(true);
+ }
+ }, [width, height]);
+ useEffect(() => {
+ if (!data.trainNum) return;
+ const TD = trainList[data.trainNum];
+ if (!TD) {
+ setTrainData([]);
+ return;
+ }
+ setTrainData(TD.split("#").filter((d) => d != ""));
+ }, [data]);
+ useEffect(() => {
+ //列車現在地アイコン表示スイッチ
+ AS.getItem("trainPositionSwitch")
+ .then((d) => {
+ if (d) {
+ setTrainPositionSwitch(d);
+ } else {
+ }
+ })
+ .catch((d) => AS.setItem("trainPositionSwitch", "false"));
+ }, []);
+
+ const openBackTrainInfo = (stationInfo, currentTrainIndex) => {
+ const migrationArray = (stationInfo) => {
+ const mainTrainStationPosition = trainData.findIndex(
+ (d) => d.split(",")[0] == stationInfo
+ );
+
+ const relationMain = (() => {
+ if (mainTrainStationPosition == 0) return "head";
+ if (mainTrainStationPosition == trainData.length - 1) return "tail";
+ return "middle";
+ })();
+
+ const subTrainStationPosition = showNearTrain.findIndex(
+ (d) => d.split(",")[0] == stationInfo
+ );
+ const relationSub = (() => {
+ if (subTrainStationPosition == 0) return "head";
+ if (subTrainStationPosition == showNearTrain.length - 1) return "tail";
+ return "middle";
+ })();
+
+ switch (relationMain) {
+ case "head":
+ if (relationSub == "head") {
+ return;
+ } else if (relationSub == "tail") {
+ return [
+ ...showNearTrain.slice(0, subTrainStationPosition),
+ ...trainData,
+ ];
+ } else if (relationSub == "middle") {
+ return [
+ ...showNearTrain.slice(0, subTrainStationPosition),
+ ...trainData,
+ ];
+ } else return;
+ case "tail":
+ if (relationSub == "head") {
+ return [
+ ...trainData.slice(0, mainTrainStationPosition),
+ ...showNearTrain,
+ ];
+ } else if (relationSub == "tail") {
+ return;
+ } else if (relationSub == "middle") {
+ return [
+ ...trainData.slice(0, mainTrainStationPosition),
+ ...showNearTrain.slice(subTrainStationPosition),
+ ];
+ } else return;
+ case "middle":
+ if (relationSub == "head") {
+ return [
+ ...trainData.slice(0, mainTrainStationPosition),
+ ...showNearTrain,
+ ];
+ } else if (relationSub == "tail") {
+ return [
+ ...showNearTrain.slice(0, subTrainStationPosition),
+ ...trainData.slice(mainTrainStationPosition),
+ ];
+ } else return;
+ }
+ };
+ const array = migrationArray(stationInfo);
+ if (!array) return;
+ setTrainData(array);
+ setIsConcatNear(true);
+ };
+
+ const openTrainInfo = (d) => {
+ const train = customTrainDataDetector(d);
+ let TrainNumber = "";
+ if (train.trainNumDistance != undefined) {
+ const timeInfo =
+ parseInt(d.replace("M", "").replace("D", "")) - train.trainNumDistance;
+ TrainNumber = timeInfo + "号";
+ }
+ const payload = {
+ data: {
+ trainNum: d,
+ limited: `${getTrainType(train.type).data}:${
+ train.trainName
+ }${TrainNumber}`,
+ },
+ navigate,
+ originalStationList,
+ from: "AllTrainDiagramView",
+ };
+ SheetManager.hide("EachTrainInfo").then(() => {
+ //0.1秒待機してから開く
+ setTimeout(() => {
+ SheetManager.show("EachTrainInfo", { payload });
+ }, 1);
+ });
+ };
+ return (
+
+
+
+
+
+
+ {data.limited
+ ? getType(data.limited.split(":")[0]) +
+ migrateTrainName(
+ data.limited.split(":")[1] ||
+ (trainData.length > 0
+ ? trainData[trainData.length - 1].split(",")[0] + "行き"
+ : " ")
+ )
+ : ""}
+
+
+
+ {data.trainNum}
+ {isConcatNear ? ` + ${nearTrainIDList}` : ""}
+
+
+ {data.limited != undefined &&
+ getType(data.limited.split(":")[0]) &&
+ !data.limited.split(":")[1].match("サンポート") && (
+ {
+ LayoutAnimation.easeInEaseOut(); //setLoadingDelayData(true);
+ navigate("trainbase", {
+ info: "train.html?tn=" + data.trainNum,
+ from,
+ });
+ SheetManager.hide("EachTrainInfo");
+ }}
+ />
+ )}
+
+ {isLandscape ? (
+ >
+ ) : (
+
+ )
+ }
+ topStickyContent={
+
+ }
+ >
+ {headStation && !isConcatNear && (
+ openBackTrainInfo(headStation)}
+ style={{
+ padding: 10,
+ flexDirection: "row",
+ borderColor: "blue",
+ borderWidth: 1,
+ margin: 10,
+ borderRadius: 5,
+ alignItems: "center",
+ }}
+ >
+
+ 「本当の始発駅」を表示
+
+
+ )}
+ {/*
+ ほげほげふがふが */}
+
+ {trainData.map((i, index) =>
+ i.split(",")[1] == "提" ? (
+
+ ) : (
+
+ )
+ )}
+ {tailStation && !isConcatNear && (
+ openBackTrainInfo(tailStation)}
+ style={{
+ padding: 10,
+ flexDirection: "row",
+ borderColor: "blue",
+ borderWidth: 1,
+ margin: 10,
+ borderRadius: 5,
+ alignItems: "center",
+ }}
+ >
+
+ 「本当の終着駅」を表示
+
+
+ )}
+
+
+
+
+
+
+
+
+ ) : (
+ >
+ ) : (
+
+ )
+ }
+ longHeader={
+ from == "AllTrainDiagramView" ? (
+ <>>
+ ) : (
+
+ )
+ }
+ topStickyContent={
+
+ }
+ >
+ {headStation && !isConcatNear && (
+ openBackTrainInfo(headStation)}
+ style={{
+ padding: 10,
+ flexDirection: "row",
+ borderColor: "blue",
+ borderWidth: 1,
+ margin: 10,
+ borderRadius: 5,
+ alignItems: "center",
+ }}
+ >
+
+ 「本当の始発駅」を表示
+
+
+ )}
+ {/*
+ ほげほげふがふが */}
+
+ {trainData.map((i, index) =>
+ i.split(",")[1] == "提" ? (
+
+ ) : (
+
+ )
+ )}
+ {tailStation && !isConcatNear && (
+ openBackTrainInfo(tailStation)}
+ style={{
+ padding: 10,
+ flexDirection: "row",
+ borderColor: "blue",
+ borderWidth: 1,
+ margin: 10,
+ borderRadius: 5,
+ alignItems: "center",
+ }}
+ >
+
+ 「本当の終着駅」を表示
+
+
+ )}
+
+
+
+
+
+
+
+
+ )}
+
+ );
+};
+
+const styles = StyleSheet.create({
+ header: {
+ justifyContent: "center",
+ alignItems: "center",
+ left: 0,
+ right: 0,
+ //paddingTop: 10,
+ position: "absolute",
+ zIndex: 1,
+ backgroundColor: "f0f0f0",
+ },
+ headerText: {
+ color: "#fff",
+ fontSize: 25,
+ fontWeight: "bold",
+ textAlign: "center",
+ },
+});