Files
jrshikoku/components/Apps/FixedPositionBox/hooks/useFixedTrainData.ts
harukin-expo-dev-env 2ed8c17797 第三弾
2025-12-05 07:59:50 +00:00

43 lines
1.5 KiB
TypeScript

import { useState, useEffect } from "react";
import { useCurrentTrain } from "@/stateBox/useCurrentTrain";
import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram";
import { trainDataType } from "@/lib/trainPositionTextArray";
import { CustomTrainData } from "@/lib/CommonTypes";
import { getCurrentTrainData } from "@/lib/getCurrentTrainData";
/**
* 固定表示する列車のデータを管理するカスタムフック
*/
export const useFixedTrainData = (trainID: string) => {
const { currentTrain, getCurrentStationData, setFixedPosition } = useCurrentTrain();
const { allCustomTrainData } = useAllTrainDiagram();
const [train, setTrain] = useState<trainDataType | null>(null);
const [customData, setCustomData] = useState<CustomTrainData | null>(
getCurrentTrainData(trainID, currentTrain, allCustomTrainData)
);
// カスタムデータの更新
useEffect(() => {
setCustomData(
getCurrentTrainData(trainID, currentTrain, allCustomTrainData)
);
}, [currentTrain, trainID, allCustomTrainData]);
// 列車データの更新
useEffect(() => {
const stationData = getCurrentStationData(trainID);
if (stationData) {
setTrain(stationData);
} else {
alert("追跡していた列車が消えました。追跡を終了します。");
setFixedPosition({ type: null, value: null });
}
}, [trainID, currentTrain, getCurrentStationData, setFixedPosition]);
return {
train,
customData,
};
};