145 lines
3.8 KiB
TypeScript
145 lines
3.8 KiB
TypeScript
import React, {
|
|
createContext,
|
|
useContext,
|
|
useState,
|
|
useEffect,
|
|
FC,
|
|
} 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);
|
|
};
|
|
type props = { children: React.ReactNode };
|
|
export const TrainMenuProvider: FC<props> = ({ children }) => {
|
|
const { expoPushToken } = useNotification();
|
|
const [selectedLine, setSelectedLine] = useState(undefined);
|
|
const [mapsStationData, setMapsStationData] = useState(undefined);
|
|
useEffect(() => {
|
|
getStationList2().then(setMapsStationData);
|
|
}, []);
|
|
type boolType = "true" | "false" | undefined;
|
|
//画面表示関連
|
|
const [iconSetting, setIconSetting] = useState<boolType>(undefined);
|
|
const [mapSwitch, setMapSwitch] = useState<boolType>(undefined);
|
|
const [stationMenu, setStationMenu] = useState<boolType>(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>
|
|
);
|
|
};
|