From 9ab4c0a205d55844dfd923ee96b38840973c5762 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Thu, 11 Sep 2025 15:05:32 +0000 Subject: [PATCH] =?UTF-8?q?ts=E3=81=B8=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.js => App.tsx | 0 MenuPage.js => MenuPage.tsx | 2 +- Top.js => Top.tsx | 4 +- .../Apps/FixedPositionBox/FixedTrainBox.tsx | 1 - .../LED_Vision_Component/{Header.js => Header.tsx} | 0 .../{LED_vidion.js => LED_vidion.tsx} | 0 ...TrainDiagram.js => useAllTrainDiagram.tsx} | 20 +++--- stateBox/{useAreaInfo.js => useAreaInfo.tsx} | 38 ++++++++---- ...AndTrainData.js => useBusAndTrainData.tsx} | 18 +++--- ...useCurrentTrain.js => useCurrentTrain.tsx} | 61 ++++++++++++++----- ...ange.js => useDeviceOrientationChange.tsx} | 2 +- stateBox/useFavoriteStation.tsx | 14 ++--- ...rainDelayData.js => useTrainDelayData.tsx} | 0 .../{useTrainMenu.js => useTrainMenu.tsx} | 26 ++++---- 14 files changed, 120 insertions(+), 66 deletions(-) rename App.js => App.tsx (100%) rename MenuPage.js => MenuPage.tsx (99%) rename Top.js => Top.tsx (96%) rename components/発車時刻表/LED_Vision_Component/{Header.js => Header.tsx} (100%) rename components/発車時刻表/{LED_vidion.js => LED_vidion.tsx} (100%) rename stateBox/{useAllTrainDiagram.js => useAllTrainDiagram.tsx} (82%) rename stateBox/{useAreaInfo.js => useAreaInfo.tsx} (94%) rename stateBox/{useBusAndTrainData.js => useBusAndTrainData.tsx} (95%) rename stateBox/{useCurrentTrain.js => useCurrentTrain.tsx} (76%) rename stateBox/{useDeviceOrientationChange.js => useDeviceOrientationChange.tsx} (93%) rename stateBox/{useTrainDelayData.js => useTrainDelayData.tsx} (100%) rename stateBox/{useTrainMenu.js => useTrainMenu.tsx} (85%) diff --git a/App.js b/App.tsx similarity index 100% rename from App.js rename to App.tsx diff --git a/MenuPage.js b/MenuPage.tsx similarity index 99% rename from MenuPage.js rename to MenuPage.tsx index 4e7647e..4a3bcb9 100644 --- a/MenuPage.js +++ b/MenuPage.tsx @@ -95,7 +95,7 @@ export function MenuPage() { return unsubscribe; }, [navigation, mapHeight, favoriteStation, setFavoriteStation]); return ( - + { }, [addListener, mapSwitch]); return ( - + { /> diff --git a/components/Apps/FixedPositionBox/FixedTrainBox.tsx b/components/Apps/FixedPositionBox/FixedTrainBox.tsx index fcaa66b..d66c650 100644 --- a/components/Apps/FixedPositionBox/FixedTrainBox.tsx +++ b/components/Apps/FixedPositionBox/FixedTrainBox.tsx @@ -189,7 +189,6 @@ export const FixedTrain: FC = ({ trainID }) => { searchCount < points.length; searchCount++ ) { - console.log(trainDataWidhThrough[searchCount]); const nextPos = trainDataWidhThrough[searchCount]; if (nextPos) { const [station, se, time] = nextPos.split(","); diff --git a/components/発車時刻表/LED_Vision_Component/Header.js b/components/発車時刻表/LED_Vision_Component/Header.tsx similarity index 100% rename from components/発車時刻表/LED_Vision_Component/Header.js rename to components/発車時刻表/LED_Vision_Component/Header.tsx diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.tsx similarity index 100% rename from components/発車時刻表/LED_vidion.js rename to components/発車時刻表/LED_vidion.tsx diff --git a/stateBox/useAllTrainDiagram.js b/stateBox/useAllTrainDiagram.tsx similarity index 82% rename from stateBox/useAllTrainDiagram.js rename to stateBox/useAllTrainDiagram.tsx index a1f80de..dcd6626 100644 --- a/stateBox/useAllTrainDiagram.js +++ b/stateBox/useAllTrainDiagram.tsx @@ -3,20 +3,26 @@ import useInterval from "@/lib/useInterval"; import { AS } from "@/storageControl"; import React, { createContext, useContext, useEffect, useState } from "react"; const initialState = { - allTrainDiagram: undefined, - setAllTrainDiagram: () => {}, + allTrainDiagram: {}, + setAllTrainDiagram: (e) => {}, allCustomTrainData: [], keyList: [], }; +type initialStateType = { + allTrainDiagram: { [key: string]: string }; + setAllTrainDiagram: (e) => void; + allCustomTrainData: any[]; + keyList: string[]; +}; -const AllTrainDiagramContext = createContext(initialState); +const AllTrainDiagramContext = createContext(initialState); export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext); export const AllTrainDiagramProvider = ({ children }) => { const [allTrainDiagram, setAllTrainDiagram] = useState(trainList); const [allCustomTrainData, setAllCustomTrainData] = useState([]); // カスタム列車データ - const [keyList, setKeyList] = useState(); // 第二要素 + const [keyList, setKeyList] = useState([]); // 第二要素 useEffect(() => { if (allTrainDiagram && Object.keys(allTrainDiagram).length > 0) setKeyList(Object.keys(allTrainDiagram)); @@ -29,19 +35,19 @@ export const AllTrainDiagramProvider = ({ children }) => { .then((res) => { const data = {}; res.forEach((d) => { - const keys = Object.keys(d); + const keys = Object.keys(d)[0]; data[keys] = d[keys]; }); //dataのkeyで並び替え 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) => { acc[key] = data[key]; return acc; }, {}); return sortedData; }) - .then((res) => { + .then((res:any) => { setAllTrainDiagram(res); AS.setItem("allTrainDiagram", JSON.stringify(res)); }) diff --git a/stateBox/useAreaInfo.js b/stateBox/useAreaInfo.tsx similarity index 94% rename from stateBox/useAreaInfo.js rename to stateBox/useAreaInfo.tsx index cc9df4d..9521b65 100644 --- a/stateBox/useAreaInfo.js +++ b/stateBox/useAreaInfo.tsx @@ -1,19 +1,6 @@ import React, { createContext, useContext, useState, useEffect } from "react"; import useInterval from "../lib/useInterval"; -const initialState = { - areaInfo: "", - setAreainfo: () => {}, - areaIconBadgeText: "", - areaStationID: [], -}; - -const AreaInfoContext = createContext(initialState); - -export const useAreaInfo = () => { - return useContext(AreaInfoContext); -}; - const setoStationID = [ "Y00", "Y01", @@ -340,6 +327,31 @@ const areaStationPair = { 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(initialState); + +export const useAreaInfo = () => { + return useContext(AreaInfoContext); +}; + export const AreaInfoProvider = ({ children }) => { const [areaInfo, setAreaInfo] = useState(""); const [areaIconBadgeText, setAreaIconBadgeText] = useState(""); diff --git a/stateBox/useBusAndTrainData.js b/stateBox/useBusAndTrainData.tsx similarity index 95% rename from stateBox/useBusAndTrainData.js rename to stateBox/useBusAndTrainData.tsx index de6880c..df6939b 100644 --- a/stateBox/useBusAndTrainData.js +++ b/stateBox/useBusAndTrainData.tsx @@ -3,11 +3,11 @@ import { AS } from "../storageControl"; import { useAllTrainDiagram } from "./useAllTrainDiagram"; const initialState = { busAndTrainData: [], - setBusAndTrainData: () => {}, + setBusAndTrainData: (e) => {}, trainPairData: [], - setTrainPairData: () => {}, - initializeTrainPairList: () => {}, - getInfluencedTrainData: () => {}, + setTrainPairData: (e) => {}, + initializeTrainPairList: (e) => {}, + getInfluencedTrainData: (e) => {}, }; const BusAndTrainDataContext = createContext(initialState); @@ -18,8 +18,12 @@ export const useBusAndTrainData = () => { export const BusAndTrainDataProvider = ({ children }) => { const { allTrainDiagram } = useAllTrainDiagram(); - const [busAndTrainData, setBusAndTrainData] = useState([]); - const [trainPairData, setTrainPairData] = useState([]); + const [busAndTrainData, setBusAndTrainData] = useState<{ + address: string; + name: string; + type: "station-data" | "bus-stop" | "train-info"; + }[]>([]); + const [trainPairData, setTrainPairData] = useState([]); useEffect(() => { AS.getItem("busAndTrain202403") .then((d) => { @@ -53,7 +57,7 @@ export const BusAndTrainDataProvider = ({ children }) => { }); return trainPairList; }; - const getInfluencedTrainData = (trainNum) => { + const getInfluencedTrainData = (trainNum:string) => { const trainPairList = initializeTrainPairList(); // 9253M ラマル diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.tsx similarity index 76% rename from stateBox/useCurrentTrain.js rename to stateBox/useCurrentTrain.tsx index 316b75f..cd290e5 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.tsx @@ -11,35 +11,56 @@ import useInterval from "../lib/useInterval"; import { useStationList } from "./useStationList"; import { checkDuplicateTrainData } from "@/lib/checkDuplicateTrainData"; import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData"; +import { trainDataType } from "@/lib/trainPositionTextArray"; + type loading = "loading" | "success" | "error"; const initialState = { - webview: {}, + webview: undefined, currentTrain: [], - setCurrentTrain: () => {}, - currentTrainLoading: "loading", - setCurrentTrainLoading: () => {}, + setCurrentTrain: (e) => {}, + currentTrainLoading: "loading" as loading, + setCurrentTrainLoading: (e) => {}, getCurrentTrain: () => {}, inject: (i) => {}, fixedPosition: null, setFixedPosition: (e) => {}, setInjectData: (e) => {}, - getCurrentStationData: (e) => {}, - getPosition: (e) => {}, + getCurrentStationData: ((e) => {}) as (e: string) => trainDataType | undefined, + getPosition: ((e) => {}) as (e: trainDataType) => string[] | undefined, }; -const CurrentTrainContext = createContext(initialState); +type initialStateType = { + webview: React.MutableRefObject; + 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(initialState); export const useCurrentTrain = () => { return useContext(CurrentTrainContext); }; export const CurrentTrainProvider = ({ children }) => { - const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 } - const [currentTrainLoading, setCurrentTrainLoading] = useState("loading"); // success, error, loading + const [currentTrain, setCurrentTrain] = useState([]); //現在在線中の全列車 { num: 列車番号, delay: 遅延時分(状態), Pos: 位置情報 } + const [currentTrainLoading, setCurrentTrainLoading] = + useState("loading"); const { getInjectJavascriptAddress, stationList, originalStationList } = useStationList(); - const [fixedPosition, setFixedPosition] = useState({ + const [fixedPosition, setFixedPosition] = useState<{ + type: "station" | "train"; + value: string; + }>({ type: null, value: null, }); @@ -75,7 +96,9 @@ export const CurrentTrainProvider = ({ children }) => { setIntervalState.stop(); } }, [fixedPosition]); - const getPosition = (currentTrainData) => { + + type getPositionFuncType = (currentTrainData: trainDataType) => string[] | undefined; + const getPosition: getPositionFuncType = (currentTrainData) => { //currentTrainData.Pos = "鴨川~端岡"; //test if (!currentTrainData) return; if (!currentTrainData?.Pos) return; @@ -85,7 +108,7 @@ export const CurrentTrainProvider = ({ children }) => { .replace("(徳島線)", "") .replace("(高徳線)", "") .split("~"); - const direction = parseInt(currentTrainData?.Direction) || 0; + const direction = currentTrainData?.Direction || 0; if (pos[0] == "児島" && pos[1] == "宇多津") { return ["M12", "Y09"]; } else if (pos[1] == "児島" && pos[0] == "宇多津") { @@ -136,15 +159,25 @@ export const CurrentTrainProvider = ({ children }) => { return [getStationID(currentTrainData?.Pos, stationList)]; } }; - const getCurrentStationData = (e) => { + const getCurrentStationData: (e: string) => trainDataType | undefined = ( + e + ) => { //e:trainNumber if (!currentTrain.length) return; + console.log(currentTrain); return checkDuplicateTrainData( currentTrain.filter((d) => d.num == e), 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") { const script = getInjectJavascriptAddress(value); inject(script); diff --git a/stateBox/useDeviceOrientationChange.js b/stateBox/useDeviceOrientationChange.tsx similarity index 93% rename from stateBox/useDeviceOrientationChange.js rename to stateBox/useDeviceOrientationChange.tsx index 130062d..b5751d5 100644 --- a/stateBox/useDeviceOrientationChange.js +++ b/stateBox/useDeviceOrientationChange.tsx @@ -1,7 +1,7 @@ import React, { createContext, useContext, useState, useEffect } from "react"; import { useWindowDimensions } from "react-native"; import * as ScreenOrientation from "expo-screen-orientation"; -const initialState = { isLandscape: false, setIsLandscape: () => {} }; +const initialState = { isLandscape: false, setIsLandscape: (e) => {} }; const DeviceOrientationChange = createContext(initialState); diff --git a/stateBox/useFavoriteStation.tsx b/stateBox/useFavoriteStation.tsx index 9ec7668..f5b702e 100644 --- a/stateBox/useFavoriteStation.tsx +++ b/stateBox/useFavoriteStation.tsx @@ -7,7 +7,7 @@ import React, { FC, } from "react"; import { AS } from "../storageControl"; -import { useStationList } from "./useStationList"; +import { StationProps, useStationList } from "./useStationList"; const initialState = { favoriteStation: [], setFavoriteStation: () => {}, @@ -16,8 +16,8 @@ const initialState = { type initialStateType = { favoriteStation: any[]; - setFavoriteStation: (d:any)=>void; - lodAddMigration: ()=>void; + setFavoriteStation: (d: any) => void; + lodAddMigration: () => void; }; const FavoriteStationContext = createContext(initialState); @@ -27,8 +27,8 @@ export const useFavoriteStation = () => { type Props = { children: React.ReactNode; }; -export const FavoriteStationProvider:FC = ({ children }) => { - const [favoriteStation, setFavoriteStation] = useState([]); +export const FavoriteStationProvider: FC = ({ children }) => { + const [favoriteStation, setFavoriteStation] = useState([]); const { getStationDataFromName } = useStationList(); const lodAddMigration = () => { const migration = favoriteStation.map((d) => { @@ -39,13 +39,13 @@ export const FavoriteStationProvider:FC = ({ children }) => { useEffect(() => { AS.getItem("favoriteStation") .then((d) => { - const returnData = JSON.parse(d); + const returnData: StationProps[][] = JSON.parse(d); setFavoriteStation(returnData); }) .catch((error) => { // エラーログを記録(開発時のみ) if (__DEV__) { - console.warn('お気に入り駅の読み込みに失敗しました:', error); + console.warn("お気に入り駅の読み込みに失敗しました:", error); } }); }, []); diff --git a/stateBox/useTrainDelayData.js b/stateBox/useTrainDelayData.tsx similarity index 100% rename from stateBox/useTrainDelayData.js rename to stateBox/useTrainDelayData.tsx diff --git a/stateBox/useTrainMenu.js b/stateBox/useTrainMenu.tsx similarity index 85% rename from stateBox/useTrainMenu.js rename to stateBox/useTrainMenu.tsx index 347a8c7..a36f791 100644 --- a/stateBox/useTrainMenu.js +++ b/stateBox/useTrainMenu.tsx @@ -9,29 +9,29 @@ import { useNotification } from "../stateBox/useNotifications"; const initialState = { selectedLine: undefined, - setSelectedLine: () => {}, + setSelectedLine: (e) => {}, mapsStationData: undefined, - setMapsStationData: () => {}, + setMapsStationData: (e) => {}, iconSetting: undefined, - setIconSetting: () => {}, + setIconSetting: (e) => {}, mapSwitch: undefined, - setMapSwitch: () => {}, + setMapSwitch: (e) => {}, stationMenu: undefined, - setStationMenu: () => {}, + setStationMenu: (e) => {}, uiSetting: undefined, - setUiSetting: () => {}, + setUiSetting: (e) => {}, LoadError: false, - setLoadError: () => {}, + setLoadError: (e) => {}, trainInfo: { trainNum: undefined, limited: undefined, trainData: undefined, }, - setTrainInfo: () => {}, + setTrainInfo: (e) => {}, trainMenu: "true", - setTrainMenu: () => {}, + setTrainMenu: (e) => {}, updatePermission : false, - setUpdatePermission : () => {}, + setUpdatePermission : (e) => {}, injectJavascript: "", }; @@ -50,9 +50,9 @@ export const TrainMenuProvider = ({ children }) => { }, []); //画面表示関連 - const [iconSetting, setIconSetting] = useState(undefined); - const [mapSwitch, setMapSwitch] = useState(undefined); - const [stationMenu, setStationMenu] = useState(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 [LoadError, setLoadError] = useState(false); //更新権限所有確認