Compare commits
92 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5cda45740c | ||
|
84d1305796 | ||
|
336e3510fa | ||
|
25780e1664 | ||
|
e6fab84393 | ||
|
390acdeab7 | ||
|
ff7a5624e6 | ||
|
9b79f224d3 | ||
|
2f76e3776f | ||
|
026da47d82 | ||
|
29be052bf6 | ||
|
2fb7d97d33 | ||
|
76ebf8055b | ||
|
7b572cd657 | ||
|
61fa0f8484 | ||
|
935aaf2610 | ||
|
8ec53d6e06 | ||
|
e8b1a21a3b | ||
|
e6b89842a3 | ||
|
1fc5220405 | ||
|
5489406578 | ||
|
2b217e98c7 | ||
|
2c2e61a2fa | ||
|
c222b303df | ||
|
8f8c095ecd | ||
|
e31e84ff34 | ||
|
2c2b355a3e | ||
|
5461087ca0 | ||
|
57c7285b6e | ||
|
5c134c95cc | ||
|
8781653fe8 | ||
|
67ccc37c17 | ||
|
92caab03f5 | ||
|
dd3a57b3ae | ||
|
8df32b9c1d | ||
|
4b901d5015 | ||
|
fc5c62685a | ||
|
fbc98b2ff7 | ||
|
3502043176 | ||
|
2d0ad8d59e | ||
|
b5172df7a9 | ||
|
740d414d2d | ||
|
8db3e6c218 | ||
|
fb35b01d2e | ||
|
5fa6b1f73e | ||
|
c16f7401ea | ||
|
f260c5d2dd | ||
|
80e9f1a869 | ||
|
26096ba244 | ||
|
435a910ef9 | ||
|
68b9236d65 | ||
|
0148c12e08 | ||
|
34dc62aee6 | ||
|
54ae681f00 | ||
|
db40351fec | ||
|
2dd8e62f85 | ||
|
0937fbb619 | ||
|
32edab3289 | ||
|
fa96e68770 | ||
|
1681be4437 | ||
|
7f96c44e88 | ||
|
7d485c466c | ||
|
7869cbee6d | ||
|
c2ad681891 | ||
|
163f9ead18 | ||
|
611fc9953f | ||
|
fd95e99874 | ||
|
f5d0f993db | ||
|
b7e763d265 | ||
|
0afa6f402b | ||
|
eacce53775 | ||
|
47b1eb325e | ||
|
a145e2c24f | ||
|
862742cd3e | ||
|
d5f2d367dd | ||
|
b1f72f18b5 | ||
|
d4d86fb7eb | ||
|
056a059a68 | ||
|
12676d59cf | ||
|
bca2b300d3 | ||
|
406808ee58 | ||
|
a8aadb7f08 | ||
|
b810405573 | ||
|
6f62418426 | ||
|
88621dd1c8 | ||
|
12d9c1f49d | ||
|
30c2b8a2f9 | ||
|
8bc7069c4e | ||
|
737cd25539 | ||
|
2c50e5af67 | ||
|
ea677b4da5 | ||
|
4525443e39 |
2
App.js
2
App.js
@ -34,13 +34,13 @@ export default function App() {
|
|||||||
useEffect(() => UpdateAsync(), []);
|
useEffect(() => UpdateAsync(), []);
|
||||||
|
|
||||||
const ProviderTree = buildProvidersTree([
|
const ProviderTree = buildProvidersTree([
|
||||||
AllTrainDiagramProvider,
|
|
||||||
NotificationProvider,
|
NotificationProvider,
|
||||||
StationListProvider,
|
StationListProvider,
|
||||||
FavoriteStationProvider,
|
FavoriteStationProvider,
|
||||||
TrainDelayDataProvider,
|
TrainDelayDataProvider,
|
||||||
CurrentTrainProvider,
|
CurrentTrainProvider,
|
||||||
AreaInfoProvider,
|
AreaInfoProvider,
|
||||||
|
AllTrainDiagramProvider,
|
||||||
BusAndTrainDataProvider,
|
BusAndTrainDataProvider,
|
||||||
TrainMenuProvider,
|
TrainMenuProvider,
|
||||||
SheetProvider,
|
SheetProvider,
|
||||||
|
@ -921,4 +921,15 @@
|
|||||||
"581D":"徳島,発,20:30#阿波富田,発,20:33#二軒屋,発,20:36#文化の森,発,20:39#地蔵橋,発,20:42#中田,発,20:47#南小松島,発,20:51#阿波赤石,発,20:55#立江,発,20:58#羽ノ浦,発,21:07#西原,発,21:10#阿波中島,発,21:14#阿南,着,21:18#",
|
"581D":"徳島,発,20:30#阿波富田,発,20:33#二軒屋,発,20:36#文化の森,発,20:39#地蔵橋,発,20:42#中田,発,20:47#南小松島,発,20:51#阿波赤石,発,20:55#立江,発,20:58#羽ノ浦,発,21:07#西原,発,21:10#阿波中島,発,21:14#阿南,着,21:18#",
|
||||||
"583D":"徳島,発,21:30#阿波富田,発,21:33#二軒屋,発,21:36#文化の森,発,21:38#地蔵橋,発,21:42#中田,発,21:46#南小松島,発,21:50#阿波赤石,発,21:54#立江,発,21:57#羽ノ浦,発,22:14#西原,発,22:17#阿波中島,発,22:20#阿南,発,22:26#見能林,発,22:29#阿波橘,発,22:32#桑野,発,22:37#新野,発,22:41#阿波福井,発,22:45#由岐,発,22:54#木岐,発,22:58#北河内,発,23:03#日和佐,発,23:06#山河内,発,23:14#辺川,発,23:23#牟岐,着,23:29#",
|
"583D":"徳島,発,21:30#阿波富田,発,21:33#二軒屋,発,21:36#文化の森,発,21:38#地蔵橋,発,21:42#中田,発,21:46#南小松島,発,21:50#阿波赤石,発,21:54#立江,発,21:57#羽ノ浦,発,22:14#西原,発,22:17#阿波中島,発,22:20#阿南,発,22:26#見能林,発,22:29#阿波橘,発,22:32#桑野,発,22:37#新野,発,22:41#阿波福井,発,22:45#由岐,発,22:54#木岐,発,22:58#北河内,発,23:03#日和佐,発,23:06#山河内,発,23:14#辺川,発,23:23#牟岐,着,23:29#",
|
||||||
"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#",
|
"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":"臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250314_20250413_tomorrow_together_worldtour.pdf#高松,発,22:10#昭和町,発,22:13#栗林公園北口,発,22:16#栗林,発,22:19#木太町,発,22:23#屋島,発,22:36#古高松南,発,22:39#八栗口,発,22:43#讃岐牟礼,発,22:45#志度,発,22:49#オレンジタウン,発,22:53#造田,発,22:57#神前,発,23:00#讃岐津田,発,23:06#鶴羽,発,23:10#丹生,発,23:15#三本松,着,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:48#早島,発,22:55#妹尾,発,22:59#岡山,着,23:06#",
|
||||||
|
|
||||||
|
// わらぐろ号/れんげ号
|
||||||
|
"9662D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#宇和島,発,10:00#北宇和島,発,10:03#高光,発,10:07#伊予吉田,発,10:21#立間,発,10:50#下宇和,発,10:36#卯之町,発,10:39#上宇和,発,10:42#伊予石城,発,10:46#双岩,発,10:53#八幡浜,着,10:58#",
|
||||||
|
"9664D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#卯之町,発,11:18#上宇和,発,11:21#伊予石城,発,11:25#双岩,発,11:34#八幡浜,着,11:39#",
|
||||||
|
"9663D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#八幡浜,発,10:07#双岩,発,10:16#伊予石城,発,10:23#上宇和,発,10:27#卯之町,着,10:30#",
|
||||||
|
"9665D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#八幡浜,発,13:38#双岩,発,13:45#伊予石城,発,13:52#上宇和,発,13:56#卯之町,発,14:07#下宇和,発,14:10#立間,発,14:18#伊予吉田,発,14:25#高光,発,14:31#北宇和島,発,14:35#宇和島,着,14:37#",
|
||||||
|
|
||||||
}
|
}
|
@ -1,14 +1,13 @@
|
|||||||
import { Text, TouchableOpacity } from "react-native";
|
import { Text, TouchableOpacity } from "react-native";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
|
||||||
export const ShowSpecialTrain = ({
|
export const ShowSpecialTrain = ({
|
||||||
isTrainDataNothing,
|
isTrainDataNothing,
|
||||||
setTrainData,
|
setTrainData,
|
||||||
|
trainList,
|
||||||
trueTrainID,
|
trueTrainID,
|
||||||
}) => {
|
}) => {
|
||||||
const { allTrainDiagram } = useAllTrainDiagram();
|
|
||||||
const replaceSpecialTrainDetail = (trainNum) => {
|
const replaceSpecialTrainDetail = (trainNum) => {
|
||||||
let TD = allTrainDiagram[trainNum];
|
let TD = trainList[trainNum];
|
||||||
if (!TD) return;
|
if (!TD) return;
|
||||||
setTrainData(TD.split("#").filter((d) => d != ""));
|
setTrainData(TD.split("#").filter((d) => d != ""));
|
||||||
};
|
};
|
||||||
|
@ -2,7 +2,7 @@ import React, { useState, useEffect } from "react";
|
|||||||
import { View, TouchableOpacity, useWindowDimensions } from "react-native";
|
import { View, TouchableOpacity, useWindowDimensions } from "react-native";
|
||||||
import { StateBox } from "./StateBox";
|
import { StateBox } from "./StateBox";
|
||||||
import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientationChange";
|
import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientationChange";
|
||||||
import { getStationList2 } from "../../../lib/getStationList";
|
import { getStationList2 } from "../../../lib/getStationList2";
|
||||||
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
|
||||||
import { SheetManager } from "react-native-actions-sheet";
|
import { SheetManager } from "react-native-actions-sheet";
|
||||||
import { trainPosition } from "../../../lib/trainPositionTextArray";
|
import { trainPosition } from "../../../lib/trainPositionTextArray";
|
||||||
|
@ -12,7 +12,8 @@ import {
|
|||||||
import { SheetManager } from "react-native-actions-sheet";
|
import { SheetManager } from "react-native-actions-sheet";
|
||||||
import { useScrollHandlers } from "react-native-actions-sheet";
|
import { useScrollHandlers } from "react-native-actions-sheet";
|
||||||
import { AS } from "../../storageControl";
|
import { AS } from "../../storageControl";
|
||||||
import { lineListPair, stationIDPair } from "../../lib/getStationList";
|
import trainList from "../../assets/originData/trainList";
|
||||||
|
import { lineListPair } from "../../lib/getStationList";
|
||||||
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
||||||
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
|
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
|
||||||
import { getTrainType } from "../../lib/getTrainType";
|
import { getTrainType } from "../../lib/getTrainType";
|
||||||
@ -33,7 +34,7 @@ import { ShowSpecialTrain } from "./EachTrainInfo/ShowSpecialTrain";
|
|||||||
import { useTrainMenu } from "../../stateBox/useTrainMenu";
|
import { useTrainMenu } from "../../stateBox/useTrainMenu";
|
||||||
import { HeaderText } from "./EachTrainInfoCore/HeaderText";
|
import { HeaderText } from "./EachTrainInfoCore/HeaderText";
|
||||||
import { useStationList } from "../../stateBox/useStationList";
|
import { useStationList } from "../../stateBox/useStationList";
|
||||||
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
|
import { stationIDPair } from "../../lib/getStationList2";
|
||||||
|
|
||||||
export const EachTrainInfoCore = ({
|
export const EachTrainInfoCore = ({
|
||||||
actionSheetRef,
|
actionSheetRef,
|
||||||
@ -44,7 +45,6 @@ export const EachTrainInfoCore = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const { currentTrain } = useCurrentTrain();
|
const { currentTrain } = useCurrentTrain();
|
||||||
const { originalStationList, stationList } = useStationList();
|
const { originalStationList, stationList } = useStationList();
|
||||||
const { allTrainDiagram: trainList } = useAllTrainDiagram();
|
|
||||||
const { setTrainInfo } = useTrainMenu();
|
const { setTrainInfo } = useTrainMenu();
|
||||||
const [currentTrainData, setCurrentTrainData] = useState();
|
const [currentTrainData, setCurrentTrainData] = useState();
|
||||||
|
|
||||||
@ -215,8 +215,9 @@ export const EachTrainInfoCore = ({
|
|||||||
if (!data.trainNum) return;
|
if (!data.trainNum) return;
|
||||||
const NearTrainList = getInfluencedTrainData(data.trainNum);
|
const NearTrainList = getInfluencedTrainData(data.trainNum);
|
||||||
if (NearTrainList.length == 0) return;
|
if (NearTrainList.length == 0) return;
|
||||||
|
const returnArray = NearTrainList.map((d) => d.id);
|
||||||
const TDArray = NearTrainList.map((d) => d.TrainData);
|
const TDArray = NearTrainList.map((d) => d.TrainData);
|
||||||
setNearTrainIDList(NearTrainList.map((d) => d.id));
|
setNearTrainIDList(returnArray);
|
||||||
if (trainData.length == 0) return;
|
if (trainData.length == 0) return;
|
||||||
if (TDArray.length == 0) return;
|
if (TDArray.length == 0) return;
|
||||||
let head = [];
|
let head = [];
|
||||||
@ -240,8 +241,10 @@ export const EachTrainInfoCore = ({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setHeadStation(head || []);
|
if (head) setHeadStation(head);
|
||||||
setTailStation(tail || []);
|
else setHeadStation([]);
|
||||||
|
if (tail) setTailStation(tail);
|
||||||
|
else setTailStation([]);
|
||||||
}, [trainData, data]);
|
}, [trainData, data]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -387,6 +390,7 @@ export const EachTrainInfoCore = ({
|
|||||||
<DynamicHeaderScrollView
|
<DynamicHeaderScrollView
|
||||||
from={from}
|
from={from}
|
||||||
styles={styles}
|
styles={styles}
|
||||||
|
actionSheetRef={actionSheetRef}
|
||||||
scrollHandlers={scrollHandlers}
|
scrollHandlers={scrollHandlers}
|
||||||
containerProps={{
|
containerProps={{
|
||||||
style: {
|
style: {
|
||||||
@ -454,6 +458,7 @@ export const EachTrainInfoCore = ({
|
|||||||
<ShowSpecialTrain
|
<ShowSpecialTrain
|
||||||
isTrainDataNothing={trainData.length == 0}
|
isTrainDataNothing={trainData.length == 0}
|
||||||
setTrainData={setTrainData}
|
setTrainData={setTrainData}
|
||||||
|
trainList={trainList}
|
||||||
trueTrainID={trueTrainID}
|
trueTrainID={trueTrainID}
|
||||||
/>
|
/>
|
||||||
{!trainData.length && (
|
{!trainData.length && (
|
||||||
|
@ -11,7 +11,8 @@ import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|||||||
import { useTrainMenu } from "../../stateBox/useTrainMenu";
|
import { useTrainMenu } from "../../stateBox/useTrainMenu";
|
||||||
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
||||||
import lineColorList from "../../assets/originData/lineColorList";
|
import lineColorList from "../../assets/originData/lineColorList";
|
||||||
import { stationIDPair, lineListPair } from "../../lib/getStationList";
|
import { stationIDPair } from "../../lib/getStationList2";
|
||||||
|
import { lineListPair } from "../../lib/getStationList";
|
||||||
|
|
||||||
export const TrainMenuLineSelector = () => {
|
export const TrainMenuLineSelector = () => {
|
||||||
const {
|
const {
|
||||||
@ -54,7 +55,7 @@ export const TrainMenuLineSelector = () => {
|
|||||||
onPress={() => {
|
onPress={() => {
|
||||||
SheetManager.hide("TrainMenuLineSelector");
|
SheetManager.hide("TrainMenuLineSelector");
|
||||||
const s = selectedLine == d ? undefined : d;
|
const s = selectedLine == d ? undefined : d;
|
||||||
if (!s) return;
|
if(!s) return;
|
||||||
setSelectedLine(s);
|
setSelectedLine(s);
|
||||||
Object.keys(stationData).forEach((data, indexBase) => {
|
Object.keys(stationData).forEach((data, indexBase) => {
|
||||||
stationData[data].forEach((D, index) => {
|
stationData[data].forEach((D, index) => {
|
||||||
@ -65,7 +66,7 @@ export const TrainMenuLineSelector = () => {
|
|||||||
""
|
""
|
||||||
).split(",");
|
).split(",");
|
||||||
if (latlng.length == 0) return null;
|
if (latlng.length == 0) return null;
|
||||||
if (index == 0) {
|
if (index == 0 ) {
|
||||||
webview.current
|
webview.current
|
||||||
?.injectJavaScript(`MoveDisplayStation('${data}_${D.MyStation}_${D.Station_JP}');
|
?.injectJavaScript(`MoveDisplayStation('${data}_${D.MyStation}_${D.Station_JP}');
|
||||||
document.getElementById("disp").insertAdjacentHTML("afterbegin", "<div />");`);
|
document.getElementById("disp").insertAdjacentHTML("afterbegin", "<div />");`);
|
||||||
|
@ -11,7 +11,7 @@ export const getDelayData = async () => {
|
|||||||
// Fetch data from the server
|
// Fetch data from the server
|
||||||
const time = dayjs().format("HH:mm");
|
const time = dayjs().format("HH:mm");
|
||||||
const delayString = await fetch(
|
const delayString = await fetch(
|
||||||
"https://script.google.com/macros/s/AKfycbw-0RDLAu8EQAEWA860tk4KVW6VOr3iIU900AcWEfqIP16gtNUG1XO_A3oBfAGiNeCf/exec"
|
"https://script.google.com/macros/s/AKfycbyKxch7z7l8e07LXulRHqxjVoIiB13kcgvoToLE-rqlxLmLSKdlmqz0FI1F2EuA7Zfg/exec"
|
||||||
)
|
)
|
||||||
.then((response) => response.text())
|
.then((response) => response.text())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
|
@ -2,7 +2,7 @@ import React from "react";
|
|||||||
import { Platform, LayoutAnimation } from "react-native";
|
import { Platform, LayoutAnimation } from "react-native";
|
||||||
import { WebView } from "react-native-webview";
|
import { WebView } from "react-native-webview";
|
||||||
|
|
||||||
import { lineList, stationNamePair } from "../../lib/getStationList";
|
import { lineList } from "../../lib/getStationList";
|
||||||
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
|
import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData";
|
||||||
import { useFavoriteStation } from "../../stateBox/useFavoriteStation";
|
import { useFavoriteStation } from "../../stateBox/useFavoriteStation";
|
||||||
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../../stateBox/useCurrentTrain";
|
||||||
@ -11,6 +11,7 @@ import { SheetManager } from "react-native-actions-sheet";
|
|||||||
|
|
||||||
import { useNavigation } from "@react-navigation/native";
|
import { useNavigation } from "@react-navigation/native";
|
||||||
import { useTrainMenu } from "../../stateBox/useTrainMenu";
|
import { useTrainMenu } from "../../stateBox/useTrainMenu";
|
||||||
|
import { stationNamePair } from "../../lib/getStationList2";
|
||||||
import { useStationList } from "../../stateBox/useStationList";
|
import { useStationList } from "../../stateBox/useStationList";
|
||||||
export const AppsWebView = ({ openStationACFromEachTrainInfo }) => {
|
export const AppsWebView = ({ openStationACFromEachTrainInfo }) => {
|
||||||
const { webview, currentTrain } = useCurrentTrain();
|
const { webview, currentTrain } = useCurrentTrain();
|
||||||
|
@ -6,6 +6,7 @@ import { AS } from "../storageControl";
|
|||||||
export const DynamicHeaderScrollView = (props) => {
|
export const DynamicHeaderScrollView = (props) => {
|
||||||
const {
|
const {
|
||||||
children,
|
children,
|
||||||
|
actionSheetRef = {},
|
||||||
containerProps = {},
|
containerProps = {},
|
||||||
shortHeader = <></>,
|
shortHeader = <></>,
|
||||||
longHeader = <></>,
|
longHeader = <></>,
|
||||||
|
@ -4,7 +4,8 @@ import MapView from "react-native-maps";
|
|||||||
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
|
||||||
import { useNavigation } from "@react-navigation/native";
|
import { useNavigation } from "@react-navigation/native";
|
||||||
import lineColorList from "../assets/originData/lineColorList";
|
import lineColorList from "../assets/originData/lineColorList";
|
||||||
import { lineListPair, stationIDPair } from "../lib/getStationList";
|
import { stationIDPair } from "../lib/getStationList2";
|
||||||
|
import { lineListPair } from "../lib/getStationList";
|
||||||
import { SheetManager } from "react-native-actions-sheet";
|
import { SheetManager } from "react-native-actions-sheet";
|
||||||
import { useTrainMenu } from "../stateBox/useTrainMenu";
|
import { useTrainMenu } from "../stateBox/useTrainMenu";
|
||||||
import { MapPin } from "./TrainMenu/MapPin";
|
import { MapPin } from "./TrainMenu/MapPin";
|
||||||
|
@ -4,7 +4,8 @@ import { View, Text, TouchableOpacity, Linking } from "react-native";
|
|||||||
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../stateBox/useCurrentTrain";
|
||||||
import { useNavigation } from "@react-navigation/native";
|
import { useNavigation } from "@react-navigation/native";
|
||||||
import lineColorList from "../assets/originData/lineColorList";
|
import lineColorList from "../assets/originData/lineColorList";
|
||||||
import { lineListPair, stationIDPair } from "../lib/getStationList";
|
import { stationIDPair } from "../lib/getStationList2";
|
||||||
|
import { lineListPair } from "../lib/getStationList";
|
||||||
import { SheetManager } from "react-native-actions-sheet";
|
import { SheetManager } from "react-native-actions-sheet";
|
||||||
import { useTrainMenu } from "../stateBox/useTrainMenu";
|
import { useTrainMenu } from "../stateBox/useTrainMenu";
|
||||||
//import { MapPin } from "./TrainMenu/MapPin";
|
//import { MapPin } from "./TrainMenu/MapPin";
|
||||||
|
@ -5,6 +5,7 @@ import {
|
|||||||
trainDataType,
|
trainDataType,
|
||||||
trainPosition,
|
trainPosition,
|
||||||
} from "../../../lib/trainPositionTextArray";
|
} from "../../../lib/trainPositionTextArray";
|
||||||
|
import { lineList } from "../../../lib/getStationList";
|
||||||
import { getStationID } from "../../../lib/eachTrainInfoCoreLib/getStationData";
|
import { getStationID } from "../../../lib/eachTrainInfoCoreLib/getStationData";
|
||||||
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
|
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { trainDataType } from "./trainPositionTextArray";
|
import { trainDataType } from "./trainPositionTextArray";
|
||||||
import { stationIDPair } from "../lib/getStationList";
|
import { getStationID } from "./eachTrainInfoCoreLib/getStationData";
|
||||||
|
import { stationIDPair } from "../lib/getStationList2";
|
||||||
|
|
||||||
export const checkDuplicateTrainData = (
|
export const checkDuplicateTrainData = (
|
||||||
currentTrainArray: trainDataType[],
|
currentTrainArray: trainDataType[],
|
||||||
|
@ -40,41 +40,6 @@ export const lineListPair = {
|
|||||||
N: "鳴門線(池谷-鳴門間)[N]",
|
N: "鳴門線(池谷-鳴門間)[N]",
|
||||||
M: "瀬戸大橋線(児島-宇多津間)[M]",
|
M: "瀬戸大橋線(児島-宇多津間)[M]",
|
||||||
};
|
};
|
||||||
export const getStationList2 = async () => {
|
|
||||||
return {
|
|
||||||
yosan,
|
|
||||||
uwajima,
|
|
||||||
uwajima2,
|
|
||||||
dosan,
|
|
||||||
dosan2,
|
|
||||||
koutoku,
|
|
||||||
tokushima,
|
|
||||||
naruto,
|
|
||||||
seto,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
export const stationIDPair = {
|
|
||||||
yosan: "Y",
|
|
||||||
uwajima: "U",
|
|
||||||
uwajima2: "S",
|
|
||||||
dosan: "D",
|
|
||||||
dosan2: "K",
|
|
||||||
koutoku: "T",
|
|
||||||
tokushima: "B",
|
|
||||||
naruto: "N",
|
|
||||||
seto: "M",
|
|
||||||
};
|
|
||||||
export const stationNamePair = {
|
|
||||||
"予讃線(高松 - 松山)": "yosan",
|
|
||||||
"予讃線・内子線(松山 - 内子 - 宇和島)": "uwajima",
|
|
||||||
"予讃線・伊予灘線(向井原 - 伊予大洲)": "uwajima2",
|
|
||||||
"土讃線(多度津 - 高知)": "dosan",
|
|
||||||
"土讃線(高知 - 窪川)": "dosan2",
|
|
||||||
"高徳線(高松 - 徳島)": "koutoku",
|
|
||||||
"徳島線(徳島 - 阿波池田)": "tokushima",
|
|
||||||
"鳴門線(池谷 - 鳴門)": "naruto",
|
|
||||||
"瀬戸大橋線(児島 - 宇多津)": "seto",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getStationList = async () => {
|
export const getStationList = async () => {
|
||||||
if (status) return status;
|
if (status) return status;
|
||||||
|
46
lib/getStationList2.ts
Normal file
46
lib/getStationList2.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import yosan from "../assets/originData/yosan";
|
||||||
|
import uwajima from "../assets/originData/uwajima";
|
||||||
|
import uwajima2 from "../assets/originData/uwajima2";
|
||||||
|
import dosan from "../assets/originData/dosan";
|
||||||
|
import dosan2 from "../assets/originData/dosan2";
|
||||||
|
import koutoku from "../assets/originData/koutoku";
|
||||||
|
import tokushima from "../assets/originData/tokushima";
|
||||||
|
import naruto from "../assets/originData/naruto";
|
||||||
|
import seto from "../assets/originData/seto";
|
||||||
|
export const getStationList2 = async () => {
|
||||||
|
return {
|
||||||
|
yosan,
|
||||||
|
uwajima,
|
||||||
|
uwajima2,
|
||||||
|
dosan,
|
||||||
|
dosan2,
|
||||||
|
koutoku,
|
||||||
|
tokushima,
|
||||||
|
naruto,
|
||||||
|
seto,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const stationIDPair = {
|
||||||
|
yosan: "Y",
|
||||||
|
uwajima: "U",
|
||||||
|
uwajima2: "S",
|
||||||
|
dosan: "D",
|
||||||
|
dosan2: "K",
|
||||||
|
koutoku: "T",
|
||||||
|
tokushima: "B",
|
||||||
|
naruto: "N",
|
||||||
|
seto: "M",
|
||||||
|
};
|
||||||
|
|
||||||
|
export const stationNamePair = {
|
||||||
|
"予讃線(高松 - 松山)": "yosan",
|
||||||
|
"予讃線・内子線(松山 - 内子 - 宇和島)": "uwajima",
|
||||||
|
"予讃線・伊予灘線(向井原 - 伊予大洲)": "uwajima2",
|
||||||
|
"土讃線(多度津 - 高知)": "dosan",
|
||||||
|
"土讃線(高知 - 窪川)": "dosan2",
|
||||||
|
"高徳線(高松 - 徳島)": "koutoku",
|
||||||
|
"徳島線(徳島 - 阿波池田)": "tokushima",
|
||||||
|
"鳴門線(池谷 - 鳴門)": "naruto",
|
||||||
|
"瀬戸大橋線(児島 - 宇多津)": "seto",
|
||||||
|
};
|
8
menu.js
8
menu.js
@ -17,6 +17,7 @@ import { widthPercentageToDP as wp } from "react-native-responsive-screen";
|
|||||||
import { Ionicons } from "@expo/vector-icons";
|
import { Ionicons } from "@expo/vector-icons";
|
||||||
import LottieView from "lottie-react-native";
|
import LottieView from "lottie-react-native";
|
||||||
import { parseAllTrainDiagram } from "./lib/parseAllTrainDiagram";
|
import { parseAllTrainDiagram } from "./lib/parseAllTrainDiagram";
|
||||||
|
import trainList from "./assets/originData/trainList";
|
||||||
|
|
||||||
import LED_vision from "./components/発車時刻表/LED_vidion";
|
import LED_vision from "./components/発車時刻表/LED_vidion";
|
||||||
import Sign from "./components/駅名表/Sign";
|
import Sign from "./components/駅名表/Sign";
|
||||||
@ -36,7 +37,6 @@ import { StationNumber } from "./components/Menu/StationPagination";
|
|||||||
import lineColorList from "./assets/originData/lineColorList";
|
import lineColorList from "./assets/originData/lineColorList";
|
||||||
import { AS } from "./storageControl";
|
import { AS } from "./storageControl";
|
||||||
import { SimpleDot } from "./components/Menu/SimpleDot";
|
import { SimpleDot } from "./components/Menu/SimpleDot";
|
||||||
import { useAllTrainDiagram } from "./stateBox/useAllTrainDiagram";
|
|
||||||
|
|
||||||
export default function Menu({ getCurrentTrain }) {
|
export default function Menu({ getCurrentTrain }) {
|
||||||
const { navigate } = useNavigation();
|
const { navigate } = useNavigation();
|
||||||
@ -131,7 +131,11 @@ export default function Menu({ getCurrentTrain }) {
|
|||||||
}, [selectedCurrentStation]);
|
}, [selectedCurrentStation]);
|
||||||
|
|
||||||
//全列車ダイヤリストを作成するuseEffect
|
//全列車ダイヤリストを作成するuseEffect
|
||||||
const { allTrainDiagram:trainDiagram} = useAllTrainDiagram();
|
const [trainDiagram, setTrainDiagram] = useState(null); // 全列車のダイヤを列番ベースで整理
|
||||||
|
useEffect(() => {
|
||||||
|
//全列車リストを生成する副作用[無条件初回実行]
|
||||||
|
setTrainDiagram(trainList);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const oPSign = () => {
|
const oPSign = () => {
|
||||||
const payload = {
|
const payload = {
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import trainList from "@/assets/originData/trainList";
|
|
||||||
import { AS } from "@/storageControl";
|
|
||||||
import React, { createContext, useContext, useEffect, useState } from "react";
|
import React, { createContext, useContext, useEffect, useState } from "react";
|
||||||
const initialState = {
|
const initialState = {
|
||||||
allTrainDiagram: undefined,
|
allTrainDiagram: undefined,
|
||||||
@ -11,14 +9,24 @@ const AllTrainDiagramContext = createContext(initialState);
|
|||||||
export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
|
export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
|
||||||
|
|
||||||
export const AllTrainDiagramProvider = ({ children }) => {
|
export const AllTrainDiagramProvider = ({ children }) => {
|
||||||
const [allTrainDiagram, setAllTrainDiagram] = useState(trainList);
|
const [allTrainDiagram, setAllTrainDiagram] = useState();
|
||||||
const [keyList, setKeyList] = useState(); // 第二要素
|
const [keyList, setKeyList] = useState(); // 第二要素
|
||||||
useEffect(
|
useEffect(
|
||||||
() => allTrainDiagram && setKeyList(Object.keys(allTrainDiagram)),
|
() => allTrainDiagram && setKeyList(Object.keys(allTrainDiagram)),
|
||||||
[allTrainDiagram]
|
[allTrainDiagram]
|
||||||
);
|
);
|
||||||
|
const customData = {
|
||||||
|
"9395D":"臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250314_20250413_tomorrow_together_worldtour.pdf#高松,発,22:10#昭和町,発,22:13#栗林公園北口,発,22:16#栗林,発,22:19#木太町,発,22:23#屋島,発,22:36#古高松南,発,22:39#八栗口,発,22:43#讃岐牟礼,発,22:45#志度,発,22:49#オレンジタウン,発,22:53#造田,発,22:57#神前,発,23:00#讃岐津田,発,23:06#鶴羽,発,23:10#丹生,発,23:15#三本松,着,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:48#早島,発,22:55#妹尾,発,22:59#岡山,着,23:06#",
|
||||||
|
"9662D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#宇和島,発,10:00#北宇和島,発,10:03#高光,発,10:07#伊予吉田,発,10:21#立間,発,10:50#下宇和,発,10:36#卯之町,発,10:39#上宇和,発,10:42#伊予石城,発,10:46#双岩,発,10:53#八幡浜,着,10:58#",
|
||||||
|
"9664D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#卯之町,発,11:18#上宇和,発,11:21#伊予石城,発,11:25#双岩,発,11:34#八幡浜,着,11:39#",
|
||||||
|
"9663D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#八幡浜,発,10:07#双岩,発,10:16#伊予石城,発,10:23#上宇和,発,10:27#卯之町,着,10:30#",
|
||||||
|
"9665D":"宇和れんげまつり臨時列車,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250124_20250629_rinji_spring.pdf#八幡浜,発,13:38#双岩,発,13:45#伊予石城,発,13:52#上宇和,発,13:56#卯之町,発,14:07#下宇和,発,14:10#立間,発,14:18#伊予吉田,発,14:25#高光,発,14:31#北宇和島,発,14:35#宇和島,着,14:37#",
|
||||||
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch("https://n8n.haruk.in/webhook/JR-shikoku-diagram-migrate-original")
|
fetch(
|
||||||
|
"https://n8n.haruk.in/webhook/CrowdTh%E2%82%AC71m3Ra7!ngLead%E2%82%ACr$"
|
||||||
|
)
|
||||||
.then((res) => res.json())
|
.then((res) => res.json())
|
||||||
.then((res) => res.data)
|
.then((res) => res.data)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@ -30,21 +38,34 @@ export const AllTrainDiagramProvider = ({ children }) => {
|
|||||||
return data;
|
return data;
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
Object.assign(res, customData);
|
||||||
setAllTrainDiagram(res);
|
setAllTrainDiagram(res);
|
||||||
AS.setItem("allTrainDiagram", JSON.stringify(res));
|
|
||||||
})
|
})
|
||||||
.catch((d) => {
|
.catch((d) => {
|
||||||
AS.getItem("allTrainDiagram")
|
alert("allTrainDiagram取得エラー/再取得します");
|
||||||
.then((d) => setAllTrainDiagram(JSON.parse(d)))
|
alert(d);
|
||||||
.catch(() => {
|
fetch(
|
||||||
alert("初回の路線情報の取得に失敗しました。");
|
"https://script.google.com/macros/s/AKfycbx_s7RB-xTy-iAslFJg7LfplLV09-hjDXEjdi9kCP_JT45wq17Af_IPOKIOqIfaNDg/exec"
|
||||||
|
)
|
||||||
|
.then((res) => res.json())
|
||||||
|
.then((res) => {
|
||||||
|
const data = {};
|
||||||
|
res.forEach((d) => {
|
||||||
|
const keys = Object.keys(d);
|
||||||
|
data[keys] = d[keys];
|
||||||
|
});
|
||||||
|
return data;
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
Object.assign(res, customData);
|
||||||
|
setAllTrainDiagram(res);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AllTrainDiagramContext.Provider
|
<AllTrainDiagramContext.Provider
|
||||||
value={{ allTrainDiagram, setAllTrainDiagram, keyList }}
|
value={{ allTrainDiagram, setAllTrainDiagram,keyList }}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</AllTrainDiagramContext.Provider>
|
</AllTrainDiagramContext.Provider>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { createContext, useContext, useState, useEffect } from "react";
|
import React, { createContext, useContext, useState, useEffect } from "react";
|
||||||
|
import trainList from "../assets/originData/trainList";
|
||||||
import { AS } from "../storageControl";
|
import { AS } from "../storageControl";
|
||||||
import { useAllTrainDiagram } from "./useAllTrainDiagram";
|
|
||||||
const initialState = {
|
const initialState = {
|
||||||
busAndTrainData: [],
|
busAndTrainData: [],
|
||||||
setBusAndTrainData: () => {},
|
setBusAndTrainData: () => {},
|
||||||
@ -17,7 +17,6 @@ export const useBusAndTrainData = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const BusAndTrainDataProvider = ({ children }) => {
|
export const BusAndTrainDataProvider = ({ children }) => {
|
||||||
const { allTrainDiagram } = useAllTrainDiagram();
|
|
||||||
const [busAndTrainData, setBusAndTrainData] = useState([]);
|
const [busAndTrainData, setBusAndTrainData] = useState([]);
|
||||||
const [trainPairData, setTrainPairData] = useState([]);
|
const [trainPairData, setTrainPairData] = useState([]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -279,12 +278,12 @@ export const BusAndTrainDataProvider = ({ children }) => {
|
|||||||
returnArray.push("576D");
|
returnArray.push("576D");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum)) {
|
if(new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum)){
|
||||||
if (allTrainDiagram["5" + trainNum.substring(1)])
|
if (trainList["5" + trainNum.substring(1)])
|
||||||
returnArray.push("5" + trainNum.substring(1));
|
returnArray.push("5" + trainNum.substring(1));
|
||||||
}
|
}
|
||||||
if (new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum)) {
|
if(new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum)){
|
||||||
if (allTrainDiagram["4" + trainNum.substring(1)])
|
if (trainList["4" + trainNum.substring(1)])
|
||||||
returnArray.push("4" + trainNum.substring(1));
|
returnArray.push("4" + trainNum.substring(1));
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
@ -292,21 +291,19 @@ export const BusAndTrainDataProvider = ({ children }) => {
|
|||||||
new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) ||
|
new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) ||
|
||||||
new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum)
|
new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum)
|
||||||
) {
|
) {
|
||||||
if (allTrainDiagram[trainNum.substring(1)]) {
|
if (trainList[trainNum.substring(1)]) {
|
||||||
returnArray.push(trainNum.substring(1));
|
returnArray.push(trainNum.substring(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (new RegExp(/^[1-9]\d\d[DM]$/).test(trainNum)) {
|
if (new RegExp(/^[1-9]\d\d[DM]$/).test(trainNum)) {
|
||||||
// 列番がxxDの場合は4xxDと5xxDの列番を検索
|
// 列番がxxDの場合は4xxDと5xxDの列番を検索
|
||||||
if (allTrainDiagram["4" + trainNum]) returnArray.push("4" + trainNum);
|
if (trainList["4" + trainNum]) returnArray.push("4" + trainNum);
|
||||||
if (allTrainDiagram["5" + trainNum]) returnArray.push("5" + trainNum);
|
if (trainList["5" + trainNum]) returnArray.push("5" + trainNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!returnArray.length) return [];
|
if (!returnArray.length) return [];
|
||||||
const TDArray = returnArray
|
const TDArray = returnArray.filter(d => trainList.hasOwnProperty(d)).map((d) => {
|
||||||
.filter((d) => allTrainDiagram.hasOwnProperty(d))
|
const TD = trainList[d];
|
||||||
.map((d) => {
|
|
||||||
const TD = allTrainDiagram[d];
|
|
||||||
if (!TD) return;
|
if (!TD) return;
|
||||||
return { id: d, TrainData: TD.split("#").filter((d) => d != "") };
|
return { id: d, TrainData: TD.split("#").filter((d) => d != "") };
|
||||||
});
|
});
|
||||||
|
@ -5,7 +5,8 @@ import React, {
|
|||||||
useEffect,
|
useEffect,
|
||||||
FC,
|
FC,
|
||||||
} from "react";
|
} from "react";
|
||||||
import { lineList, getStationList } from "../lib/getStationList";
|
import { getStationList } from "../lib/getStationList";
|
||||||
|
import { lineList } from "../lib/getStationList";
|
||||||
|
|
||||||
type initialStateType = {
|
type initialStateType = {
|
||||||
originalStationList: any[][];
|
originalStationList: any[][];
|
||||||
|
@ -20,7 +20,7 @@ export const TrainDelayDataProvider = ({ children }) => {
|
|||||||
const [loadingDelayData, setLoadingDelayData] = useState(true);
|
const [loadingDelayData, setLoadingDelayData] = useState(true);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch(
|
fetch(
|
||||||
"https://script.google.com/macros/s/AKfycbw-0RDLAu8EQAEWA860tk4KVW6VOr3iIU900AcWEfqIP16gtNUG1XO_A3oBfAGiNeCf/exec"
|
"https://script.google.com/macros/s/AKfycbyKxch7z7l8e07LXulRHqxjVoIiB13kcgvoToLE-rqlxLmLSKdlmqz0FI1F2EuA7Zfg/exec"
|
||||||
)
|
)
|
||||||
.then((response) => response.text())
|
.then((response) => response.text())
|
||||||
.then((data) => setDelayData(data !== "" ? data.split("^") : null))
|
.then((data) => setDelayData(data !== "" ? data.split("^") : null))
|
||||||
|
@ -2,7 +2,7 @@ import React, { createContext, useContext, useState, useEffect } from "react";
|
|||||||
|
|
||||||
import { ASCore } from "../storageControl";
|
import { ASCore } from "../storageControl";
|
||||||
|
|
||||||
import { getStationList2 } from "../lib/getStationList";
|
import { getStationList2 } from "../lib/getStationList2";
|
||||||
import { injectJavascriptData } from "../lib/webViewInjectjavascript";
|
import { injectJavascriptData } from "../lib/webViewInjectjavascript";
|
||||||
|
|
||||||
const initialState = {
|
const initialState = {
|
||||||
|
Loading…
Reference in New Issue
Block a user