Files
harukin-expo-dev-env e8a2547ca4 tsx化
2025-12-05 10:43:57 +00:00

84 lines
2.6 KiB
TypeScript

import { useState, useEffect } from 'react';
import { AS } from '@/storageControl';
import { STORAGE_KEYS } from '@/constants';
import { logger } from '@/utils/logger';
import { useCurrentTrain } from '@/stateBox/useCurrentTrain';
import { findReversalPoints } from '@/lib/eachTrainInfoCoreLib/findReversalPoints';
type TrainData = {
trainNum: string;
position?: string[];
delay?: number | "入線";
[key: string]: unknown;
};
export const useTrainPosition = (
trainNum: string,
stopStationIDList: string[][]
) => {
const { currentTrain, getCurrentStationData, getPosition } = useCurrentTrain();
const [currentTrainData, setCurrentTrainData] = useState<TrainData | undefined>();
const [currentPosition, setCurrentPosition] = useState<string[]>([]);
const [trainPositionSwitch, setTrainPositionSwitch] = useState<string>('false');
useEffect(() => {
const trainPosData = getCurrentStationData(trainNum);
if (trainPosData) {
logger.debug('Train position data:', trainPosData);
setCurrentTrainData(trainPosData);
}
}, [currentTrain, trainNum, getCurrentStationData]);
useEffect(() => {
if (!stopStationIDList.length || !currentTrainData) return;
let position = getPosition(currentTrainData);
if (!position) return;
if (position.length > 1) {
// 伊予市駅の特殊処理
const iyoIndex = stopStationIDList.findIndex((d) => d.includes('U14'));
if (position[0] === '-Iyo') {
position[0] = stopStationIDList[iyoIndex - 1]?.[0];
} else if (position[0] === '+Iyo') {
position[0] = stopStationIDList[iyoIndex + 1]?.[0];
}
if (position[1] === '+Iyo') {
position[1] = stopStationIDList[iyoIndex + 1]?.[0];
} else if (position[1] === '-Iyo') {
position[1] = stopStationIDList[iyoIndex - 1]?.[0];
}
}
setCurrentPosition(position);
}, [currentTrainData, stopStationIDList, getPosition]);
useEffect(() => {
AS.getItem(STORAGE_KEYS.TRAIN_POSITION_SWITCH)
.then((value) => {
if (value) setTrainPositionSwitch(value);
})
.catch(() => AS.setItem(STORAGE_KEYS.TRAIN_POSITION_SWITCH, 'true'));
}, []);
const points =
trainPositionSwitch === 'true'
? findReversalPoints(currentPosition, stopStationIDList, true)
: stopStationIDList.map(() => false);
const pointsDisplay =
trainPositionSwitch === 'true'
? findReversalPoints(currentPosition, stopStationIDList, false)
: stopStationIDList.map(() => false);
return {
currentTrainData,
currentPosition,
points,
pointsDisplay,
trainPositionSwitch,
};
};