運行情報バッジに対象路線記号を追加

This commit is contained in:
harukin-expo-dev-env 2024-08-08 13:18:52 +00:00
parent 4815b641eb
commit 019486f665
2 changed files with 30 additions and 4 deletions

4
App.js
View File

@ -60,7 +60,7 @@ export default function App() {
); );
} }
export function AppContainer() { export function AppContainer() {
const { areaInfo } = useAreaInfo(); const { areaInfo, areaIconBadgeText } = useAreaInfo();
const navigationRef = React.useRef(); const navigationRef = React.useRef();
return ( return (
<NavigationContainer name="Root" style={{ flex: 1 }} ref={navigationRef}> <NavigationContainer name="Root" style={{ flex: 1 }} ref={navigationRef}>
@ -98,7 +98,7 @@ export function AppContainer() {
headerTransparent: true, headerTransparent: true,
gestureEnabled: true, gestureEnabled: true,
tabBarIcon: initIcon("train", "Ionicons"), tabBarIcon: initIcon("train", "Ionicons"),
tabBarBadge: areaInfo ? "!" : undefined, tabBarBadge: areaInfo ? areaIconBadgeText : undefined,
}} }}
> >
{(props) => <TNDView {...props} />} {(props) => <TNDView {...props} />}

View File

@ -3,6 +3,7 @@ import useInterval from "../lib/useInterval";
const initialState = { const initialState = {
areaInfo: "", areaInfo: "",
setAreainfo: () => {}, setAreainfo: () => {},
areaIconBadgeText: "",
}; };
const AreaInfoContext = createContext(initialState); const AreaInfoContext = createContext(initialState);
@ -11,18 +12,43 @@ export const useAreaInfo = () => {
return useContext(AreaInfoContext); return useContext(AreaInfoContext);
}; };
const areaStationPair = {
seto: ["Y"],
yosan1: ["Y"],
yosan2: ["U"],
dosan1: ["D"],
dosan2: ["K"],
kotoku: ["T"],
mugi: ["M"],
tokushima: ["B"],
naruto: ["N"],
yodo: ["G"],
};
export const AreaInfoProvider = ({ children }) => { export const AreaInfoProvider = ({ children }) => {
const [areaInfo, setAreaInfo] = useState(""); const [areaInfo, setAreaInfo] = useState("");
const getAreaData = () => const [areaIconBadgeText, setAreaIconBadgeText] = useState("");
const getAreaData = () => {
fetch( fetch(
"https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec" "https://script.google.com/macros/s/AKfycbz80LcaEUrhnlEsLkJy0LG2IRO3DBVQhfNmN1d_0f_HvtsujNQpxM90SrV9yKWH_JG1Ww/exec"
) )
.then((d) => d.text()) .then((d) => d.text())
.then((d) => setAreaInfo(d)); .then((d) => setAreaInfo(d));
fetch("https://n8n.haruk.in/webhook/jr-shikoku-trainfo-flag")
.then((d) => d.json())
.then((d) => {
if (!d.data) return;
const text = d.data
.filter((e) => e.status)
.map((e) => `${areaStationPair[e.area].join("")}`);
setAreaIconBadgeText(text.length == 0 ? "!" : text.join(","));
});
};
useEffect(getAreaData, []); useEffect(getAreaData, []);
useInterval(getAreaData, 60000); //60秒毎に全在線列車取得 useInterval(getAreaData, 60000); //60秒毎に全在線列車取得
return ( return (
<AreaInfoContext.Provider value={{ areaInfo, setAreaInfo }}> <AreaInfoContext.Provider
value={{ areaInfo, setAreaInfo, areaIconBadgeText }}
>
{children} {children}
</AreaInfoContext.Provider> </AreaInfoContext.Provider>
); );