Files
jrshikoku/stateBox/useFavoriteStation.tsx
2025-07-15 04:23:14 +00:00

60 lines
1.6 KiB
TypeScript

import React, {
createContext,
useContext,
useState,
useEffect,
useLayoutEffect,
FC,
} from "react";
import { AS } from "../storageControl";
import { useStationList } from "./useStationList";
const initialState = {
favoriteStation: [],
setFavoriteStation: () => {},
lodAddMigration: () => {},
};
type initialStateType = {
favoriteStation: any[];
setFavoriteStation: (d:any)=>void;
lodAddMigration: ()=>void;
};
const FavoriteStationContext = createContext<initialStateType>(initialState);
export const useFavoriteStation = () => {
return useContext(FavoriteStationContext);
};
type Props = {
children: React.ReactNode;
};
export const FavoriteStationProvider:FC<Props> = ({ children }) => {
const [favoriteStation, setFavoriteStation] = useState([]);
const { getStationDataFromName } = useStationList();
const lodAddMigration = () => {
const migration = favoriteStation.map((d) => {
return getStationDataFromName(d[0].Station_JP);
});
setFavoriteStation(migration);
};
useEffect(() => {
AS.getItem("favoriteStation")
.then((d) => {
const returnData = JSON.parse(d);
setFavoriteStation(returnData);
})
.catch((error) => {
// エラーログを記録(開発時のみ)
if (__DEV__) {
console.warn('お気に入り駅の読み込みに失敗しました:', error);
}
});
}, []);
return (
<FavoriteStationContext.Provider
value={{ favoriteStation, setFavoriteStation, lodAddMigration }}
>
{children}
</FavoriteStationContext.Provider>
);
};