diff --git a/components/StationDiagram/ExGridView.tsx b/components/StationDiagram/ExGridView.tsx new file mode 100644 index 0000000..da3a54e --- /dev/null +++ b/components/StationDiagram/ExGridView.tsx @@ -0,0 +1,60 @@ +import { FC } from "react"; +import { ListViewItem } from "@/components/StationDiagram/ListViewItem"; +import { View, Text, ScrollView, useWindowDimensions } from "react-native"; +import { ExGridViewItem } from "./ExGridViewItem"; + +export const ExGridView: FC<{ + data: { + trainNumber: string; + array: string; + name: string; + type: string; + time: string; + }[]; +}> = ({ data }) => { + const groupedData = {}; + const groupKeys = []; + + const { width } = useWindowDimensions(); + data.forEach((item) => { + const hour = item.time.split(":")[0]; + if (!groupedData[hour]) { + groupedData[hour] = []; + groupKeys.push(hour); + } + groupedData[hour].push(item); + }); + return ( + + i * 2) : [] + } + > + {groupKeys.map((hour) => [ + + {hour}時台 + , + + {groupedData[hour].map((d, i) => ( + + ))} + , + ])} + + + ); +}; diff --git a/components/StationDiagram/ExGridViewItem.tsx b/components/StationDiagram/ExGridViewItem.tsx new file mode 100644 index 0000000..3bac836 --- /dev/null +++ b/components/StationDiagram/ExGridViewItem.tsx @@ -0,0 +1,220 @@ +import { migrateTrainName } from "@/lib/eachTrainInfoCoreLib/migrateTrainName"; +import { getStringConfig, typeID } from "@/lib/getStringConfig"; +import { getTrainType } from "@/lib/getTrainType"; +import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram"; +import { FC, useEffect, useMemo, useState } from "react"; +import { + View, + Text, + TouchableOpacity, + useWindowDimensions, +} from "react-native"; +import { customTrainDataDetector } from "../custom-train-data"; +import dayjs from "dayjs"; +import { SheetManager } from "react-native-actions-sheet"; +import { useNavigation } from "@react-navigation/native"; +import { lineList } from "@/lib/getStationList"; +import { useStationList } from "@/stateBox/useStationList"; + +export const ExGridViewItem: FC<{ + d: { + trainNumber: string; + array: string; + name: string; + type: string; + time: string; + }; + index: number; +}> = ({ d, index }) => { + const { allCustomTrainData } = useAllTrainDiagram(); + const { navigate, goBack } = useNavigation(); + const [trainData, setTrainData] = useState<{ + ToData: string; + TrainNumber: string; + id: string; + img: string; + info?: string; + infoUrl: string; + infogram: string; + isEdit: boolean; + isSeason: boolean; + trainName: string; + trainNumDistance?: number; + type: typeID; + viaData?: string; + uwasa?: string; + }>(); + useEffect(() => { + if (allCustomTrainData) { + allCustomTrainData.forEach((x) => { + if (x.TrainNumber === d.trainNumber) { + setTrainData(x); + } + }); + } + }, []); + const { width } = useWindowDimensions(); + const { color, name, data } = getTrainType(trainData?.type, true); + const { originalStationList } = useStationList(); + // 列車名、種別、フォントの取得 + const [ + typeString, + trainName, + fontAvailable, + isOneMan, + infogram, + isEdit, + uwasa, + vehicleFormation, + trainInfoUrl, + ] = useMemo(() => { + const { + type, + trainName, + trainNumDistance, + infogram, + isEdit, + uwasa, + vehicleFormation, + trainInfoUrl, + } = customTrainDataDetector(d.trainNumber, allCustomTrainData); + const [typeString, fontAvailable, isOneMan] = getStringConfig( + type, + d.trainNumber + ); + const trainData = d.array.split("#").filter((d) => d !== ""); + switch (true) { + case trainData[trainData.length - 1] === undefined: + return [ + typeString, + "", + fontAvailable, + isOneMan, + infogram, + isEdit, + uwasa, + vehicleFormation, + trainInfoUrl, + ]; + default: + // 行先がある場合は、行先を取得 + return [ + typeString, + migrateTrainName( + trainData[trainData.length - 1].split(",")[0] + "行" + ), + fontAvailable, + isOneMan, + infogram, + isEdit, + uwasa, + vehicleFormation, + trainInfoUrl, + ]; + } + }, [d.array]); + const timeArray = d.time.split(":").map((s) => parseInt(s)); + const formattedTime = dayjs() + .set("hour", timeArray[0]) + .set("minute", timeArray[1]) + .format("m"); + + const openStationACFromEachTrainInfo = async (stationName) => { + await SheetManager.hide("EachTrainInfo"); + const findStationEachLine = (selectLine) => { + let NearStation = selectLine.filter((d) => d.Station_JP == stationName); + return NearStation; + }; + let returnDataBase = lineList + .map((d) => findStationEachLine(originalStationList[d])) + .filter((d) => d.length > 0) + .reduce((pre, current) => { + pre.push(...current); + return pre; + }, []); + if (returnDataBase.length) { + const payload = { + currentStation: returnDataBase, + navigate, + //@ts-ignore + useShow: () => SheetManager.show("StationDetailView", { payload }), + onExit: () => SheetManager.hide("StationDetailView"), + }; //@ts-ignore + setTimeout(() => SheetManager.show("StationDetailView", { payload }), 50); + } else { + SheetManager.hide("StationDetailView"); + } + }; + const openTrainInfo = () => { + let TrainNumber = ""; + if (trainData.trainNumDistance != undefined) { + const timeInfo = + parseInt(trainData.TrainNumber.replace("M", "").replace("D", "")) - + trainData.trainNumDistance; + TrainNumber = timeInfo + "号"; + } + const payload = { + data: { + trainNum: trainData.TrainNumber, + limited: `${data}:${trainData.trainName}${TrainNumber}`, + }, + navigate, + openStationACFromEachTrainInfo, + from: "AllTrainIDList", + }; + SheetManager.show("EachTrainInfo", { + //@ts-ignore + payload, + onClose: (data) => { + //alert(data); + }, + }); + }; + // if(typeString == "回送"){ + // return<>; + // } + return ( + + openTrainInfo()} + > + + {formattedTime} + + {d.type} + + + + + {trainName} + + + + + ); +}; diff --git a/components/StationDiagram/StationDiagramView.tsx b/components/StationDiagram/StationDiagramView.tsx index 50a3946..bc7e253 100644 --- a/components/StationDiagram/StationDiagramView.tsx +++ b/components/StationDiagram/StationDiagramView.tsx @@ -5,6 +5,7 @@ import { BigButton } from "../atom/BigButton"; import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram"; import { ListView } from "@/components/StationDiagram/ListView"; import dayjs from "dayjs"; +import { ExGridView } from "./ExGridView"; type props = { route: { @@ -65,6 +66,9 @@ export const StationDiagramView: FC = ({ route }) => { type, time, }; + // //条件によってフィルタリング + // if(type && type.includes("通")) return; + // if(type && type.includes("着")) return; returnDataArray.push(arrayData); }); } @@ -100,7 +104,8 @@ export const StationDiagramView: FC = ({ route }) => { > {currentStation[0].Station_JP}駅 時刻表 - + {/* */} + {/*