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; +};