jrshikoku/stateBox/useAreaInfo.js
2024-09-09 14:36:15 +00:00

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>
);
};