tsxのFC宣言をProviderに追加

This commit is contained in:
harukin-expo-dev-env
2025-09-11 16:55:05 +00:00
parent 9ac36216b9
commit 58df77ae49
8 changed files with 107 additions and 89 deletions

View File

@@ -9,30 +9,13 @@ export const initIcon = (
tabBarBadge: string,
isInfo: boolean
) => {
switch (type) {
case "Ionicons":
const IconComponent = type == "Ionicons" ? Ionicons : AntDesign;
return ({ focused, color, size }) => (
<>
{!!tabBarBadge && <Badge tabBarBadge={tabBarBadge} isInfo={isInfo} />}
<Ionicons
name={name}
size={30}
color={focused ? "#0099CC" : "black"}
/>
<IconComponent name={name} size={30} color={focused ? "#0099CC" : "black"} />
</>
);
case "AntDesign":
return ({ focused, color, size }) => (
<>
{!!tabBarBadge && <Badge tabBarBadge={tabBarBadge} isInfo={isInfo} />}
<AntDesign
name={name}
size={30}
color={focused ? "#0099CC" : "black"}
/>
</>
);
}
};
type BadgeProps = { tabBarBadge: string; isInfo: boolean };
@@ -60,7 +43,7 @@ export const Badge: FC<BadgeProps> = ({ tabBarBadge, isInfo }) => {
shadowOffset: { width: 0, height: 0 },
shadowOpacity: 0.5,
shadowRadius: 4,
elevation: 2
elevation: 2,
}}
>
<Text style={{ color: "white", paddingHorizontal: 4 }}>

View File

