import React, { createContext, useContext, useState, useEffect } from "react"; import trainList from "../assets/originData/trainList"; import { AS } from "../storageControl"; const initialState = { busAndTrainData: [], setBusAndTrainData: () => {}, trainPairData: [], setTrainPairData: () => {}, initializeTrainPairList: () => {}, getInfluencedTrainData: () => {}, }; const BusAndTrainDataContext = createContext(initialState); export const useBusAndTrainData = () => { return useContext(BusAndTrainDataContext); }; export const BusAndTrainDataProvider = ({ children }) => { const [busAndTrainData, setBusAndTrainData] = useState([]); const [trainPairData, setTrainPairData] = useState([]); useEffect(() => { AS.getItem("busAndTrain202403") .then((d) => { const returnData = JSON.parse(d); setBusAndTrainData(returnData); }) .catch(() => { fetch( "https://script.google.com/macros/s/AKfycbw0UW6ZeCDgUYFRP0zxpc_Oqfy-91dBdbWv-cM8n3narKp14IyCd2wy5HW7taXcW7E/exec" ) .then((d) => d.json()) .then((d) => { setBusAndTrainData(d); AS.setItem("busAndTrain202403", JSON.stringify(d)); }); }); }, []); useEffect(() => { AS.getItem("trainPairData202403") .then((d) => { const returnData = JSON.parse(d); setTrainPairData(returnData); }) .catch(() => { fetch( "https://script.google.com/macros/s/AKfycbyoBH7_rBwzPmhU1ghRBNTAVuvGltIrZtWxE07gDdhGGlDL9Ip2qk3pFM5u2xtRBl8/exec" ) .then((d) => d.json()) .then((d) => { setTrainPairData(d); AS.setItem("trainPairData202403", JSON.stringify(d)); }); }); }, []); const initializeTrainPairList = () => { const trainPairList = {}; trainPairData.forEach((d) => { trainPairList[Object.keys(d)[0]] = d[Object.keys(d)[0]]; }); return trainPairList; }; const getInfluencedTrainData = (trainNum) => { const trainPairList = initializeTrainPairList(); const returnArray = []; if (!trainNum) return; if (trainPairList[trainNum]) { returnArray.push(Object.keys(trainPairList[trainNum])[0]); } if ( // 列番が4xxDまたは5xxDの場合はxxDの列番を検索 new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) || new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum) ) { if (trainList[trainNum.substring(1)]) { returnArray.push(trainNum.substring(1)); } } if (new RegExp(/^[1-9]\d\d[DM]$/).test(trainNum)) { // 列番がxxDの場合は4xxDと5xxDの列番を検索 if (trainList["4" + trainNum]) returnArray.push("4" + trainNum); if (trainList["5" + trainNum]) returnArray.push("5" + trainNum); } if (!returnArray[0]) return [[], []]; const TD = trainList[returnArray[0]]; if (!TD) return [[], []]; const TDArray = TD.split("#").filter((d) => d != ""); return [returnArray, TDArray]; }; return ( {children} ); };