From f8bd37c4527cdf1134f21de1a0a1dd700c3c3c92 Mon Sep 17 00:00:00 2001 From: harukin-OneMix4 Date: Mon, 12 Feb 2024 17:45:24 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=88=86?= =?UTF-8?q?=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActionSheetComponents/EachTrainInfo.js | 656 +---------------- .../EachTrainInfoCore.js | 686 ++++++++++++++++++ 2 files changed, 687 insertions(+), 655 deletions(-) create mode 100644 components/ActionSheetComponents/EachTrainInfoCore.js 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", + }, +});