From 7216392c9b15dd9ecd45a2e4f75fc5fe765b965f Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Fri, 8 Aug 2025 08:49:25 +0000 Subject: [PATCH] =?UTF-8?q?AllTrainDiagramView=E3=81=AE=E5=BC=B7=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfoCore.js | 4 +- .../EachTrainInfoCore/HeaderText.tsx | 4 +- .../EachTrainInfoCore/trainIconStatus.tsx | 4 +- components/AllTrainDiagramView.js | 143 +++++++++++++++--- components/custom-train-data.ts | 6 +- components/発車時刻表/EachData.tsx | 4 +- stateBox/useAllTrainDiagram.js | 8 +- 7 files changed, 133 insertions(+), 40 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 23a15cb..92a6521 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -44,7 +44,7 @@ export const EachTrainInfoCore = ({ }) => { const { currentTrain } = useCurrentTrain(); const { originalStationList, stationList } = useStationList(); - const { allTrainDiagram: trainList, allCustonTrainData } = + const { allTrainDiagram: trainList, allCustomTrainData } = useAllTrainDiagram(); const { setTrainInfo } = useTrainMenu(); const [currentTrainData, setCurrentTrainData] = useState(); @@ -323,7 +323,7 @@ export const EachTrainInfoCore = ({ }, []); const openTrainInfo = (d) => { - const train = customTrainDataDetector(d, allCustonTrainData); + const train = customTrainDataDetector(d, allCustomTrainData); let TrainNumber = ""; if (train.trainNumDistance != undefined) { const timeInfo = diff --git a/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx b/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx index 8203126..5483c87 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx +++ b/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx @@ -44,7 +44,7 @@ export const HeaderText: FC = ({ const { limited, trainNum } = data; const { updatePermission } = useTrainMenu(); - const { allCustonTrainData } = useAllTrainDiagram(); + const { allCustomTrainData } = useAllTrainDiagram(); const { expoPushToken } = useNotification(); // 列車名、種別、フォントの取得 @@ -52,7 +52,7 @@ export const HeaderText: FC = ({ useMemo(() => { const customTrainData = customTrainDataDetector( trainNum, - allCustonTrainData + allCustomTrainData ); const [type, fontAvailable, isOneMan] = (() => { switch (customTrainData.type) { diff --git a/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx index ed642e9..1f30eca 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx +++ b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx @@ -23,12 +23,12 @@ export const TrainIconStatus: FC = ({ data, navigate, from }) => { const [trainIcon, setTrainIcon] = useState(null); const [anpanmanStatus, setAnpanmanStatus] = useState(); const [address, setAddress] = useState(""); - const { allCustonTrainData } = useAllTrainDiagram(); + const { allCustomTrainData } = useAllTrainDiagram(); useEffect(() => { if (!data.trainNum) return; const { img, infoUrl } = customTrainDataDetector( data.trainNum, - allCustonTrainData + allCustomTrainData ); if (img) setTrainIcon(img); if (infoUrl) setAddress(infoUrl); diff --git a/components/AllTrainDiagramView.js b/components/AllTrainDiagramView.js index 491f9cc..95c6c60 100644 --- a/components/AllTrainDiagramView.js +++ b/components/AllTrainDiagramView.js @@ -10,6 +10,7 @@ import { Keyboard, ScrollView, Linking, + Image, } from "react-native"; import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram"; @@ -19,9 +20,11 @@ import { SheetManager } from "react-native-actions-sheet"; import { useNavigation } from "@react-navigation/native"; import { BigButton } from "./atom/BigButton"; import { Switch } from "react-native-elements"; +import { migrateTrainName } from "@/lib/eachTrainInfoCoreLib/migrateTrainName"; +import { OneManText } from "./ActionSheetComponents/EachTrainInfoCore/HeaderTextParts/OneManText"; export default function AllTrainDiagramView() { const { goBack, navigate } = useNavigation(); - const { keyList, allTrainDiagram, allCustonTrainData } = useAllTrainDiagram(); + const { keyList, allTrainDiagram, allCustomTrainData } = useAllTrainDiagram(); const [input, setInput] = useState(""); // 文字入力 const [keyBoardVisible, setKeyBoardVisible] = useState(false); const [useStationName, setUseStationName] = useState(false); @@ -53,7 +56,7 @@ export default function AllTrainDiagramView() { }, []); const openTrainInfo = (d) => { - const train = customTrainDataDetector(d, allCustonTrainData); + const train = customTrainDataDetector(d, allCustomTrainData); let TrainNumber = ""; if (train.trainNumDistance != undefined) { const timeInfo = @@ -71,6 +74,119 @@ export default function AllTrainDiagramView() { payload, }); }; + + const getStringConfig = (type, id) => { + switch (type) { + case "Normal": + return ["普通", true, false]; + case "OneMan": + return ["普通", true, true]; + case "Rapid": + return ["快速", true, false]; + case "OneManRapid": + return ["快速", true, true]; + case "LTDEXP": + return ["特急", true, false]; + case "NightLTDEXP": + return ["特急", true, false]; + case "SPCL": + return ["臨時", true, false]; + case "SPCL_Normal": + return ["臨時", true, false]; + case "SPCL_Rapid": + return ["臨時快速", true, false]; + case "SPCL_EXP": + return ["臨時特急", true, false]; + case "Freight": + return ["貨物", false, false]; + case "Forwarding": + return ["回送", false, false]; + case "FreightForwarding": + return ["単機回送", false, false]; + case "Other": + switch (true) { + case !!id.includes("T"): + return ["単機回送", false, false]; + case !!id.includes("R"): + case !!id.includes("E"): + case !!id.includes("L"): + case !!id.includes("A"): + case !!id.includes("B"): + return ["回送", false, false]; + case !!id.includes("H"): + return ["試運転", false, false]; + } + return ["", false, false]; + } + }; + const Item = ({ id, openTrainInfo }) => { + const { img, trainName, type, trainNumDistance, infogram } = + customTrainDataDetector(id, allCustomTrainData); + + const [typeString, fontAvailable, isOneMan] = getStringConfig(type, id); + const trainNameString = (() => { + switch (true) { + case trainName !== "": + // 特急の場合は、列車名を取得 + // 列番対称データがある場合はそれから列車番号を取得 + const distance = trainNumDistance; + const number = + distance !== null ? ` ${parseInt(id) - distance}号` : ""; + return trainName + number; + case allTrainDiagram[id] === undefined: + return ""; + default: + // 行先がある場合は、行先を取得 + const s = allTrainDiagram[id].split("#"); + const hoge = s[s.length - 2].split(",")[0]; + return migrateTrainName(hoge + "行き"); + } + })(); + return ( + openTrainInfo(id)} + > + {img && ( + + )} + {typeString && ( + + {typeString} + + )} + {isOneMan && } + {trainNameString && ( + + {trainNameString} + + )} + + + {id} + + + ); + }; return ( } - keyExtractor={(item) => item} //initialNumToRender={100} /> @@ -225,25 +340,3 @@ export default function AllTrainDiagramView() { ); } -const Item = ({ id, openTrainInfo }) => { - return ( - openTrainInfo(id)} - > - - - {id} - - - - ); -}; diff --git a/components/custom-train-data.ts b/components/custom-train-data.ts index abe330c..9fcc0d7 100644 --- a/components/custom-train-data.ts +++ b/components/custom-train-data.ts @@ -1,10 +1,10 @@ import dayjs from "dayjs"; export const customTrainDataDetector = ( TrainNumber: string, - allCustonTrainData?: any[] + allCustomTrainData?: any[] ) => { - if (allCustonTrainData && allCustonTrainData.length > 0) { - const customTrain = allCustonTrainData.find( + if (allCustomTrainData && allCustomTrainData.length > 0) { + const customTrain = allCustomTrainData.find( (train) => train.TrainNumber === TrainNumber ); if (customTrain) { diff --git a/components/発車時刻表/EachData.tsx b/components/発車時刻表/EachData.tsx index 1e2f2dc..e9d5467 100644 --- a/components/発車時刻表/EachData.tsx +++ b/components/発車時刻表/EachData.tsx @@ -46,7 +46,7 @@ export const EachData: FC = (props) => { } = props; const { currentTrain } = useCurrentTrain(); const { stationList } = useStationList(); - const { allCustonTrainData } = useAllTrainDiagram(); + const { allCustomTrainData } = useAllTrainDiagram(); const openTrainInfo = (d: { train: string; lastStation: string; @@ -78,7 +78,7 @@ export const EachData: FC = (props) => { const getTrainDataFromCurrentTrain = (trainNum: string) => { const customTrainData = customTrainDataDetector( d.train, - allCustonTrainData + allCustomTrainData ); switch (customTrainData.type) { case "Normal": diff --git a/stateBox/useAllTrainDiagram.js b/stateBox/useAllTrainDiagram.js index c86c638..06e3a92 100644 --- a/stateBox/useAllTrainDiagram.js +++ b/stateBox/useAllTrainDiagram.js @@ -5,7 +5,7 @@ import React, { createContext, useContext, useEffect, useState } from "react"; const initialState = { allTrainDiagram: undefined, setAllTrainDiagram: () => {}, - allCustonTrainData: [], + allCustomTrainData: [], }; const AllTrainDiagramContext = createContext(initialState); @@ -14,7 +14,7 @@ export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext); export const AllTrainDiagramProvider = ({ children }) => { const [allTrainDiagram, setAllTrainDiagram] = useState(trainList); - const [allCustonTrainData, setAllCustonTrainData] = useState([]); // カスタム列車データ + const [allCustomTrainData, setAllCustomTrainData] = useState([]); // カスタム列車データ const [keyList, setKeyList] = useState(); // 第二要素 useEffect(() => { if (allTrainDiagram && Object.keys(allTrainDiagram).length > 0) @@ -54,7 +54,7 @@ export const AllTrainDiagramProvider = ({ children }) => { fetch("https://n8n.haruk.in/webhook/jr-shikoku-position-custom-datalist") .then((res) => res.json()) .then((res) => { - setAllCustonTrainData(res[0].data); + setAllCustomTrainData(res[0].data); }) .catch(() => { alert("カスタム列車データの取得に失敗しました。"); @@ -72,7 +72,7 @@ export const AllTrainDiagramProvider = ({ children }) => { value={{ allTrainDiagram, setAllTrainDiagram, - allCustonTrainData, + allCustomTrainData, keyList, }} >