43 lines
1.5 KiB
TypeScript
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,
|
|
};
|
|
};
|