From ab37bb084ed2514053aed4e628a2bea9799c4df8 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Wed, 25 Dec 2024 13:26:36 +0000 Subject: [PATCH 1/2] =?UTF-8?q?stationList=E3=81=AE=E6=B1=8E=E7=94=A8?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfo/TrainDataView.js | 12 ++-------- .../EachTrainInfoCore.js | 13 ++-------- .../LED_inside_Component/TrainPosition.tsx | 11 ++------- stateBox/useStationList.tsx | 24 +++++++++++++++---- 4 files changed, 26 insertions(+), 34 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js index 0aa5dcd..dbdb86a 100644 --- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js +++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js @@ -22,16 +22,8 @@ export const TrainDataView = ({ navigate, }) => { - const { originalStationList } = useStationList(); - - const stationList = - originalStationList && - lineList.map((d) => - originalStationList[d].map((a) => ({ - StationNumber: a.StationNumber, - StationName: a.Station_JP, - })) - ); + const { stationList } = useStationList(); + const { width, height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); const { inject } = useCurrentTrain(); diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index baae4cf..4865963 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -12,7 +12,7 @@ import { import { SheetManager } from "react-native-actions-sheet"; import { AS } from "../../storageControl"; import trainList from "../../assets/originData/trainList"; -import { lineList, lineListPair } from "../../lib/getStationList"; +import { lineListPair } from "../../lib/getStationList"; import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; import { checkDuplicateTrainData } from "../../lib/checkDuplicateTrainData"; import { getTrainType } from "../../lib/getTrainType"; @@ -46,7 +46,7 @@ export const EachTrainInfoCore = ({ }) => { // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false); const { currentTrain } = useCurrentTrain(); - const { originalStationList } = useStationList(); + const { originalStationList,stationList } = useStationList(); const { setTrainInfo } = useTrainMenu(); const [currentTrainData, setCurrentTrainData] = useState(); @@ -86,15 +86,6 @@ export const EachTrainInfoCore = ({ const [showThrew, setShowThrew] = useState(false); const [haveThrough, setHaveThrough] = useState(false); - const stationList = - originalStationList && - lineList.map((d) => - originalStationList[d].map((a) => ({ - StationNumber: a.StationNumber, - StationName: a.Station_JP, - })) - ); - // 使用例 const stopStationIDList = trainDataWidhThrough.map((i) => { const [station, se, time] = i.split(","); diff --git a/components/発車時刻表/LED_inside_Component/TrainPosition.tsx b/components/発車時刻表/LED_inside_Component/TrainPosition.tsx index a3ecdbc..e53e8ef 100644 --- a/components/発車時刻表/LED_inside_Component/TrainPosition.tsx +++ b/components/発車時刻表/LED_inside_Component/TrainPosition.tsx @@ -46,15 +46,8 @@ export const TrainPosition: FC = ({ platformNumber, }) => { const { currentTrain } = useCurrentTrain(); - const { originalStationList } = useStationList(); - const stationList = - originalStationList && - lineList.map((d) => - originalStationList[d].map((a) => ({ - StationNumber: a.StationNumber, - StationName: a.Station_JP, - })) - ); + const { stationList } = useStationList(); + useEffect(() => { fetch( `https://n8n.haruk.in/webhook/JR-shikoku-PosID?PosNum=${currentTrainData?.PosNum}&Line=${currentTrainData?.Line}` diff --git a/stateBox/useStationList.tsx b/stateBox/useStationList.tsx index d947796..c064c12 100644 --- a/stateBox/useStationList.tsx +++ b/stateBox/useStationList.tsx @@ -6,16 +6,19 @@ import React, { FC, } from "react"; import { getStationList } from "../lib/getStationList"; +import { lineList } from "../lib/getStationList"; type initialStateType = { - originalStationList: any[]; + originalStationList: any[][]; setOriginalStationList: React.Dispatch>; getStationData: (id: string) => void; + stationList: any[]; }; const initialState = { - originalStationList: [], + originalStationList: [[]], setOriginalStationList: () => {}, getStationData: () => {}, + stationList: [], }; const StationListContext = createContext(initialState); @@ -42,10 +45,23 @@ export const StationListProvider: FC = ({ children }) => { }); return returnArray; }; - + const [stationList, setStationList] = useState([[]]); + useEffect(()=>{ + if(originalStationList.length === 0) return; + const stationList = + originalStationList && + lineList.map((d) => + originalStationList[d].map((a) => ({ + StationNumber: a.StationNumber, + StationName: a.Station_JP, + })) + ); + setStationList(stationList) + },[originalStationList]) + return ( {children} From 99ab716cd22ed64e44514c27345e0e51943a0104 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Thu, 26 Dec 2024 01:24:39 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E7=9B=B4=E9=80=9A=E7=B3=BB=E8=B7=AF?= =?UTF-8?q?=E7=B7=9A=E3=81=AB=E3=81=A6=E3=83=A9=E3=82=A4=E3=83=B3=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=81=8C=E6=AD=A3=E5=B8=B8=E3=81=AB=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=81=9A=E9=A7=85=E7=95=AA=E7=B7=9A=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E7=AE=A1=E7=90=86=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0?= =?UTF-8?q?=E3=81=AB=E7=95=B0=E5=B8=B8=E3=82=92=E3=81=8D=E3=81=9F=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E4=BA=8B=E6=A1=88=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfoCore.js | 5 +- components/Apps/WebView.jsx | 5 +- components/発車時刻表/EachData.tsx | 13 ++-- lib/checkDuplicateTrainData.ts | 67 ++++++++++++++++++- 4 files changed, 79 insertions(+), 11 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 4865963..ef078e2 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -46,7 +46,7 @@ export const EachTrainInfoCore = ({ }) => { // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false); const { currentTrain } = useCurrentTrain(); - const { originalStationList,stationList } = useStationList(); + const { originalStationList, stationList } = useStationList(); const { setTrainInfo } = useTrainMenu(); const [currentTrainData, setCurrentTrainData] = useState(); @@ -56,7 +56,8 @@ export const EachTrainInfoCore = ({ if (!currentTrain.length) return; setCurrentTrainData( checkDuplicateTrainData( - currentTrain.filter((d) => d.num == data.trainNum) + currentTrain.filter((d) => d.num == data.trainNum), + stationList ) ); }, [currentTrain, data.trainNum]); diff --git a/components/Apps/WebView.jsx b/components/Apps/WebView.jsx index e5e8d7d..3eeec97 100644 --- a/components/Apps/WebView.jsx +++ b/components/Apps/WebView.jsx @@ -18,7 +18,7 @@ export const AppsWebView = ({ openStationACFromEachTrainInfo }) => { const { navigate } = useNavigation(); const { favoriteStation } = useFavoriteStation(); const { isLandscape } = useDeviceOrientationChange(); - const { originalStationList } = useStationList(); + const { originalStationList, stationList } = useStationList(); const { setSelectedLine, mapsStationData: stationData, @@ -96,7 +96,8 @@ export const AppsWebView = ({ openStationACFromEachTrainInfo }) => { trainNum, limited, trainData: checkDuplicateTrainData( - currentTrain.filter((a) => a.num == trainNum) + currentTrain.filter((a) => a.num == trainNum), + stationList ), }); //遅延情報は未実装 if (isLandscape) return; diff --git a/components/発車時刻表/EachData.tsx b/components/発車時刻表/EachData.tsx index 0604b9b..1234ff3 100644 --- a/components/発車時刻表/EachData.tsx +++ b/components/発車時刻表/EachData.tsx @@ -15,6 +15,7 @@ import { customTrainDataDetector } from "../custom-train-data"; import { TrainPosition } from "./LED_inside_Component/TrainPosition"; import { TrainPositionDataPush } from "./LED_inside_Component/TrainPositionDataPush"; import { TrainPositionDataDelete } from "./LED_inside_Component/TrainPositionDataDelete"; +import { useStationList } from "../../stateBox/useStationList"; type Props = { d: { @@ -41,6 +42,7 @@ export const EachData: FC = (props) => { openStationACFromEachTrainInfo, } = props; const { currentTrain } = useCurrentTrain(); + const { stationList } = useStationList(); const openTrainInfo = (d: { train: string; lastStation: string; @@ -94,7 +96,8 @@ export const EachData: FC = (props) => { }, [currentTrain, d.train, trainDescriptionSwitch]); // 土讃線複数存在対策 const currentTrainData = checkDuplicateTrainData( - currentTrain.filter((a) => a.num == d.train) + currentTrain.filter((a) => a.num == d.train), + stationList ); const trainDelayStatus = `${getTrainDelayStatus( currentTrainData, @@ -105,20 +108,20 @@ export const EachData: FC = (props) => { const [platformDescription, setPlatformDescription] = useState(); const [dialog, setDialog] = useState(false); - const [deleteDialog, setDeleteDialog] = useState(false); + const [deleteDialog, setDeleteDialog] = useState(false); const [posInput, setPosInput] = useState(""); const [descInput, setDescInput] = useState(""); const [stationInput, setStationInput] = useState(""); const [stationNumberInput, setStationNumberInput] = useState(""); return ( <> - + /> = (props) => { setPlatformNumber={setPlatformNumber} platformDescription={platformDescription} platformNumber={platformNumber} - key={d.train+"-trainPosition"} + key={d.train + "-trainPosition"} /> )} {trainDescriptionSwitch && !!train.info && ( diff --git a/lib/checkDuplicateTrainData.ts b/lib/checkDuplicateTrainData.ts index 881db65..3e2e3b5 100644 --- a/lib/checkDuplicateTrainData.ts +++ b/lib/checkDuplicateTrainData.ts @@ -1,8 +1,71 @@ import { trainDataType } from "./trainPositionTextArray"; +import { getStationID } from "./eachTrainInfoCoreLib/getStationData"; +import { stationIDPair } from "../lib/getStationList2"; -export const checkDuplicateTrainData = (currentTrainArray: trainDataType[]) => { - const notNyujoData = currentTrainArray.filter((d) => d.delay !== "入線"); +export const checkDuplicateTrainData = ( + currentTrainArray: trainDataType[], + stationList: any[] +) => { + const notSameLineData = checkSameTrain(currentTrainArray, stationList); + const notNyujoData = notSameLineData.filter((d) => d.delay !== "入線"); if (currentTrainArray.length == 1) return currentTrainArray[0]; if (notNyujoData.length == 0) return currentTrainArray[0]; else return notNyujoData[0]; }; + +// 二つのデータを比較して、正しい路線を反映しているデータだけを返す関数 +const checkSameTrain = ( + currentTrainArray: trainDataType[], + stationList: any[] +) => { + const trueLineData = currentTrainArray + .map((d) => { + if (d.Pos.match("~")) { + const [topST, downST] = d.Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~"); + const stopStationList = [topST, downST].map((i) => { + return stationList.map((a) => a.filter((d) => d.StationName == i)); + }); + const x = stopStationList.map((i, index, array) => { + if (index == array.length - 1) return; + + const firstItem = array[index]; + const secondItem = array[index + 1]; + let betweenStationLine = ""; + let baseStationNumberFirst = ""; + let baseStationNumberSecond = ""; + Object.keys(stationIDPair).forEach((d, index2, array) => { + if (!d) return; + const haveFirst = firstItem[index2]; + const haveSecond = secondItem[index2]; + if (haveFirst.length && haveSecond.length) { + betweenStationLine = d; + baseStationNumberFirst = haveFirst[0].StationNumber; + baseStationNumberSecond = haveSecond[0].StationNumber; + } + }); + + return betweenStationLine; + }); + return x; + } else { + const ST = d.Pos.replace("(下り)", "").replace("(上り)", ""); + const stopStationList = stationList.map((a) => + a.filter((d) => d.StationName == ST) + ); + + const string = Object.keys(stationIDPair).map((d, index2, array) => { + if (!d) return; + if (!stopStationList[index2].length) return; + return d; + }); + return string; + } + }) + .map((x) => x.filter((d) => d != undefined)); + const returnData = currentTrainArray.filter((d, index) => { + return d.Line == trueLineData[index][0]; + }); + return returnData; +};