From 620be8b58e7b06af7ee1cc26b53354c937fe24c2 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Mon, 1 Sep 2025 15:28:05 +0000 Subject: [PATCH] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E8=A1=A8=E7=A4=BA=E5=85=A8?= =?UTF-8?q?=E4=BD=93=E7=9A=84=E3=81=AB=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/Apps.js | 9 +- components/Apps/FixedPositionBox.tsx | 269 ++++++++++++++++++++++++++ components/Apps/MapsButton.tsx | 1 + components/Apps/ReloadButton.tsx | 1 + components/Menu/StationPagination.tsx | 15 +- lib/getStringConfig.ts | 2 +- stateBox/useCurrentTrain.js | 2 +- stateBox/useStationList.tsx | 22 ++- 8 files changed, 293 insertions(+), 28 deletions(-) create mode 100644 components/Apps/FixedPositionBox.tsx diff --git a/components/Apps.js b/components/Apps.js index 769b17a..f49720d 100644 --- a/components/Apps.js +++ b/components/Apps.js @@ -24,6 +24,7 @@ import { MapsButton } from "./Apps/MapsButton"; import { ReloadButton } from "./Apps/ReloadButton"; import { LandscapeBackButton } from "./Apps/LandscapeBackButton"; import { useStationList } from "../stateBox/useStationList"; +import { FixedPositionBox } from "./Apps/FixedPositionBox"; /* import StatusbarDetect from '../StatusbarDetect'; var Status = StatusbarDetect(); */ @@ -127,13 +128,7 @@ export default function Apps() { /> )} {fixedPosition.type && ( - { - setFixedPosition({ type: null, value: null }); - }} - > - {fixedPosition.type}: {fixedPosition.value} - + )} {mapSwitch == "true" ? ( diff --git a/components/Apps/FixedPositionBox.tsx b/components/Apps/FixedPositionBox.tsx new file mode 100644 index 0000000..703a3a6 --- /dev/null +++ b/components/Apps/FixedPositionBox.tsx @@ -0,0 +1,269 @@ +import lineColorList from "@/assets/originData/lineColorList"; +import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData"; +import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram"; +import { useCurrentTrain } from "@/stateBox/useCurrentTrain"; +import { useStationList, StationProps } from "@/stateBox/useStationList"; +import { useEffect, useState } from "react"; +import { Text, TouchableOpacity, View, Image, Platform } from "react-native"; +import { customTrainDataDetector } from "../custom-train-data"; +import { getStringConfig, typeID } from "@/lib/getStringConfig"; +import { getTrainType } from "@/lib/getTrainType"; +import Constants from "expo-constants"; + +export const FixedPositionBox = () => { + const { fixedPosition, setFixedPosition } = useCurrentTrain(); + + return ( + + + {fixedPosition.type === "station" && ( + + )} + {fixedPosition.type === "train" && ( + + )} + + + ); +}; + +export const FixedStation = ({ stationID }) => { + const { fixedPosition, setFixedPosition } = useCurrentTrain(); + const { getStationDataFromId } = useStationList(); + const [station, setStation] = useState([]); + useEffect(() => { + const data = getStationDataFromId(stationID); + setStation(data); + }, [stationID]); + console.log(station); + const lineColor = + station.length > 0 + ? lineColorList[station[0]?.StationNumber.slice(0, 1)] + : "white"; + return ( + { + setFixedPosition({ type: null, value: null }); + }} + > + + + {station.map((s) => { + if (s.StationNumber === null) return null; + return ( + + + {s.StationNumber?.slice(0, 1)} + + + {s.StationNumber?.slice(1)} + + + ); + })} + + + {station[0]?.Station_JP} + + + + 駅情報固定中 + + + + + + 次:15:00 快速マリン 岡山 + + + + ); +}; + +export const FixedTrain = ({ trainID }) => { + const { fixedPosition, setFixedPosition, currentTrain } = useCurrentTrain(); + const { allCustomTrainData, allTrainDiagram } = useAllTrainDiagram(); + + const getTrainDataFromCurrentTrain = (trainNum: string) => { + const customTrainData = customTrainDataDetector( + trainNum, + allCustomTrainData + ); + switch (customTrainData.type) { + case "Normal": + case "OneMan": + const currentTrainData = currentTrain.filter((a) => a.num == trainNum); + if (currentTrainData.length == 0) return customTrainData; + else if (currentTrainData[0].Type.includes("rapid:")) { + const typeText = currentTrainData[0].Type.split(":"); + const returnData = { + type: "Rapid", + trainName: typeText[1].replace("\r", ""), + trainIcon: null, + trainNumDistance: null, + info: "", + }; + return returnData; + } + return customTrainData; + default: + return customTrainData; + } + }; + const [train, setTrain] = useState<{ + Index: string; + num: string; + delay: string; + Pos: string; + PosNum: string; + Direction: number; + Type: string; + Line: string; + }>(null); + const [customData, setCustomData] = useState<{ + ToData: string; + TrainNumber: string; + id: string; + img: string; + isWanman: boolean; + trainName: string; + trainNumDistance: number; + type: typeID; + viaData: string; + info?: string; + uwasa?: string; + }>(getTrainDataFromCurrentTrain(trainID)); + useEffect(() => { + setCustomData(getTrainDataFromCurrentTrain(trainID)); + }, [currentTrain, trainID]); + useEffect(() => { + currentTrain.forEach((d) => { + if (d.num == trainID) setTrain(d); + }); + }, [trainID, currentTrain]); + + const [ToData, setToData] = useState(""); + useEffect(() => { + if (customData.ToData && customData.ToData != "") { + setToData(customData.ToData); + } else { + const base = allTrainDiagram[trainID]; + if (!base) return; + const data = base.split("#"); + setToData(data[data.length - 2].split(",")[0]); + } + }, [customData, train]); + const [stringConfig, setStringConfig] = useState([, ,]); + useEffect(() => { + const x = getStringConfig(customData.type, customData.TrainNumber); + setStringConfig(x); + }, [customData]); + return ( + { + setFixedPosition({ type: null, value: null }); + }} + > + + + + + + {stringConfig[0]} + + {ToData}行 + + + + + 列車情報追跡中 + 次は どこですか + + + + ); +}; diff --git a/components/Apps/MapsButton.tsx b/components/Apps/MapsButton.tsx index 66e7501..60cc2ac 100644 --- a/components/Apps/MapsButton.tsx +++ b/components/Apps/MapsButton.tsx @@ -37,6 +37,7 @@ export const MapsButton: FC = ({ onPress }) => { alignSelf: "center", alignItems: "center", display: mapSwitch == "true" ? "flex" : "none", + zIndex: 1000, }, text: { textAlign: "center", diff --git a/components/Apps/ReloadButton.tsx b/components/Apps/ReloadButton.tsx index 05655c4..16a5dad 100644 --- a/components/Apps/ReloadButton.tsx +++ b/components/Apps/ReloadButton.tsx @@ -38,6 +38,7 @@ export const ReloadButton:FC = ({ onPress, right }) => { alignSelf: "center", alignItems: "center", display: mapSwitch, + zIndex: 1000, }, text: { textAlign: "center", diff --git a/components/Menu/StationPagination.tsx b/components/Menu/StationPagination.tsx index dbbbd2c..8eee662 100644 --- a/components/Menu/StationPagination.tsx +++ b/components/Menu/StationPagination.tsx @@ -3,20 +3,7 @@ import { View, Text, TouchableOpacity } from "react-native"; import { useInterval } from "../../lib/useInterval"; import lineColorList from "../../assets/originData/lineColorList"; - -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; -}; +import { StationProps } from "@/stateBox/useStationList"; type StationNumberProps = { currentStation: StationProps[]; active: boolean; diff --git a/lib/getStringConfig.ts b/lib/getStringConfig.ts index 327c533..54f84a9 100644 --- a/lib/getStringConfig.ts +++ b/lib/getStringConfig.ts @@ -1,4 +1,4 @@ -type typeID = +export type typeID = | "Normal" | "OneMan" | "Rapid" diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js index 3684382..ac1152b 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.js @@ -20,7 +20,7 @@ const initialState = { getCurrentTrain: () => {}, inject: (i) => {}, fixedPosition: null, - setFixedPosition: () => {}, + setFixedPosition: (e) => {}, setInjectData: (e) => {}, getCurrentStationData: (e) => {}, getPosition: (e) => {}, diff --git a/stateBox/useStationList.tsx b/stateBox/useStationList.tsx index 73219b2..c08e7a2 100644 --- a/stateBox/useStationList.tsx +++ b/stateBox/useStationList.tsx @@ -10,12 +10,24 @@ import { getStationList, lineList_LineWebID, } from "../lib/getStationList"; - +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; +}; type initialStateType = { - originalStationList: any[][]; - setOriginalStationList: React.Dispatch>; - getStationDataFromName: (id: string) => any[]; - getStationDataFromId: (id: string) => any[]; + originalStationList: StationProps[][]; + setOriginalStationList: React.Dispatch>; + getStationDataFromName: (id: string) => StationProps[]; + getStationDataFromId: (id: string) => StationProps[]; getStationDataFromNameBase: (name: string) => any[]; stationList: any[]; getInjectJavascriptAddress: (StationNumber: string) => string;