tsへファイル移動
This commit is contained in:
@@ -95,7 +95,7 @@ export function MenuPage() {
|
|||||||
return unsubscribe;
|
return unsubscribe;
|
||||||
}, [navigation, mapHeight, favoriteStation, setFavoriteStation]);
|
}, [navigation, mapHeight, favoriteStation, setFavoriteStation]);
|
||||||
return (
|
return (
|
||||||
<Stack.Navigator>
|
<Stack.Navigator id={null}>
|
||||||
<Stack.Screen
|
<Stack.Screen
|
||||||
name="menu"
|
name="menu"
|
||||||
options={{
|
options={{
|
@@ -50,7 +50,7 @@ export const Top = () => {
|
|||||||
}, [addListener, mapSwitch]);
|
}, [addListener, mapSwitch]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack.Navigator detachInactiveScreens={false}>
|
<Stack.Navigator id={null} detachInactiveScreens={false}>
|
||||||
<Stack.Screen
|
<Stack.Screen
|
||||||
name="Apps"
|
name="Apps"
|
||||||
options={{
|
options={{
|
@@ -189,7 +189,6 @@ export const FixedTrain: FC<props> = ({ trainID }) => {
|
|||||||
searchCount < points.length;
|
searchCount < points.length;
|
||||||
searchCount++
|
searchCount++
|
||||||
) {
|
) {
|
||||||
console.log(trainDataWidhThrough[searchCount]);
|
|
||||||
const nextPos = trainDataWidhThrough[searchCount];
|
const nextPos = trainDataWidhThrough[searchCount];
|
||||||
if (nextPos) {
|
if (nextPos) {
|
||||||
const [station, se, time] = nextPos.split(",");
|
const [station, se, time] = nextPos.split(",");
|
||||||
|
@@ -3,20 +3,26 @@ import useInterval from "@/lib/useInterval";
|
|||||||
import { AS } from "@/storageControl";
|
import { AS } from "@/storageControl";
|
||||||
import React, { createContext, useContext, useEffect, useState } from "react";
|
import React, { createContext, useContext, useEffect, useState } from "react";
|
||||||
const initialState = {
|
const initialState = {
|
||||||
allTrainDiagram: undefined,
|
allTrainDiagram: {},
|
||||||
setAllTrainDiagram: () => {},
|
setAllTrainDiagram: (e) => {},
|
||||||
allCustomTrainData: [],
|
allCustomTrainData: [],
|
||||||
keyList: [],
|
keyList: [],
|
||||||
};
|
};
|
||||||
|
type initialStateType = {
|
||||||
|
allTrainDiagram: { [key: string]: string };
|
||||||
|
setAllTrainDiagram: (e) => void;
|
||||||
|
allCustomTrainData: any[];
|
||||||
|
keyList: string[];
|
||||||
|
};
|
||||||
|
|
||||||
const AllTrainDiagramContext = createContext(initialState);
|
const AllTrainDiagramContext = createContext<initialStateType>(initialState);
|
||||||
|
|
||||||
export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
|
export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
|
||||||
|
|
||||||
export const AllTrainDiagramProvider = ({ children }) => {
|
export const AllTrainDiagramProvider = ({ children }) => {
|
||||||
const [allTrainDiagram, setAllTrainDiagram] = useState(trainList);
|
const [allTrainDiagram, setAllTrainDiagram] = useState(trainList);
|
||||||
const [allCustomTrainData, setAllCustomTrainData] = useState([]); // カスタム列車データ
|
const [allCustomTrainData, setAllCustomTrainData] = useState([]); // カスタム列車データ
|
||||||
const [keyList, setKeyList] = useState(); // 第二要素
|
const [keyList, setKeyList] = useState<string[]>([]); // 第二要素
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (allTrainDiagram && Object.keys(allTrainDiagram).length > 0)
|
if (allTrainDiagram && Object.keys(allTrainDiagram).length > 0)
|
||||||
setKeyList(Object.keys(allTrainDiagram));
|
setKeyList(Object.keys(allTrainDiagram));
|
||||||
@@ -29,19 +35,19 @@ export const AllTrainDiagramProvider = ({ children }) => {
|
|||||||
.then((res) => {
|
.then((res) => {
|
||||||
const data = {};
|
const data = {};
|
||||||
res.forEach((d) => {
|
res.forEach((d) => {
|
||||||
const keys = Object.keys(d);
|
const keys = Object.keys(d)[0];
|
||||||
data[keys] = d[keys];
|
data[keys] = d[keys];
|
||||||
});
|
});
|
||||||
//dataのkeyで並び替え
|
//dataのkeyで並び替え
|
||||||
const sortedData = Object.keys(data)
|
const sortedData = Object.keys(data)
|
||||||
.sort((a, b) => a.replace(/[D,M]/, "") - b.replace(/[D,M]/, ""))
|
.sort((a, b) => parseInt(a.replace(/[D,M]/, "")) - parseInt(b.replace(/[D,M]/, "")))
|
||||||
.reduce((acc, key) => {
|
.reduce((acc, key) => {
|
||||||
acc[key] = data[key];
|
acc[key] = data[key];
|
||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, {});
|
||||||
return sortedData;
|
return sortedData;
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res:any) => {
|
||||||
setAllTrainDiagram(res);
|
setAllTrainDiagram(res);
|
||||||
AS.setItem("allTrainDiagram", JSON.stringify(res));
|
AS.setItem("allTrainDiagram", JSON.stringify(res));
|
||||||
})
|
})
|
@@ -1,19 +1,6 @@
|
|||||||
import React, { createContext, useContext, useState, useEffect } from "react";
|
import React, { createContext, useContext, useState, useEffect } from "react";
|
||||||
import useInterval from "../lib/useInterval";
|
import useInterval from "../lib/useInterval";
|
||||||
|
|
||||||
const initialState = {
|
|
||||||
areaInfo: "",
|
|
||||||
setAreainfo: () => {},
|
|
||||||
areaIconBadgeText: "",
|
|
||||||
areaStationID: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
const AreaInfoContext = createContext(initialState);
|
|
||||||
|
|
||||||
export const useAreaInfo = () => {
|
|
||||||
return useContext(AreaInfoContext);
|
|
||||||
};
|
|
||||||
|
|
||||||
const setoStationID = [
|
const setoStationID = [
|
||||||
"Y00",
|
"Y00",
|
||||||
"Y01",
|
"Y01",
|
||||||
@@ -340,6 +327,31 @@ const areaStationPair = {
|
|||||||
yodo: { id: "G", stationID: yodoStationID },
|
yodo: { id: "G", stationID: yodoStationID },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const initialState = {
|
||||||
|
areaInfo: "",
|
||||||
|
setAreaInfo: () => {},
|
||||||
|
areaIconBadgeText: "",
|
||||||
|
areaStationID: [],
|
||||||
|
isInfo: false,
|
||||||
|
setIsInfo: () => {},
|
||||||
|
};
|
||||||
|
type initialStateType = {
|
||||||
|
areaInfo: string;
|
||||||
|
setAreaInfo: (e: string) => void;
|
||||||
|
areaIconBadgeText: string;
|
||||||
|
areaStationID: string[];
|
||||||
|
isInfo: boolean;
|
||||||
|
setIsInfo: (e: boolean) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const AreaInfoContext = createContext<initialStateType>(initialState);
|
||||||
|
|
||||||
|
export const useAreaInfo = () => {
|
||||||
|
return useContext(AreaInfoContext);
|
||||||
|
};
|
||||||
|
|
||||||
export const AreaInfoProvider = ({ children }) => {
|
export const AreaInfoProvider = ({ children }) => {
|
||||||
const [areaInfo, setAreaInfo] = useState("");
|
const [areaInfo, setAreaInfo] = useState("");
|
||||||
const [areaIconBadgeText, setAreaIconBadgeText] = useState("");
|
const [areaIconBadgeText, setAreaIconBadgeText] = useState("");
|
@@ -3,11 +3,11 @@ import { AS } from "../storageControl";
|
|||||||
import { useAllTrainDiagram } from "./useAllTrainDiagram";
|
import { useAllTrainDiagram } from "./useAllTrainDiagram";
|
||||||
const initialState = {
|
const initialState = {
|
||||||
busAndTrainData: [],
|
busAndTrainData: [],
|
||||||
setBusAndTrainData: () => {},
|
setBusAndTrainData: (e) => {},
|
||||||
trainPairData: [],
|
trainPairData: [],
|
||||||
setTrainPairData: () => {},
|
setTrainPairData: (e) => {},
|
||||||
initializeTrainPairList: () => {},
|
initializeTrainPairList: (e) => {},
|
||||||
getInfluencedTrainData: () => {},
|
getInfluencedTrainData: (e) => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
const BusAndTrainDataContext = createContext(initialState);
|
const BusAndTrainDataContext = createContext(initialState);
|
||||||
@@ -18,8 +18,12 @@ export const useBusAndTrainData = () => {
|
|||||||
|
|
||||||
export const BusAndTrainDataProvider = ({ children }) => {
|
export const BusAndTrainDataProvider = ({ children }) => {
|
||||||
const { allTrainDiagram } = useAllTrainDiagram();
|
const { allTrainDiagram } = useAllTrainDiagram();
|
||||||
const [busAndTrainData, setBusAndTrainData] = useState([]);
|
const [busAndTrainData, setBusAndTrainData] = useState<{
|
||||||
const [trainPairData, setTrainPairData] = useState([]);
|
address: string;
|
||||||
|
name: string;
|
||||||
|
type: "station-data" | "bus-stop" | "train-info";
|
||||||
|
}[]>([]);
|
||||||
|
const [trainPairData, setTrainPairData] = useState<any[]>([]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
AS.getItem("busAndTrain202403")
|
AS.getItem("busAndTrain202403")
|
||||||
.then((d) => {
|
.then((d) => {
|
||||||
@@ -53,7 +57,7 @@ export const BusAndTrainDataProvider = ({ children }) => {
|
|||||||
});
|
});
|
||||||
return trainPairList;
|
return trainPairList;
|
||||||
};
|
};
|
||||||
const getInfluencedTrainData = (trainNum) => {
|
const getInfluencedTrainData = (trainNum:string) => {
|
||||||
const trainPairList = initializeTrainPairList();
|
const trainPairList = initializeTrainPairList();
|
||||||
|
|
||||||
// 9253M ラマル
|
// 9253M ラマル
|
@@ -11,35 +11,56 @@ import useInterval from "../lib/useInterval";
|
|||||||
import { useStationList } from "./useStationList";
|
import { useStationList } from "./useStationList";
|
||||||
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData";
|
||||||
import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData";
|
import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData";
|
||||||
|
import { trainDataType } from "@/lib/trainPositionTextArray";
|
||||||
|
type loading = "loading" | "success" | "error";
|
||||||
const initialState = {
|
const initialState = {
|
||||||
webview: {},
|
webview: undefined,
|
||||||
currentTrain: [],
|
currentTrain: [],
|
||||||
setCurrentTrain: () => {},
|
setCurrentTrain: (e) => {},
|
||||||
currentTrainLoading: "loading",
|
currentTrainLoading: "loading" as loading,
|
||||||
setCurrentTrainLoading: () => {},
|
setCurrentTrainLoading: (e) => {},
|
||||||
getCurrentTrain: () => {},
|
getCurrentTrain: () => {},
|
||||||
inject: (i) => {},
|
inject: (i) => {},
|
||||||
fixedPosition: null,
|
fixedPosition: null,
|
||||||
setFixedPosition: (e) => {},
|
setFixedPosition: (e) => {},
|
||||||
setInjectData: (e) => {},
|
setInjectData: (e) => {},
|
||||||
getCurrentStationData: (e) => {},
|
getCurrentStationData: ((e) => {}) as (e: string) => trainDataType | undefined,
|
||||||
getPosition: (e) => {},
|
getPosition: ((e) => {}) as (e: trainDataType) => string[] | undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
const CurrentTrainContext = createContext(initialState);
|
type initialStateType = {
|
||||||
|
webview: React.MutableRefObject<any>;
|
||||||
|
currentTrain: trainDataType[];
|
||||||
|
setCurrentTrain: (e: trainDataType[]) => void;
|
||||||
|
currentTrainLoading: loading;
|
||||||
|
setCurrentTrainLoading: (e: loading) => void;
|
||||||
|
getCurrentTrain: () => void;
|
||||||
|
inject: (i: string) => void;
|
||||||
|
fixedPosition: { type: "station" | "train"; value: string } | null;
|
||||||
|
setFixedPosition: (e: { type: "station" | "train"; value: string } | null) => void;
|
||||||
|
setInjectData: (e: { type: "station" | "train"; value: string; fixed: boolean }) => void;
|
||||||
|
getCurrentStationData: (e: string) => trainDataType | undefined;
|
||||||
|
getPosition: (e: trainDataType) => string[] | undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const CurrentTrainContext = createContext<initialStateType>(initialState);
|
||||||
|
|
||||||
export const useCurrentTrain = () => {
|
export const useCurrentTrain = () => {
|
||||||
return useContext(CurrentTrainContext);
|
return useContext(CurrentTrainContext);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const CurrentTrainProvider = ({ children }) => {
|
export const CurrentTrainProvider = ({ children }) => {
|
||||||
const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
|
const [currentTrain, setCurrentTrain] = useState<trainDataType[]>([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
|
||||||
const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading
|
const [currentTrainLoading, setCurrentTrainLoading] =
|
||||||
|
useState<loading>("loading");
|
||||||
|
|
||||||
const { getInjectJavascriptAddress, stationList, originalStationList } =
|
const { getInjectJavascriptAddress, stationList, originalStationList } =
|
||||||
useStationList();
|
useStationList();
|
||||||
|
|
||||||
const [fixedPosition, setFixedPosition] = useState({
|
const [fixedPosition, setFixedPosition] = useState<{
|
||||||
|
type: "station" | "train";
|
||||||
|
value: string;
|
||||||
|
}>({
|
||||||
type: null,
|
type: null,
|
||||||
value: null,
|
value: null,
|
||||||
});
|
});
|
||||||
@@ -75,7 +96,9 @@ export const CurrentTrainProvider = ({ children }) => {
|
|||||||
setIntervalState.stop();
|
setIntervalState.stop();
|
||||||
}
|
}
|
||||||
}, [fixedPosition]);
|
}, [fixedPosition]);
|
||||||
const getPosition = (currentTrainData) => {
|
|
||||||
|
type getPositionFuncType = (currentTrainData: trainDataType) => string[] | undefined;
|
||||||
|
const getPosition: getPositionFuncType = (currentTrainData) => {
|
||||||
//currentTrainData.Pos = "鴨川~端岡"; //test
|
//currentTrainData.Pos = "鴨川~端岡"; //test
|
||||||
if (!currentTrainData) return;
|
if (!currentTrainData) return;
|
||||||
if (!currentTrainData?.Pos) return;
|
if (!currentTrainData?.Pos) return;
|
||||||
@@ -85,7 +108,7 @@ export const CurrentTrainProvider = ({ children }) => {
|
|||||||
.replace("(徳島線)", "")
|
.replace("(徳島線)", "")
|
||||||
.replace("(高徳線)", "")
|
.replace("(高徳線)", "")
|
||||||
.split("~");
|
.split("~");
|
||||||
const direction = parseInt(currentTrainData?.Direction) || 0;
|
const direction = currentTrainData?.Direction || 0;
|
||||||
if (pos[0] == "児島" && pos[1] == "宇多津") {
|
if (pos[0] == "児島" && pos[1] == "宇多津") {
|
||||||
return ["M12", "Y09"];
|
return ["M12", "Y09"];
|
||||||
} else if (pos[1] == "児島" && pos[0] == "宇多津") {
|
} else if (pos[1] == "児島" && pos[0] == "宇多津") {
|
||||||
@@ -136,15 +159,25 @@ export const CurrentTrainProvider = ({ children }) => {
|
|||||||
return [getStationID(currentTrainData?.Pos, stationList)];
|
return [getStationID(currentTrainData?.Pos, stationList)];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const getCurrentStationData = (e) => {
|
const getCurrentStationData: (e: string) => trainDataType | undefined = (
|
||||||
|
e
|
||||||
|
) => {
|
||||||
//e:trainNumber
|
//e:trainNumber
|
||||||
if (!currentTrain.length) return;
|
if (!currentTrain.length) return;
|
||||||
|
console.log(currentTrain);
|
||||||
return checkDuplicateTrainData(
|
return checkDuplicateTrainData(
|
||||||
currentTrain.filter((d) => d.num == e),
|
currentTrain.filter((d) => d.num == e),
|
||||||
stationList
|
stationList
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
const setInjectData = ({ type, value, fixed }) => {
|
|
||||||
|
type injectDataType = {
|
||||||
|
type: "station" | "train";
|
||||||
|
value: string;
|
||||||
|
fixed: boolean;
|
||||||
|
};
|
||||||
|
type injectDataFuncType = (data: injectDataType) => void;
|
||||||
|
const setInjectData: injectDataFuncType = ({ type, value, fixed }) => {
|
||||||
if (type === "station") {
|
if (type === "station") {
|
||||||
const script = getInjectJavascriptAddress(value);
|
const script = getInjectJavascriptAddress(value);
|
||||||
inject(script);
|
inject(script);
|
@@ -1,7 +1,7 @@
|
|||||||
import React, { createContext, useContext, useState, useEffect } from "react";
|
import React, { createContext, useContext, useState, useEffect } from "react";
|
||||||
import { useWindowDimensions } from "react-native";
|
import { useWindowDimensions } from "react-native";
|
||||||
import * as ScreenOrientation from "expo-screen-orientation";
|
import * as ScreenOrientation from "expo-screen-orientation";
|
||||||
const initialState = { isLandscape: false, setIsLandscape: () => {} };
|
const initialState = { isLandscape: false, setIsLandscape: (e) => {} };
|
||||||
|
|
||||||
const DeviceOrientationChange = createContext(initialState);
|
const DeviceOrientationChange = createContext(initialState);
|
||||||
|
|
@@ -7,7 +7,7 @@ import React, {
|
|||||||
FC,
|
FC,
|
||||||
} from "react";
|
} from "react";
|
||||||
import { AS } from "../storageControl";
|
import { AS } from "../storageControl";
|
||||||
import { useStationList } from "./useStationList";
|
import { StationProps, useStationList } from "./useStationList";
|
||||||
const initialState = {
|
const initialState = {
|
||||||
favoriteStation: [],
|
favoriteStation: [],
|
||||||
setFavoriteStation: () => {},
|
setFavoriteStation: () => {},
|
||||||
@@ -28,7 +28,7 @@ type Props = {
|
|||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
};
|
};
|
||||||
export const FavoriteStationProvider: FC<Props> = ({ children }) => {
|
export const FavoriteStationProvider: FC<Props> = ({ children }) => {
|
||||||
const [favoriteStation, setFavoriteStation] = useState([]);
|
const [favoriteStation, setFavoriteStation] = useState<StationProps[][]>([]);
|
||||||
const { getStationDataFromName } = useStationList();
|
const { getStationDataFromName } = useStationList();
|
||||||
const lodAddMigration = () => {
|
const lodAddMigration = () => {
|
||||||
const migration = favoriteStation.map((d) => {
|
const migration = favoriteStation.map((d) => {
|
||||||
@@ -39,13 +39,13 @@ export const FavoriteStationProvider:FC<Props> = ({ children }) => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
AS.getItem("favoriteStation")
|
AS.getItem("favoriteStation")
|
||||||
.then((d) => {
|
.then((d) => {
|
||||||
const returnData = JSON.parse(d);
|
const returnData: StationProps[][] = JSON.parse(d);
|
||||||
setFavoriteStation(returnData);
|
setFavoriteStation(returnData);
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
// エラーログを記録(開発時のみ)
|
// エラーログを記録(開発時のみ)
|
||||||
if (__DEV__) {
|
if (__DEV__) {
|
||||||
console.warn('お気に入り駅の読み込みに失敗しました:', error);
|
console.warn("お気に入り駅の読み込みに失敗しました:", error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
@@ -9,29 +9,29 @@ import { useNotification } from "../stateBox/useNotifications";
|
|||||||
|
|
||||||
const initialState = {
|
const initialState = {
|
||||||
selectedLine: undefined,
|
selectedLine: undefined,
|
||||||
setSelectedLine: () => {},
|
setSelectedLine: (e) => {},
|
||||||
mapsStationData: undefined,
|
mapsStationData: undefined,
|
||||||
setMapsStationData: () => {},
|
setMapsStationData: (e) => {},
|
||||||
iconSetting: undefined,
|
iconSetting: undefined,
|
||||||
setIconSetting: () => {},
|
setIconSetting: (e) => {},
|
||||||
mapSwitch: undefined,
|
mapSwitch: undefined,
|
||||||
setMapSwitch: () => {},
|
setMapSwitch: (e) => {},
|
||||||
stationMenu: undefined,
|
stationMenu: undefined,
|
||||||
setStationMenu: () => {},
|
setStationMenu: (e) => {},
|
||||||
uiSetting: undefined,
|
uiSetting: undefined,
|
||||||
setUiSetting: () => {},
|
setUiSetting: (e) => {},
|
||||||
LoadError: false,
|
LoadError: false,
|
||||||
setLoadError: () => {},
|
setLoadError: (e) => {},
|
||||||
trainInfo: {
|
trainInfo: {
|
||||||
trainNum: undefined,
|
trainNum: undefined,
|
||||||
limited: undefined,
|
limited: undefined,
|
||||||
trainData: undefined,
|
trainData: undefined,
|
||||||
},
|
},
|
||||||
setTrainInfo: () => {},
|
setTrainInfo: (e) => {},
|
||||||
trainMenu: "true",
|
trainMenu: "true",
|
||||||
setTrainMenu: () => {},
|
setTrainMenu: (e) => {},
|
||||||
updatePermission : false,
|
updatePermission : false,
|
||||||
setUpdatePermission : () => {},
|
setUpdatePermission : (e) => {},
|
||||||
injectJavascript: "",
|
injectJavascript: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -50,9 +50,9 @@ export const TrainMenuProvider = ({ children }) => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
//画面表示関連
|
//画面表示関連
|
||||||
const [iconSetting, setIconSetting] = useState(undefined);
|
const [iconSetting, setIconSetting] = useState<"true" | "false" | undefined>(undefined);
|
||||||
const [mapSwitch, setMapSwitch] = useState(undefined);
|
const [mapSwitch, setMapSwitch] = useState<"true" | "false" | undefined>(undefined);
|
||||||
const [stationMenu, setStationMenu] = useState(undefined);
|
const [stationMenu, setStationMenu] = useState<"true" | "false" | undefined>(undefined);
|
||||||
const [LoadError, setLoadError] = useState(false);
|
const [LoadError, setLoadError] = useState(false);
|
||||||
|
|
||||||
//更新権限所有確認
|
//更新権限所有確認
|
Reference in New Issue
Block a user