import React, { CSSProperties, FC, useEffect, useMemo, useState } from "react"; import { Text, View, TextStyle, TouchableOpacity } from "react-native"; import { SheetManager } from "react-native-actions-sheet"; import { migrateTrainName } from "../../../lib/eachTrainInfoCoreLib/migrateTrainName"; import { TrainIconStatus } from "./trainIconStatus"; import { TrainViewIcon } from "./trainViewIcon"; import { OneManText } from "./HeaderTextParts/OneManText"; import { customTrainDataDetector } from "@/components/custom-train-data"; import { InfogramText } from "@/components/ActionSheetComponents/EachTrainInfoCore/HeaderTextParts/InfogramText"; import { useTrainMenu } from "@/stateBox/useTrainMenu"; import { useAllTrainDiagram } from "@/stateBox/useAllTrainDiagram"; import { useNotification } from "@/stateBox/useNotifications"; import { getStringConfig } from "@/lib/getStringConfig"; import { FontAwesome } from "@expo/vector-icons"; type Props = { data: { trainNum: string; limited: string }; trainData: string[]; showHeadStation: number[]; showTailStation: number[]; headStation: { id: string }[]; tailStation: { id: string }[]; navigate: any; from: string; fontLoaded: boolean; scrollHandlers: any; }; const textConfig: TextStyle = { fontSize: 17, fontWeight: "bold", color: "white", }; export const HeaderText: FC = ({ data, trainData, showHeadStation, showTailStation, headStation, tailStation, navigate, from, scrollHandlers, }) => { const { limited, trainNum } = data; const { updatePermission } = useTrainMenu(); const { allCustomTrainData } = useAllTrainDiagram(); const { expoPushToken } = useNotification(); // 列車名、種別、フォントの取得 const [ typeName, trainName, fontAvailable, isOneMan, infogram, isEdit, uwasa, vehicleFormation, ] = useMemo(() => { const { type, trainName, trainNumDistance, infogram, isEdit, uwasa, vehicleFormation } = customTrainDataDetector(trainNum, allCustomTrainData); const [typeString, fontAvailable, isOneMan] = getStringConfig( type, trainNum ); switch (true) { case trainName !== "": // 特急の場合は、列車名を取得 // 列番対称データがある場合はそれから列車番号を取得 return [ typeString, trainName + (trainNumDistance !== null ? ` ${parseInt(trainNum) - trainNumDistance}号` : ""), fontAvailable, isOneMan, infogram, isEdit, uwasa, vehicleFormation ]; case trainData[trainData.length - 1] === undefined: return [ typeString, "", fontAvailable, isOneMan, infogram, isEdit, uwasa, vehicleFormation ]; default: // 行先がある場合は、行先を取得 return [ typeString, migrateTrainName( trainData[trainData.length - 1].split(",")[0] + "行き" ), fontAvailable, isOneMan, infogram, isEdit, uwasa, vehicleFormation ]; } }, [trainData]); return ( scrollHandlers.ref.current?.scrollTo({ y: 0, animated: true }) } > { const uri = `https://jr-shikoku-data-post-system.pages.dev?trainNum=${trainNum}&token=${expoPushToken}`; navigate("generalWebView", { uri, useExitButton: false }); SheetManager.hide("EachTrainInfo"); }} disabled={!updatePermission} > {typeName} {isOneMan && } {trainName} {isEdit && ( alert( `[このアイコン、列車データはコミュニティによってリアルタイム追加されています。]\n使用車両情報:\n${vehicleFormation}\n投稿者メモ:\n${uwasa || "なし"}` ) } /> )} {showHeadStation.map((d) => `${headStation[d].id} + `)} {trainNum} {showTailStation.map((d) => ` + ${tailStation[d].id}`)} ); };