diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js index 98e0541..26d7334 100644 --- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js +++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js @@ -5,6 +5,7 @@ import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientati import { getStationList2 } from "../../../lib/getStationList2"; import { useCurrentTrain } from "../../../stateBox/useCurrentTrain"; import { SheetManager } from "react-native-actions-sheet"; +import { trainPosition } from "../../../lib/trainPositionTextArray"; export const TrainDataView = ({ currentTrainData, @@ -16,12 +17,17 @@ export const TrainDataView = ({ }) => { const { width, height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); - const { webview, getCurrentTrain, inject } = useCurrentTrain(); + const { inject } = useCurrentTrain(); const [mapsStationData, setMapsStationData] = useState(undefined); useEffect(() => { getStationList2().then(setMapsStationData); }, []); const onLine = !!currentPosition?.toString().length; + const trainPositionText = (trainData) => { + const { isBetween, Pos } = trainPosition(trainData); + if (isBetween === true) return `${Pos.from}~${Pos.to}`; + else return Pos.Pos == "" ? "" : `${Pos.Pos}`; + }; return ( = (props) => { const getTrainDataFromCurrentTrain = (trainNum: string) => { const customTrainData = customTrainDataDetector(d.train); - if(customTrainData.type != "Normal") return customTrainData; - - const currentTrainData = currentTrain.filter((a) => a.num == trainNum); - if(currentTrainData.length == 0) return customTrainData; - + if (customTrainData.type != "Normal") return customTrainData; + const currentTrainData = currentTrain.filter((a) => a.num == trainNum); + if (currentTrainData.length == 0) return customTrainData; else if (currentTrainData[0].Type.includes("rapid:")) { const typeText = currentTrainData[0].Type.split(":"); const returnData = { @@ -83,7 +82,7 @@ export const EachData: FC = (props) => { return returnData; } return customTrainData; - } + }; const [train, setTrain] = useState(getTrainDataFromCurrentTrain(d.train)); useEffect(() => { setTrain(getTrainDataFromCurrentTrain(d.train)); @@ -96,17 +95,11 @@ export const EachData: FC = (props) => { currentTrainData, station.Station_JP )}`; - const trainPositionText = currentTrainData?.Pos.match("~") - ? `現在地:${ - currentTrainData?.Pos.replace("(下り)", "") - .replace("(上り)", "") - .split("~")[currentTrainData?.Direction == 1 ? 0 : 1] - }→${ - currentTrainData?.Pos.replace("(下り)", "") - .replace("(上り)", "") - .split("~")[currentTrainData?.Direction == 1 ? 1 : 0] - }間を走行中` - : `現在地:${currentTrainData?.Pos}`; + const trainPositionText = (trainData: trainDataType) => { + const { isBetween, Pos } = trainPosition(trainData); + if (isBetween === true) return `現在地:${Pos.from}→${Pos.to}間を走行中`; + else return Pos.Pos == "" ? "" : `現在地:${Pos.Pos}`; + }; return ( <> = (props) => { {trainDescriptionSwitch && ( { Linking.openURL( diff --git a/lib/trainPositionTextArray.ts b/lib/trainPositionTextArray.ts new file mode 100644 index 0000000..22366d9 --- /dev/null +++ b/lib/trainPositionTextArray.ts @@ -0,0 +1,33 @@ +type returnBetweenType = { + isBetween: true; + Pos: { + from: string; + to: string; + }; +}; +type returnCurrentType = { + isBetween: false; + Pos: { + Pos: string; + }; +}; +export type trainDataType = { + Pos?: string; + Direction?: number; +}; +type trainData = ( + trainData: trainDataType +) => returnBetweenType | returnCurrentType; + +export const trainPosition: trainData = (trainData) => { + if (!trainData?.Pos) return { isBetween: false, Pos: { Pos: "" } }; + const { Pos, Direction } = trainData; + if (Pos.match("~")) { + const [topST, downST] = Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~"); + const from = Direction == 1 ? topST : downST; + const to = Direction == 1 ? downST : topST; + return { isBetween: true, Pos: { from, to } }; + } else return { isBetween: false, Pos: { Pos } }; +};