From 820623f2cec86ae92ee1547008783907c658314d Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Fri, 30 Aug 2024 06:13:26 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E5=88=86=E9=9B=A2=E3=80=81=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MenuPage.js | 2 +- .../EachTrainInfoCore.js | 50 +++---------- .../EachTrainInfoCore/HeaderText.tsx | 73 +++++++++++++++++++ .../trainIconStatus.tsx | 24 +++--- .../EachTrainInfoCore/trainViewIcon.tsx | 41 +++++++++++ 5 files changed, 139 insertions(+), 51 deletions(-) create mode 100644 components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx rename components/ActionSheetComponents/{EachTrainInfo => EachTrainInfoCore}/trainIconStatus.tsx (82%) create mode 100644 components/ActionSheetComponents/EachTrainInfoCore/trainViewIcon.tsx diff --git a/MenuPage.js b/MenuPage.js index 886860a..b67463a 100644 --- a/MenuPage.js +++ b/MenuPage.js @@ -73,7 +73,7 @@ export function MenuPage() { } + component={HowTo} /> ); diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index a163c6e..f20d778 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -1,7 +1,6 @@ import React, { useEffect, useMemo, useState } from "react"; import { View, - LayoutAnimation, Text, TouchableOpacity, StyleSheet, @@ -9,7 +8,6 @@ import { BackHandler, Linking, } from "react-native"; -import { Ionicons } from "@expo/vector-icons"; import { SheetManager } from "react-native-actions-sheet"; import { AS } from "../../storageControl"; import trainList from "../../assets/originData/trainList"; @@ -33,8 +31,8 @@ import { getType } from "../../lib/eachTrainInfoCoreLib/getType"; import { searchSpecialTrain } from "../../lib/eachTrainInfoCoreLib/searchSpecialTrain"; import { openBackTrainInfo } from "../../lib/eachTrainInfoCoreLib/openBackTrainInfo"; import { ShowSpecialTrain } from "./EachTrainInfo/ShowSpecialTrain"; -import { TrainIconStatus } from "./EachTrainInfo/trainIconStatus"; import { useTrainMenu } from "../../stateBox/useTrainMenu"; +import { HeaderText } from "./EachTrainInfoCore/HeaderText"; export const EachTrainInfoCore = ({ actionSheetRef, @@ -45,10 +43,7 @@ export const EachTrainInfoCore = ({ }) => { // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false); const { currentTrain } = useCurrentTrain(); - const { - setTrainInfo, - originalStationList, - } = useTrainMenu(); + const { setTrainInfo, originalStationList } = useTrainMenu(); const [currentTrainData, setCurrentTrainData] = useState(); // const [actionSheetHorizonalScroll, setActionSheetHorizonalScroll] = useState(false); @@ -84,7 +79,6 @@ export const EachTrainInfoCore = ({ const [currentPosition, setCurrentPosition] = useState([]); const [trainData, setTrainData] = useState([]); - const stationList = originalStationList && lineList.map((d) => @@ -283,37 +277,17 @@ export const EachTrainInfoCore = ({ /> )} - - - - {trainName} - - - - {showHeadStation.map((d) => `${headStation[d].id} + `)} - {data.trainNum} - {showTailStation.map((d) => ` + ${tailStation[d].id}`)} - + - {data.limited != undefined && - getType(data.limited.split(":")[0]) && - !data.limited.split(":")[1].match("サンポート") && ( - { - LayoutAnimation.easeInEaseOut(); //setLoadingDelayData(true); - navigate("trainbase", { - info: "train.html?tn=" + data.trainNum, - from, - }); - SheetManager.hide("EachTrainInfo"); - }} - /> - )} - = ({ + data, + trainData, + showHeadStation, + showTailStation, + headStation, + tailStation, + navigate, + from, +}) => { + const trainName = useMemo(() => { + if (!data.limited) return ""; + const limitedArray = data.limited.split(":"); + const type = getType(limitedArray[0]); + + switch (true) { + case !!limitedArray[1]: + // 特急の場合は、列車名を取得 + return type + migrateTrainName(limitedArray[1]); + case trainData.length == 0: + // 特急以外の場合は、列車番号を取得 + return type; + default: + // 行先がある場合は、行先を取得 + return ( + type + + migrateTrainName( + trainData[trainData.length - 1].split(",")[0] + "行き" + ) + ); + } + }, [data.limited, trainData]); + return ( + + + {trainName} + + + {showHeadStation.map((d) => `${headStation[d].id} + `)} + {data.trainNum} + {showTailStation.map((d) => ` + ${tailStation[d].id}`)} + + + + + ); +}; diff --git a/components/ActionSheetComponents/EachTrainInfo/trainIconStatus.tsx b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx similarity index 82% rename from components/ActionSheetComponents/EachTrainInfo/trainIconStatus.tsx rename to components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx index 93ab139..7e5a7e8 100644 --- a/components/ActionSheetComponents/EachTrainInfo/trainIconStatus.tsx +++ b/components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx @@ -1,27 +1,27 @@ import React, { ComponentProps, FC, useEffect, useState } from "react"; -import { View, Image } from "react-native"; +import { View, Image, TouchableOpacity } from "react-native"; import { Ionicons } from "@expo/vector-icons"; import dayjs from "dayjs"; import { useInterval } from "../../../lib/useInterval"; import { Icon } from "@expo/vector-icons/build/createIconSet"; type GlyphNames = ComponentProps["name"]; + type Props = { - trainData: { - trainNum: string; - limited: string; - }; + data: { trainNum: string; limited: string }; + navigate: any; + from: string; }; type apt = { name: GlyphNames; color: string; }; -export const TrainIconStatus: FC = ({ trainData }) => { +export const TrainIconStatus: FC = ({ data,navigate,from }) => { const [trainIcon, setTrainIcon] = useState(null); const [anpanmanStatus, setAnpanmanStatus] = useState(); useEffect(() => { - if (!trainData.trainNum) return; - switch (trainData.trainNum) { + if (!data.trainNum) return; + switch (data.trainNum) { case "32D": case "36D": case "44D": @@ -34,12 +34,12 @@ export const TrainIconStatus: FC = ({ trainData }) => { case "57D": setTrainIcon( "https://n8n.haruk.in/webhook/dosan-anpanman-pictures.png?trainNum=" + - trainData.trainNum + data.trainNum ); fetch( `https://n8n.haruk.in/webhook/dosan-anpanman?month=${dayjs().format( "M" - )}&day=${dayjs().format("D")}&trainNum=${trainData.trainNum}` + )}&day=${dayjs().format("D")}&trainNum=${data.trainNum}` ) .then((d) => d.json()) .then((d) => { @@ -53,7 +53,7 @@ export const TrainIconStatus: FC = ({ trainData }) => { }); break; } - }, [trainData.trainNum]); + }, [data.trainNum]); const [move, setMove] = useState(true); useInterval( () => { @@ -66,7 +66,7 @@ export const TrainIconStatus: FC = ({ trainData }) => { return ( <> {trainIcon && ( - + {move ? ( = ({ data, navigate, from }) => { + const [isTrainView, setIsTrainView] = useState(false); + //トレインビュー表示対象(特急、マリン)かを判定 + useEffect(() => { + if (!data.limited) return; + setIsTrainView( + getType(data.limited.split(":")[0]) && + !data.limited.split(":")[1].match("サンポート") + ); + }, [data.limited]); + const onPressTrainView = () => { + LayoutAnimation.easeInEaseOut(); //setLoadingDelayData(true); + navigate("trainbase", { + info: "train.html?tn=" + data.trainNum, + from, + }); + SheetManager.hide("EachTrainInfo"); + }; + return isTrainView ? ( + + ) : ( + <> + ); +};