Files
jrshikoku/stateBox/useTrainMenu.tsx
harukin-expo-dev-env 9ab4c0a205 tsへファイル移動
2025-09-11 15:05:32 +00:00

136 lines
3.7 KiB
TypeScript

import React, { createContext, useContext, useState, useEffect } from "react";
import { ASCore } from "../storageControl";
import { getStationList2 } from "../lib/getStationList";
import { injectJavascriptData } from "../lib/webViewInjectjavascript";
import { useNotification } from "../stateBox/useNotifications";
const initialState = {
selectedLine: undefined,
setSelectedLine: (e) => {},
mapsStationData: undefined,
setMapsStationData: (e) => {},
iconSetting: undefined,
setIconSetting: (e) => {},
mapSwitch: undefined,
setMapSwitch: (e) => {},
stationMenu: undefined,
setStationMenu: (e) => {},
uiSetting: undefined,
setUiSetting: (e) => {},
LoadError: false,
setLoadError: (e) => {},
trainInfo: {
trainNum: undefined,
limited: undefined,
trainData: undefined,
},
setTrainInfo: (e) => {},
trainMenu: "true",
setTrainMenu: (e) => {},
updatePermission : false,
setUpdatePermission : (e) => {},
injectJavascript: "",
};
const TrainMenuContext = createContext(initialState);
export const useTrainMenu = () => {
return useContext(TrainMenuContext);
};
export const TrainMenuProvider = ({ children }) => {
const { expoPushToken } = useNotification();
const [selectedLine, setSelectedLine] = useState(undefined);
const [mapsStationData, setMapsStationData] = useState(undefined);
useEffect(() => {
getStationList2().then(setMapsStationData);
}, []);
//画面表示関連
const [iconSetting, setIconSetting] = useState<"true" | "false" | undefined>(undefined);
const [mapSwitch, setMapSwitch] = useState<"true" | "false" | undefined>(undefined);
const [stationMenu, setStationMenu] = useState<"true" | "false" | undefined>(undefined);
const [LoadError, setLoadError] = useState(false);
//更新権限所有確認
const [updatePermission, setUpdatePermission] = useState(false);
useEffect(()=>{
fetch("https://n8n.haruk.in/webhook/data-edit-permission?token=" + expoPushToken).then((res)=>res.json())
.then((res)=>{
if(res.data == true){
setUpdatePermission(true);
}else{
setUpdatePermission(false);
}
})
}, [expoPushToken])
//列車情報表示関連
const [trainInfo, setTrainInfo] = useState({
trainNum: undefined,
limited: undefined,
trainData: undefined,
});
//駅情報画面用
const [trainMenu, setTrainMenu] = useState("true");
//GUIデザインベース
const [uiSetting, setUiSetting] = useState("tokyo");
//地図表示テキスト
const injectJavascript = injectJavascriptData(
mapSwitch,
iconSetting,
stationMenu,
trainMenu,
uiSetting
);
useEffect(() => {
//列車アイコンスイッチ
ASCore({ k: "iconSwitch", s: setIconSetting, d: "true", u: true });
//地図スイッチ
ASCore({ k: "mapSwitch", s: setMapSwitch, d: "true", u: true });
//駅メニュースイッチ
ASCore({ k: "stationSwitch", s: setStationMenu, d: "true", u: true });
//列車メニュースイッチ
ASCore({ k: "trainSwitch", s: setTrainMenu, d: "true", u: true });
//GUIデザインベーススイッチ
ASCore({ k: "uiSetting", s: setUiSetting, d: "tokyo", u: true });
}, []);
return (
<TrainMenuContext.Provider
value={{
selectedLine,
setSelectedLine,
mapsStationData,
setMapsStationData,
iconSetting,
setIconSetting,
mapSwitch,
setMapSwitch,
stationMenu,
setStationMenu,
uiSetting,
setUiSetting,
LoadError,
setLoadError,
trainInfo,
setTrainInfo,
trainMenu,
setTrainMenu,
updatePermission,
setUpdatePermission,
injectJavascript,
}}
>
{children}
</TrainMenuContext.Provider>
);
};