現在地テキスト表示関連の機能を統合化

This commit is contained in:
harukin-expo-dev-env 2024-10-17 11:52:17 +00:00
parent bf7e113862
commit b41c02ca76
3 changed files with 54 additions and 32 deletions

View File

@ -5,6 +5,7 @@ import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientati
import { getStationList2 } from "../../../lib/getStationList2"; import { getStationList2 } from "../../../lib/getStationList2";
import { useCurrentTrain } from "../../../stateBox/useCurrentTrain"; import { useCurrentTrain } from "../../../stateBox/useCurrentTrain";
import { SheetManager } from "react-native-actions-sheet"; import { SheetManager } from "react-native-actions-sheet";
import { trainPosition } from "../../../lib/trainPositionTextArray";
export const TrainDataView = ({ export const TrainDataView = ({
currentTrainData, currentTrainData,
@ -16,12 +17,17 @@ export const TrainDataView = ({
}) => { }) => {
const { width, height } = useWindowDimensions(); const { width, height } = useWindowDimensions();
const { isLandscape } = useDeviceOrientationChange(); const { isLandscape } = useDeviceOrientationChange();
const { webview, getCurrentTrain, inject } = useCurrentTrain(); const { inject } = useCurrentTrain();
const [mapsStationData, setMapsStationData] = useState(undefined); const [mapsStationData, setMapsStationData] = useState(undefined);
useEffect(() => { useEffect(() => {
getStationList2().then(setMapsStationData); getStationList2().then(setMapsStationData);
}, []); }, []);
const onLine = !!currentPosition?.toString().length; 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 ( return (
<View <View
style={{ style={{
@ -60,19 +66,7 @@ export const TrainDataView = ({
<StateBox <StateBox
mode={mode} mode={mode}
title={`現在地 ${currentPosition?.toString()}${onLine ? "▶️" : ""}`} title={`現在地 ${currentPosition?.toString()}${onLine ? "▶️" : ""}`}
text={ text={trainPositionText(currentTrainData)}
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
}
style={ style={
onLine onLine
? { borderWidth: 1, borderColor: "red", borderStyle: "solid" } ? { borderWidth: 1, borderColor: "red", borderStyle: "solid" }

View File

@ -11,6 +11,7 @@ import { LastStation } from "./LED_inside_Component/LastStation";
import { StatusAndDelay } from "./LED_inside_Component/StatusAndDelay"; import { StatusAndDelay } from "./LED_inside_Component/StatusAndDelay";
import { TrainName } from "./LED_inside_Component/TrainName"; import { TrainName } from "./LED_inside_Component/TrainName";
import { customTrainDataDetector } from "../custom-train-data"; import { customTrainDataDetector } from "../custom-train-data";
import { trainDataType, trainPosition } from "../../lib/trainPositionTextArray";
type Props = { type Props = {
d: { d: {
@ -66,11 +67,9 @@ export const EachData: FC<Props> = (props) => {
const getTrainDataFromCurrentTrain = (trainNum: string) => { const getTrainDataFromCurrentTrain = (trainNum: string) => {
const customTrainData = customTrainDataDetector(d.train); const customTrainData = customTrainDataDetector(d.train);
if(customTrainData.type != "Normal") return customTrainData; if (customTrainData.type != "Normal") return customTrainData;
const currentTrainData = currentTrain.filter((a) => a.num == trainNum);
const currentTrainData = currentTrain.filter((a) => a.num == trainNum); if (currentTrainData.length == 0) return customTrainData;
if(currentTrainData.length == 0) return customTrainData;
else if (currentTrainData[0].Type.includes("rapid:")) { else if (currentTrainData[0].Type.includes("rapid:")) {
const typeText = currentTrainData[0].Type.split(":"); const typeText = currentTrainData[0].Type.split(":");
const returnData = { const returnData = {
@ -83,7 +82,7 @@ export const EachData: FC<Props> = (props) => {
return returnData; return returnData;
} }
return customTrainData; return customTrainData;
} };
const [train, setTrain] = useState(getTrainDataFromCurrentTrain(d.train)); const [train, setTrain] = useState(getTrainDataFromCurrentTrain(d.train));
useEffect(() => { useEffect(() => {
setTrain(getTrainDataFromCurrentTrain(d.train)); setTrain(getTrainDataFromCurrentTrain(d.train));
@ -96,17 +95,11 @@ export const EachData: FC<Props> = (props) => {
currentTrainData, currentTrainData,
station.Station_JP station.Station_JP
)}`; )}`;
const trainPositionText = currentTrainData?.Pos.match("") const trainPositionText = (trainData: trainDataType) => {
? `現在地:${ const { isBetween, Pos } = trainPosition(trainData);
currentTrainData?.Pos.replace("(下り)", "") if (isBetween === true) return `現在地:${Pos.from}${Pos.to}間を走行中`;
.replace("(上り)", "") else return Pos.Pos == "" ? "" : `現在地:${Pos.Pos}`;
.split("")[currentTrainData?.Direction == 1 ? 0 : 1] };
}${
currentTrainData?.Pos.replace("(下り)", "")
.replace("(上り)", "")
.split("")[currentTrainData?.Direction == 1 ? 1 : 0]
}`
: `現在地:${currentTrainData?.Pos}`;
return ( return (
<> <>
<TouchableOpacity <TouchableOpacity
@ -135,7 +128,9 @@ export const EachData: FC<Props> = (props) => {
{trainDescriptionSwitch && ( {trainDescriptionSwitch && (
<Description <Description
info={`${ info={`${
trainIDSwitch ? currentTrainData?.PosNum : trainPositionText trainIDSwitch
? currentTrainData?.PosNum
: trainPositionText(currentTrainData)
}`} }`}
onLongClick={() => { onLongClick={() => {
Linking.openURL( Linking.openURL(

View File

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