diff --git a/assets/originData/trainList.ts b/assets/originData/trainList.ts index da6e20f..32144ae 100644 --- a/assets/originData/trainList.ts +++ b/assets/originData/trainList.ts @@ -923,7 +923,7 @@ "585D":"徳島,発,22:55#阿波富田,発,22:58#二軒屋,発,23:01#文化の森,発,23:03#地蔵橋,発,23:07#中田,発,23:11#南小松島,発,23:15#阿波赤石,発,23:19#立江,発,23:22#羽ノ浦,発,23:26#西原,発,23:29#阿波中島,発,23:32#阿南,着,23:36#", // 臨時列車 -"9395D":"RIZIN.50 香川大会臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250330_rizin-50-kagawa.pdf#高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#", -"9174M":"RIZIN.50 香川大会臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250330_rizin-50-kagawa.pdf#高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#", +"9395D":"臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250314_20250413_tomorrow_together_worldtour.pdf#高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#", +"9174M":"臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250314_20250413_tomorrow_together_worldtour.pdf#高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#", } \ No newline at end of file diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 0933429..d837113 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useRef, useState } from "react"; +import React, { useEffect, useState } from "react"; import { View, Text, @@ -28,8 +28,6 @@ import { ShortHeader } from "./EachTrainInfo/ShortHeader"; import { ScrollStickyContent } from "./EachTrainInfo/ScrollStickyContent"; import { getStationID } from "../../lib/eachTrainInfoCoreLib/getStationData"; import { findReversalPoints } from "../../lib/eachTrainInfoCoreLib/findReversalPoints"; -import { migrateTrainName } from "../../lib/eachTrainInfoCoreLib/migrateTrainName"; -import { getType } from "../../lib/eachTrainInfoCoreLib/getType"; import { searchSpecialTrain } from "../../lib/eachTrainInfoCoreLib/searchSpecialTrain"; import { openBackTrainInfo } from "../../lib/eachTrainInfoCoreLib/openBackTrainInfo"; import { ShowSpecialTrain } from "./EachTrainInfo/ShowSpecialTrain"; @@ -45,14 +43,11 @@ export const EachTrainInfoCore = ({ from, navigate, }) => { - // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false); const { currentTrain } = useCurrentTrain(); const { originalStationList, stationList } = useStationList(); const { setTrainInfo } = useTrainMenu(); const [currentTrainData, setCurrentTrainData] = useState(); - // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false); - useEffect(() => { if (!currentTrain.length) return; setCurrentTrainData( @@ -196,29 +191,6 @@ export const EachTrainInfoCore = ({ } setIsJumped(true); }, [points]); - const trainName = useMemo(() => { - if (!data.limited) return ""; - const limitedArray = data.limited.split(":"); - const type = getType(limitedArray[0]); - - switch (true) { - case !!limitedArray[1]: - // 特急の場合は、列車名を取得 - return type + migrateTrainName(limitedArray[1]); - case trainData.length == 0: - // 特急以外の場合は、列車番号を取得 - return type; - default: - // 行先がある場合は、行先を取得 - return ( - type + - migrateTrainName( - trainData[trainData.length - 1].split(",")[0] + "行き" - ) - ); - } - }, [data.limited, trainData]); - const { height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); const scrollHandlers = actionSheetRef @@ -326,8 +298,7 @@ export const EachTrainInfoCore = ({ }); const currentPos = currentPosID.filter((d) => d != false)[0]; if (currentPos) { - if (direction == 0) setCurrentPosition(currentPos.reverse()); - else setCurrentPosition(currentPos); + setCurrentPosition(direction == 0 ? currentPos.reverse() : currentPos); } else if (direction == 0) { setCurrentPosition([ getStationID(pos[1], stationList), diff --git a/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx index 53573d8..ce910e1 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx +++ b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx @@ -57,6 +57,31 @@ export const TrainIconStatus: FC = ({ data, navigate, from }) => { } }); break; + case "2074D": + case "2076D": + case "2080D": + case "2082D": + case "2071D": + case "2073D": + case "2079D": + case "2081D": + fetch( + `https://n8n.haruk.in/webhook/dosan-anpanman-first?trainNum=${ + data.trainNum + }&month=${dayjs().format("M")}&day=${dayjs().format("D")}` + ) + .then((d) => d.json()) + .then((d) => { + console.log(d); + if (d.trainStatus == "〇") { + //setAnpanmanStatus({name:"checkmark-circle-outline",color:"blue"}); + } else if (d.trainStatus == "▲") { + setAnpanmanStatus({ name: "warning-outline", color: "yellow" }); + } else if (d.trainStatus == "×") { + //setAnpanmanStatus({ name: "close-circle-outline", color: "red" }); + } + }); + break; } }, [data.trainNum]); const [move, setMove] = useState(true); diff --git a/components/ActionSheetComponents/StationDeteilView.js b/components/ActionSheetComponents/StationDeteilView.js index baa6610..48d67a3 100644 --- a/components/ActionSheetComponents/StationDeteilView.js +++ b/components/ActionSheetComponents/StationDeteilView.js @@ -18,24 +18,23 @@ import { widthPercentageToDP as wp } from "react-native-responsive-screen"; import { getPDFViewURL } from "../../lib/getPdfViewURL"; import { useBusAndTrainData } from "../../stateBox/useBusAndTrainData"; import { AS } from "../../storageControl"; +import { StationMapButton } from "./StationDeteilView/StationMapButton"; +import { TrainBusButton } from "./StationDeteilView/TrainBusButton"; +import { 駅構内図 } from "./StationDeteilView/StationInsideMapButton"; +import { WebSiteButton } from "./StationDeteilView/WebSiteButton"; +import { StationTimeTableButton } from "./StationDeteilView/StationTimeTableButton"; export const StationDeteilView = (props) => { if (!props.payload) return <>; - const { - currentStation, - navigate, - onExit, - goTo, - useShow, - } = props.payload; + const { currentStation, navigate, onExit, goTo, useShow } = props.payload; const { busAndTrainData } = useBusAndTrainData(); const [trainBus, setTrainBus] = useState(); useEffect(() => { if (!currentStation) return () => {}; - const data = busAndTrainData.filter((d) => { - return d.name === currentStation[0].Station_JP; - }); + const data = busAndTrainData.filter((d) => + d.name === currentStation[0].Station_JP + ); if (data.length == 0) { setTrainBus(); } @@ -90,12 +89,7 @@ export const StationDeteilView = (props) => { {currentStation && ( - + { @@ -115,102 +109,51 @@ export const StationDeteilView = (props) => { {currentStation && currentStation[0].JrHpUrl && currentStation[0].StationNumber != "M12" && ( - <駅構内図 //高松/阿波池田&後免&須崎kounai.png児島例外/ - oP={() => { - navigate("howto", { - info: - currentStation[0].JrHpUrl.replace("/index.html", "/") + - "/kounai_map.html", - goTo, - useShow, - }); - onExit(); - }} - oLP={() => { - Linking.openURL( - currentStation[0].JrHpUrl.replace("/index.html", "/") + - "/kounai_map.html" - ); - }} - uri={currentStation[0].JrHpUrl.replace("/index.html", "/")} + <駅構内図 //児島例外/ + navigate={navigate} + goTo={goTo} + useShow={useShow} + address={currentStation[0].JrHpUrl} + onExit={onExit} /> )} {currentStation && ( {!currentStation[0].JrHpUrl || ( - } - flex={1} - onPressButton={() => { - navigate("howto", { - info: currentStation[0].JrHpUrl, - - goTo, - useShow, - }); - onExit(); - }} - onLongPressButton={() => - Linking.openURL(currentStation[0].JrHpUrl) - } - > - web - + )} {!currentStation[0].StationTimeTable || ( - } - flex={1} - onPressButton={() => { - usePDFView == "true" - ? Linking.openURL(currentStation[0].StationTimeTable) - : navigate("howto", { - info, - - goTo, - useShow, - }); - onExit(); - }} - onLongPressButton={() => - Linking.openURL(currentStation[0].StationTimeTable) - } - > - 時刻表 - + )} {!currentStation[0].StationMap || ( - } - flex={1} - onPressButton={() => - Linking.openURL(currentStation[0].StationMap) - } - > - Map - + )} {!trainBus || ( - } - flex={1} - onPressButton={() => { + { navigate("howto", { info: trainBus.address, - goTo, useShow, }); onExit(); }} - onLongPressButton={() => Linking.openURL(trainBus.address)} - > - 並行バス - + /> )} )} @@ -220,67 +163,6 @@ export const StationDeteilView = (props) => { ); }; - -const 駅構内図 = (props) => { - const [open, setOpen] = useState(false); - return ( - <> - setOpen(!open)} - > - - - {open ? "駅構内図を非表示" : "駅構内図を表示"} - - - - - {open && ( - <> - - - - - - )} - - - ); -}; - const Handler = () => { useEffect(() => { const backAction = () => { @@ -294,4 +176,4 @@ const Handler = () => { return () => backHandler.remove(); }, []); return <>; -}; \ No newline at end of file +}; diff --git a/components/ActionSheetComponents/StationDeteilView/StationInsideMapButton.tsx b/components/ActionSheetComponents/StationDeteilView/StationInsideMapButton.tsx new file mode 100644 index 0000000..19cc47a --- /dev/null +++ b/components/ActionSheetComponents/StationDeteilView/StationInsideMapButton.tsx @@ -0,0 +1,43 @@ +import { FC } from "react"; +import { TouchableOpacity, View, Text, Linking } from "react-native"; +type Props = { + navigate: (screen: string, params: { info: string; goTo: string; useShow: boolean }) => void; + address: string; + goTo: string; + useShow: boolean; + onExit: () => void; +}; +export const 駅構内図:FC = (props) => { + const { navigate, address, goTo, useShow, onExit } = props; + const info = address.replace("/index.html", "/") + "/kounai_map.html"; + return ( + { + navigate("howto", { info, goTo, useShow }); + onExit(); + }} + onLongPress={() => Linking.openURL(info)} + > + + + 駅構内図を表示 + + + + ); +}; diff --git a/components/ActionSheetComponents/StationDeteilView/StationMapButton.tsx b/components/ActionSheetComponents/StationDeteilView/StationMapButton.tsx new file mode 100644 index 0000000..09c6c33 --- /dev/null +++ b/components/ActionSheetComponents/StationDeteilView/StationMapButton.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import { Linking } from "react-native"; +import { Ionicons } from "@expo/vector-icons"; +import { TicketBox } from "@/components/atom/TicketBox"; +export const StationMapButton = ({stationMap}) => { + return ( + } + flex={1} + onPressButton={() => Linking.openURL(stationMap)} + > + Map + + ); +}; diff --git a/components/ActionSheetComponents/StationDeteilView/StationTimeTableButton.tsx b/components/ActionSheetComponents/StationDeteilView/StationTimeTableButton.tsx new file mode 100644 index 0000000..6eae7f3 --- /dev/null +++ b/components/ActionSheetComponents/StationDeteilView/StationTimeTableButton.tsx @@ -0,0 +1,32 @@ +import React, { FC } from "react"; +import { Linking } from "react-native"; +import { FontAwesome } from "@expo/vector-icons"; +import { TicketBox } from "@/components/atom/TicketBox"; +type Props = { + info: string; + address: string; + usePDFView: string; + navigate: (screen: string, params?: object) => void; + onExit: () => void; + goTo: string; + useShow: string; +}; +export const StationTimeTableButton: FC = (props) => { + const { info, address, usePDFView, navigate, onExit, goTo, useShow } = props; + return ( + } + flex={1} + onPressButton={() => { + usePDFView == "true" + ? Linking.openURL(address) + : navigate("howto", { info, goTo, useShow }); + onExit(); + }} + onLongPressButton={() => Linking.openURL(address)} + > + 時刻表 + + ); +}; diff --git a/components/ActionSheetComponents/StationDeteilView/TrainBusButton.tsx b/components/ActionSheetComponents/StationDeteilView/TrainBusButton.tsx new file mode 100644 index 0000000..eb1851d --- /dev/null +++ b/components/ActionSheetComponents/StationDeteilView/TrainBusButton.tsx @@ -0,0 +1,21 @@ +import React, { FC } from "react"; +import { Linking } from "react-native"; +import { Ionicons } from "@expo/vector-icons"; +import { TicketBox } from "@/components/atom/TicketBox"; +type Props = { + address: string; + press: () => void; +}; +export const TrainBusButton: FC = ({ address, press }) => { + return ( + } + flex={1} + onPressButton={press} + onLongPressButton={() => Linking.openURL(address)} + > + 並行バス + + ); +}; diff --git a/components/ActionSheetComponents/StationDeteilView/WebSiteButton.tsx b/components/ActionSheetComponents/StationDeteilView/WebSiteButton.tsx new file mode 100644 index 0000000..73b715c --- /dev/null +++ b/components/ActionSheetComponents/StationDeteilView/WebSiteButton.tsx @@ -0,0 +1,28 @@ +import React, { FC } from "react"; +import { Linking } from "react-native"; +import { Foundation } from "@expo/vector-icons"; +import { TicketBox } from "@/components/atom/TicketBox"; +type Props = { + navigate: (screen: string, params: any) => void; + info: string; + goTo: string; + useShow: string; + onExit: () => void; +}; +export const WebSiteButton: FC = (Props) => { + const { navigate, info, goTo, useShow, onExit } = Props; + return ( + } + flex={1} + onPressButton={() => { + navigate("howto", { info, goTo, useShow }); + onExit(); + }} + onLongPressButton={() => Linking.openURL(info)} + > + web + + ); +}; diff --git a/components/custom-train-data.ts b/components/custom-train-data.ts index 35eb8b7..728d67b 100644 --- a/components/custom-train-data.ts +++ b/components/custom-train-data.ts @@ -49,7 +49,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "しおかぜ", - trainIcon: "https://storage.haruk.in/s8000ap.png", + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 0, info: "いしづちと併結 / アンパンマン列車で運転", @@ -114,7 +114,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "いしづち", - trainIcon: "https://storage.haruk.in/s8000ap.png", + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 1000, info: "しおかぜと併結 / アンパンマン列車で運転", @@ -173,7 +173,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "いしづち", - trainIcon: "https://storage.haruk.in/s8000ap.png", + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 940, info: "アンパンマン列車で運転", @@ -247,9 +247,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "南風", - trainIcon: `https://n8n.haruk.in/webhook/dosan-anpanman-pictures.png?trainNum=${TrainNumber}&day=${dayjs().format( - "yyyy-MM-DD" - )}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/dosan/train.html", trainNumDistance: 30, info: "アンパンマン列車で運転", @@ -589,7 +587,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "宇和海", - trainIcon: "https://storage.haruk.in/s2002a.png", + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 1050, info: "アンパン列車で運転", @@ -623,9 +621,9 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "あしずり", - trainIcon: "https://storage.haruk.in/s2000_asi.png", + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, infoUrl: - "https://www.jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html", + "https://www.jr-eki.com/aptrain/naani/first-generation/jikoku.html", trainNumDistance: 2070, info: "2000系で運転", infogram: "" @@ -767,17 +765,17 @@ export const customTrainDataDetector = (TrainNumber: string) => { trainIcon: "https://storage.haruk.in/s5001.png", infoUrl: "https://www.jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html", trainNumDistance: null, - info: "RIZIN.50 香川大会臨 3/30のみ運転", + info: "臨時列車 4/12,13,19のみ運転", infogram: "G" }; case "9395D": return { type: "SPCL_Normal", trainName: "", - trainIcon: null, + trainIcon: "https://storage.haruk.in/s1500.png", infoUrl: null, trainNumDistance: null, - info: "RIZIN.50 香川大会臨 3/30のみ運転", + info: "臨時列車 4/12,13,19のみ運転", infogram: "" }; default: diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index 517795e..cbf1d9b 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -80,7 +80,7 @@ export const injectJavascriptData: InjectJavascriptData = ( case "22M": case "9M": case "21M": - setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s8000ap.png',hasProblem); + setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum='+列番データ,hasProblem); break; @@ -124,7 +124,7 @@ export const injectJavascriptData: InjectJavascriptData = ( case "1022M": case "1009M": case "1021M": - setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s8000ap.png',hasProblem); + setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum='+列番データ,hasProblem); break; //8600 @@ -152,7 +152,7 @@ export const injectJavascriptData: InjectJavascriptData = ( //8000 アンパン case "1041M": case "1044M": - setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s8000ap.png',hasProblem); + setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum='+列番データ,hasProblem); break; //8600 case "1043M": @@ -194,7 +194,7 @@ export const injectJavascriptData: InjectJavascriptData = ( case "45D": case "49D": case "57D": - setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/dosan-anpanman-pictures.png?trainNum='+列番データ); + setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum='+列番データ,hasProblem); break; @@ -369,7 +369,7 @@ export const injectJavascriptData: InjectJavascriptData = ( case "1053D": case "1059D": case "1067D": - setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s2002a.png',hasProblem); + setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum='+列番データ,hasProblem); break; //しまんと case "2002D": @@ -388,7 +388,7 @@ export const injectJavascriptData: InjectJavascriptData = ( case "2073D": case "2079D": case "2081D": - setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s2000_asi.png',hasProblem); + setStationIcon(e.querySelector("img"),'https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum='+列番データ,hasProblem); break; //あしずり 2700 @@ -896,16 +896,16 @@ export const injectJavascriptData: InjectJavascriptData = ( // case "628D": // setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s185cm.png',hasProblem); // break; - // // 伊予灘ものがたり 赤 - // case "8091D": - // case "8093D": - // setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s185iyor.png',hasProblem); - // break; - // // 伊予灘ものがたり 黄 - // case "8092D": - // case "8094D": - // setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s185iyoy.png',hasProblem); - // break; + // 伊予灘ものがたり 赤 + case "8091D": + case "8093D": + setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s185iyor.png',hasProblem); + break; + // 伊予灘ものがたり 黄 + case "8092D": + case "8094D": + setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s185iyoy.png',hasProblem); + break; // 高徳線、徳島線、牟岐線、鳴門線普通列車系統 // キハ40・47 @@ -987,6 +987,14 @@ export const injectJavascriptData: InjectJavascriptData = ( setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1200n.png',hasProblem); break; + // 半定期臨時列車 + case "9174M": + setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s5001.png',hasProblem); + break; + case "9395D": + setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png',hasProblem); + break; + default: //指定車両でなく、Regexでの指定に移動 // // 琴平直通系普通電車 diff --git a/stateBox/useAllTrainDiagram.js b/stateBox/useAllTrainDiagram.js index c0f7f92..e95299a 100644 --- a/stateBox/useAllTrainDiagram.js +++ b/stateBox/useAllTrainDiagram.js @@ -16,10 +16,9 @@ export const AllTrainDiagramProvider = ({ children }) => { [allTrainDiagram] ); const customData = { - "9395D":"RIZIN.50 香川大会臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250330_rizin-50-kagawa.pdf#高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#", - "9174M":"RIZIN.50 香川大会臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250330_rizin-50-kagawa.pdf#高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#", - - }; + "9395D":"臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250314_20250413_tomorrow_together_worldtour.pdf#高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#", + "9174M":"臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250314_20250413_tomorrow_together_worldtour.pdf#高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#", + }; useEffect(() => { fetch( "https://n8n.haruk.in/webhook/CrowdTh%E2%82%AC71m3Ra7!ngLead%E2%82%ACr$"