@@ -1,5 +1,12 @@
import React, { Ref, useRef, useState,useEffect } from "react";
import { View, Platform, TouchableOpacity, StyleProp, ViewStyle,Linking } from "react-native";
import React, { Ref, useRef, useState, useEffect } from "react";
import {
View,
Platform,
TouchableOpacity,
StyleProp,
ViewStyle,
Linking,
} from "react-native";
import { WebView } from "react-native-webview";
import Constants from "expo-constants";
import { Ionicons } from "@expo/vector-icons";
@@ -100,7 +107,7 @@ setInterval(() => {
});
}, 1000);
`;
const goToTrainMenu = () =>{
const goToTrainMenu = () => {
if (Platform.OS === "web") {
Linking.openURL("https://www.jr-shikoku.co.jp/info/");
setTimeout(() => {
@@ -110,7 +117,7 @@ setInterval(() => {
return;
}
}
};
useEffect(() => {
// @ts-ignore
const unsubscribe = addListener("tabPress", goToTrainMenu);
@@ -147,7 +154,7 @@ setInterval(() => {
}
const ReloadButton = ({ onPress, top, LoadError = false }) => {
const styles:StyleProp<ViewStyle> = {
const styles: StyleProp<ViewStyle> = {
position: "absolute",
top,
right: 10,

View File

@@ -1,7 +1,7 @@
import trainList from "@/assets/originData/trainList";
import useInterval from "@/lib/useInterval";
import { AS } from "@/storageControl";
import React, { createContext, useContext, useEffect, useState } from "react";
import React, { createContext, FC, useContext, useEffect, useState } from "react";
const initialState = {
allTrainDiagram: {},
setAllTrainDiagram: (e) => {},
@@ -18,8 +18,10 @@ type initialStateType = {
const AllTrainDiagramContext = createContext<initialStateType>(initialState);
export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
export const AllTrainDiagramProvider = ({ children }) => {
type Props = {
children: React.ReactNode;
};
export const AllTrainDiagramProvider:FC<Props> = ({ children }) => {
const [allTrainDiagram, setAllTrainDiagram] = useState(trainList);
const [allCustomTrainData, setAllCustomTrainData] = useState([]); // カスタム列車データ
const [keyList, setKeyList] = useState<string[]>([]); // 第二要素

View File

@@ -1,4 +1,10 @@
import React, { createContext, useContext, useState, useEffect } from "react";
import React, {
createContext,
useContext,
useState,
useEffect,
FC,
} from "react";
import useInterval from "../lib/useInterval";
const setoStationID = [
@@ -327,8 +333,6 @@ const areaStationPair = {
yodo: { id: "G", stationID: yodoStationID },
};
const initialState = {
areaInfo: "",
setAreaInfo: () => {},
@@ -351,8 +355,8 @@ const AreaInfoContext = createContext<initialStateType>(initialState);
export const useAreaInfo = () => {
return useContext(AreaInfoContext);
};
export const AreaInfoProvider = ({ children }) => {
type props = { children: React.ReactNode };
export const AreaInfoProvider: FC<props> = ({ children }) => {
const [areaInfo, setAreaInfo] = useState("");
const [areaIconBadgeText, setAreaIconBadgeText] = useState("");
const [areaStationID, setAreaStationID] = useState([]);

View File

@@ -1,4 +1,10 @@
import React, { createContext, useContext, useState, useEffect } from "react";
import React, {
createContext,
useContext,
useState,
useEffect,
FC,
} from "react";
import { AS } from "../storageControl";
import { useAllTrainDiagram } from "./useAllTrainDiagram";
const initialState = {
@@ -15,14 +21,16 @@ const BusAndTrainDataContext = createContext(initialState);
export const useBusAndTrainData = () => {
return useContext(BusAndTrainDataContext);
};
export const BusAndTrainDataProvider = ({ children }) => {
type props = { children: React.ReactNode };
export const BusAndTrainDataProvider: FC<props> = ({ children }) => {
const { allTrainDiagram } = useAllTrainDiagram();
const [busAndTrainData, setBusAndTrainData] = useState<{
const [busAndTrainData, setBusAndTrainData] = useState<
{
address: string;
name: string;
type: "station-data" | "bus-stop" | "train-info";
}[]>([]);
}[]
>([]);
const [trainPairData, setTrainPairData] = useState<any[]>([]);
useEffect(() => {
AS.getItem("busAndTrain202403")
@@ -57,7 +65,7 @@ export const BusAndTrainDataProvider = ({ children }) => {
});
return trainPairList;
};
const getInfluencedTrainData = (trainNum:string) => {
const getInfluencedTrainData = (trainNum: string) => {
const trainPairList = initializeTrainPairList();
// 9253M ラマル

View File

@@ -4,6 +4,7 @@ import React, {
useState,
useEffect,
useRef,
FC,
} from "react";
import { HeaderConfig } from "../lib/HeaderConfig";
@@ -48,8 +49,10 @@ const CurrentTrainContext = createContext<initialStateType>(initialState);
export const useCurrentTrain = () => {
return useContext(CurrentTrainContext);
};
export const CurrentTrainProvider = ({ children }) => {
type props = {
children: React.ReactNode;
}
export const CurrentTrainProvider:FC<props> = ({ children }) => {
const [currentTrain, setCurrentTrain] = useState<trainDataType[]>([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 }
const [currentTrainLoading, setCurrentTrainLoading] =
useState<loading>("loading");

View File

@@ -1,11 +1,11 @@
import React, { createContext, useContext, useEffect, useState } from "react";
import React, { createContext, FC, useContext, useEffect, useState } from "react";
const initialState = {
getTime: new Date(),
setGetTime: () => {},
setGetTime: (e) => {},
loadingDelayData: true,
setLoadingDelayData: (loading) => {},
delayData: undefined,
setDelayData: () => {},
setDelayData: (e) => {},
};
const TrainDelayDataContext = createContext(initialState);
@@ -13,8 +13,10 @@ const TrainDelayDataContext = createContext(initialState);
export const useTrainDelayData = () => {
return useContext(TrainDelayDataContext);
};
export const TrainDelayDataProvider = ({ children }) => {
type props = {
children: React.ReactNode;
};
export const TrainDelayDataProvider:FC<props> = ({ children }) => {
const [delayData, setDelayData] = useState(undefined);
const [getTime, setGetTime] = useState(new Date());
const [loadingDelayData, setLoadingDelayData] = useState(true);

View File

@@ -1,4 +1,10 @@
import React, { createContext, useContext, useState, useEffect } from "react";
import React, {
createContext,
useContext,
useState,
useEffect,
FC,
} from "react";
import { ASCore } from "../storageControl";
@@ -30,8 +36,8 @@ const initialState = {
setTrainInfo: (e) => {},
trainMenu: "true",
setTrainMenu: (e) => {},
updatePermission : false,
setUpdatePermission : (e) => {},
updatePermission: false,
setUpdatePermission: (e) => {},
injectJavascript: "",
};
@@ -40,33 +46,36 @@ const TrainMenuContext = createContext(initialState);
export const useTrainMenu = () => {
return useContext(TrainMenuContext);
};
export const TrainMenuProvider = ({ children }) => {
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<"true" | "false" | undefined>(undefined);
const [mapSwitch, setMapSwitch] = useState<"true" | "false" | undefined>(undefined);
const [stationMenu, setStationMenu] = useState<"true" | "false" | undefined>(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){
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{
} else {
setUpdatePermission(false);
}
})
}, [expoPushToken])
});
}, [expoPushToken]);
//列車情報表示関連
const [trainInfo, setTrainInfo] = useState({