398 lines
5.4 KiB
JavaScript
398 lines
5.4 KiB
JavaScript
import React, { createContext, useContext, useState, useEffect } from "react";
|
|
import useInterval from "../lib/useInterval";
|
|
|
|
const initialState = {
|
|
areaInfo: "",
|
|
setAreainfo: () => {},
|
|
areaIconBadgeText: "",
|
|
areaStationID: [],
|
|
};
|
|
|
|
const AreaInfoContext = createContext(initialState);
|
|
|
|
export const useAreaInfo = () => {
|
|
return useContext(AreaInfoContext);
|
|
};
|
|
|
|
const setoStationID = [
|
|
"Y00",
|
|
"Y01",
|
|
"Y02",
|
|
"Y03",
|
|
"Y04",
|
|
"Y05",
|
|
"Y06",
|
|
"Y07",
|
|
"Y08",
|
|
"Y09",
|
|
"Y10",
|
|
"Y11",
|
|
"Y12",
|
|
];
|
|
|
|
const yosan1StationID = [
|
|
"Y12",
|
|
"Y13",
|
|
"Y14",
|
|
"Y15",
|
|
"Y16",
|
|
"Y17",
|
|
"Y18",
|
|
"Y19",
|
|
"Y20",
|
|
"Y21",
|
|
"Y22",
|
|
"Y23",
|
|
"Y24",
|
|
"Y25",
|
|
"Y26",
|
|
"Y27",
|
|
"Y28",
|
|
"Y29",
|
|
"Y30",
|
|
"Y31",
|
|
"Y32",
|
|
"Y33",
|
|
"Y34",
|
|
"Y35",
|
|
"Y36",
|
|
"Y37",
|
|
"Y38",
|
|
"Y39",
|
|
"Y40",
|
|
"Y41",
|
|
"Y42",
|
|
"Y43",
|
|
"Y44",
|
|
"Y45",
|
|
"Y46",
|
|
"Y47",
|
|
"Y48",
|
|
"Y49",
|
|
"Y50",
|
|
"Y51",
|
|
"Y52",
|
|
"Y53",
|
|
"Y54",
|
|
"Y55",
|
|
];
|
|
|
|
const yosan2StationID = [
|
|
"U00",
|
|
"U01",
|
|
"U02",
|
|
"U02-1",
|
|
"U03",
|
|
"U04",
|
|
"U05",
|
|
"U06",
|
|
"U07",
|
|
"U08",
|
|
"U09",
|
|
"U10",
|
|
"U11",
|
|
"U12",
|
|
"U13",
|
|
"U14",
|
|
"U15",
|
|
"U16",
|
|
"U17",
|
|
"U18",
|
|
"U19",
|
|
"U20",
|
|
"U21",
|
|
"U22",
|
|
"U23",
|
|
"U24",
|
|
"U25",
|
|
"U26",
|
|
"U27",
|
|
"U28",
|
|
"S06",
|
|
"S07",
|
|
"S08",
|
|
"S09",
|
|
"S10",
|
|
"S11",
|
|
"S12",
|
|
"S13",
|
|
"S14",
|
|
"S15",
|
|
"S16",
|
|
"S17",
|
|
"S18",
|
|
];
|
|
|
|
const dosan1StationID = [
|
|
"D12",
|
|
"D13",
|
|
"D14",
|
|
"D15",
|
|
"D16",
|
|
"D17",
|
|
"D18",
|
|
"D19",
|
|
"D20",
|
|
"D21",
|
|
"D22",
|
|
"D23",
|
|
"D24",
|
|
"D25",
|
|
"D26",
|
|
"D27",
|
|
"D28",
|
|
"D29",
|
|
"D30",
|
|
"D31",
|
|
"D32",
|
|
"D33",
|
|
"D34",
|
|
"D35",
|
|
"D36",
|
|
"D37",
|
|
"D38",
|
|
"D39",
|
|
"D40",
|
|
"D41",
|
|
"D42",
|
|
"D43",
|
|
"D44",
|
|
"D45",
|
|
];
|
|
const dosan2StationID = [
|
|
"K00",
|
|
"K01",
|
|
"K02",
|
|
"K03",
|
|
"K04",
|
|
"K05",
|
|
"K06",
|
|
"K07",
|
|
"K08",
|
|
"K08-1",
|
|
"K09",
|
|
"K10",
|
|
"K11",
|
|
"K12",
|
|
"K13",
|
|
"K14",
|
|
"K15",
|
|
"K16",
|
|
"K17",
|
|
"K18",
|
|
"K19",
|
|
"K20",
|
|
"K21",
|
|
"K22",
|
|
"K23",
|
|
"K24",
|
|
"K25",
|
|
"K26",
|
|
];
|
|
|
|
const kotokuStationID = [
|
|
"T00",
|
|
"T01",
|
|
"T02",
|
|
"T03",
|
|
"T04",
|
|
"T05",
|
|
"T06",
|
|
"T07",
|
|
"T08",
|
|
"T09",
|
|
"T10",
|
|
"T11",
|
|
"T12",
|
|
"T13",
|
|
"T14",
|
|
"T15",
|
|
"T16",
|
|
"T17",
|
|
"T18",
|
|
"T19",
|
|
"T20",
|
|
"T21",
|
|
"T22",
|
|
"T23",
|
|
"T24",
|
|
"T25",
|
|
"T26",
|
|
"T27",
|
|
"T28",
|
|
];
|
|
|
|
const mugiStationID = [
|
|
"T00",
|
|
"M00",
|
|
"M01",
|
|
"M02",
|
|
"M03",
|
|
"M04",
|
|
"M05",
|
|
"M06",
|
|
"M07",
|
|
"M08",
|
|
"M09",
|
|
"M10",
|
|
"M11",
|
|
"M12",
|
|
"M13",
|
|
"M14",
|
|
"M15",
|
|
"M16",
|
|
"M17",
|
|
"M18",
|
|
"M19",
|
|
"M20",
|
|
"M21",
|
|
"M22",
|
|
"M23",
|
|
"M24",
|
|
"M25",
|
|
"M26",
|
|
"M27",
|
|
];
|
|
|
|
const tokushimaStationID = [
|
|
"T00",
|
|
"T01",
|
|
"B00",
|
|
"B01",
|
|
"B02",
|
|
"B03",
|
|
"B04",
|
|
"B05",
|
|
"B06",
|
|
"B07",
|
|
"B08",
|
|
"B09",
|
|
"B10",
|
|
"B11",
|
|
"B12",
|
|
"B13",
|
|
"B14",
|
|
"B15",
|
|
"B16",
|
|
"B17",
|
|
"B18",
|
|
"B19",
|
|
"B20",
|
|
"B21",
|
|
"B22",
|
|
"B23",
|
|
"B24",
|
|
"B25",
|
|
];
|
|
|
|
const narutoStationID = [
|
|
"T00",
|
|
"T01",
|
|
"T02",
|
|
"T03",
|
|
"T04",
|
|
"N04",
|
|
"N05",
|
|
"N06",
|
|
"N07",
|
|
"N08",
|
|
"N09",
|
|
"N10",
|
|
];
|
|
|
|
const yodoStationID = [
|
|
"K26",
|
|
"U28",
|
|
"U27",
|
|
"G27",
|
|
"G28",
|
|
"G29",
|
|
"G30",
|
|
"G31",
|
|
"G32",
|
|
"G33",
|
|
"G34",
|
|
"G35",
|
|
"G36",
|
|
"G37",
|
|
"G38",
|
|
"G39",
|
|
"G40",
|
|
"G41",
|
|
"G42",
|
|
"G43",
|
|
"G44",
|
|
"G45",
|
|
"G46",
|
|
"G47",
|
|
];
|
|
|
|
const areaStationPair = {
|
|
seto: { id: "Y", stationID: setoStationID },
|
|
yosan1: { id: "Y", stationID: yosan1StationID },
|
|
yosan2: { id: "U,S", stationID: yosan2StationID },
|
|
dosan1: { id: "D", stationID: dosan1StationID },
|
|
dosan2: { id: "K", stationID: dosan2StationID },
|
|
kotoku: { id: "T", stationID: kotokuStationID },
|
|
mugi: { id: "M", stationID: mugiStationID },
|
|
tokushima: { id: "B", stationID: tokushimaStationID },
|
|
naruto: { id: "N", stationID: narutoStationID },
|
|
yodo: { id: "G", stationID: yodoStationID },
|
|
};
|
|
|
|
export const AreaInfoProvider = ({ children }) => {
|
|
const [areaInfo, setAreaInfo] = useState("");
|
|
const [areaIconBadgeText, setAreaIconBadgeText] = useState("");
|
|
const [areaStationID, setAreaStationID] = useState([]);
|
|
const [isInfo, setIsInfo] = useState(false);
|
|
const getAreaData = () => {
|
|
fetch(
|
|
"https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec"
|
|
)
|
|
.then((d) => d.text())
|
|
.then((d) => setAreaInfo(d));
|
|
fetch("https://n8n.haruk.in/webhook/jr-shikoku-trainfo-flag")
|
|
.then((d) => d.json())
|
|
.then((d) => {
|
|
if (!d.data) return;
|
|
const lineInfo = d.data.filter((e) => e.area != "genelic");
|
|
const genelicInfo = d.data.filter((e) => e.area == "genelic");
|
|
const text = lineInfo
|
|
.filter((e) => e.status)
|
|
.map((e) => {
|
|
return `${areaStationPair[e.area].id}`;
|
|
});
|
|
let stationIDList = [];
|
|
lineInfo
|
|
.filter((e) => e.status)
|
|
.forEach((e) => {
|
|
stationIDList = stationIDList.concat(
|
|
areaStationPair[e.area].stationID
|
|
);
|
|
});
|
|
const info = genelicInfo[0].status.includes("nodelay") ? true : false;
|
|
setIsInfo(info);
|
|
setAreaStationID(stationIDList);
|
|
setAreaIconBadgeText(
|
|
text.length == 0 ? (info ? "i" : "!") : text.join(",")
|
|
);
|
|
});
|
|
};
|
|
useEffect(getAreaData, []);
|
|
useInterval(getAreaData, 60000); //60秒毎に全在線列車取得
|
|
return (
|
|
<AreaInfoContext.Provider
|
|
value={{
|
|
areaInfo,
|
|
setAreaInfo,
|
|
areaIconBadgeText,
|
|
areaStationID,
|
|
isInfo,
|
|
setIsInfo,
|
|
}}
|
|
>
|
|
{children}
|
|
</AreaInfoContext.Provider>
|
|
);
|
|
};
|