import React, { useState, useEffect, FC } from "react"; import { View, TouchableOpacity, useWindowDimensions } from "react-native"; import { StateBox } from "./StateBox"; import { PositionBox } from "./PositionBox"; import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientationChange"; import { getStationList2 } from "../../../lib/getStationList"; import { useCurrentTrain } from "../../../stateBox/useCurrentTrain"; import { SheetManager } from "react-native-actions-sheet"; import { trainDataType, trainPosition } from "@/lib/trainPositionTextArray"; import { StationPosPushDialog } from "../../発車時刻表/LED_inside_Component/TrainPositionDataPush"; import { getStationID } from "../../../lib/eachTrainInfoCoreLib/getStationData"; import { useStationList } from "../../../stateBox/useStationList"; import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram"; import { customTrainDataDetector } from "@/components/custom-train-data"; type props = { currentTrainData: trainDataType; currentPosition: string[] | undefined; nearTrainIDList: string[]; openTrainInfo: (f: string) => void; mode?: 0 | 1 | 2; //0:通常,1:コンパクト,2:横並び navigate: (screen: string, data?: any) => void; } export const TrainDataView:FC = ({ currentTrainData, currentPosition, nearTrainIDList, openTrainInfo, mode = 0, navigate, }) => { const { stationList } = useStationList(); const { width, height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); const { setInjectData } = useCurrentTrain(); const { allCustomTrainData } = useAllTrainDiagram(); const [mapsStationData, setMapsStationData] = useState(undefined); const [platformNumber, setPlatformNumber] = useState(); const [lineNumber, setLineNumber] = useState(); const [platformDescription, setPlatformDescription] = useState(); type data = { type: string; lineNumber: string; platformNumber: string; position: string; stationName: string; description: string; }; const [database, setDatabase] = useState(null); useEffect(() => { //currentTrainData.Pos = "鴨川~端岡"; //test if (!currentTrainData) return; fetch( `https://n8n.haruk.in/webhook/JR-shikoku-PosID-v3?PosId=${currentTrainData?.PosNum}&lineName=${currentTrainData?.Line}&StationName=${currentTrainData?.Pos}` ) .then((res) => res.json()) .then((data) => { if (!data) return; const { type, stationName, lineNumber, platformNumber, position, description, } = data; setDatabase(data); if (type == "Station") { setLineNumber(lineNumber); setPlatformNumber(platformNumber); setPlatformDescription(description); } else { setLineNumber(undefined); setPlatformNumber(undefined); setPlatformDescription(undefined); } }); }, [currentTrainData]); useEffect(() => { getStationList2().then(setMapsStationData); }, []); const onLine = !!currentPosition?.toString().length; const [trainNumber, setTrainNumber] = useState(currentTrainData?.num); useEffect(() => { const { TrainNumberOverride } = customTrainDataDetector( currentTrainData?.num, allCustomTrainData ); if (TrainNumberOverride) { setTrainNumber(TrainNumberOverride); }else{ setTrainNumber(currentTrainData?.num); } }, [currentTrainData?.num, allCustomTrainData]); // 投稿システム関係 // Dialog表示関係 const [dialog, setDialog] = useState(false); const [deleteDialog, setDeleteDialog] = useState(false); //固定値 const [PosNum, setPosNum] = useState(); const [Pos, setPos] = useState(""); const [Line, setLine] = useState(""); const [StationNum, setStationNum] = useState(""); //編集情報 const [lineInput, setLineInput] = useState(""); const [posInput, setPosInput] = useState(""); const [descInput, setDescInput] = useState(""); const openEditWindow = () => { const { isBetween, Pos } = trainPosition(currentTrainData); if (isBetween === true) return; //固定値 setPosNum(currentTrainData?.PosNum); setPos(currentTrainData?.Pos); setLine(currentTrainData?.Line); setStationNum(getStationID(currentTrainData?.Pos, stationList)); //入力欄 setPosInput(database?.platformNumber?.toString() || ""); setDescInput(database?.description || ""); setLineInput(database?.lineNumber?.toString() || ""); setDialog(true); }; return ( <> { if (!onLine) return; setInjectData({ type:"train", value:currentTrainData?.num, fixed:true}); navigate("positions", { screen: "Apps" }); SheetManager.hide("EachTrainInfo"); }} onPress={() => { if (!onLine) return; setInjectData({ type: "station", value: currentPosition[0], fixed: false }); navigate("positions", { screen: "Apps" }); SheetManager.hide("EachTrainInfo"); }} > { if (nearTrainIDList.length == 0) return; openTrainInfo(nearTrainIDList[0]); }} > {nearTrainIDList.length == 0 ? ( ) : ( )} ); };