グリーン、寝台のアイコンを追加

This commit is contained in:
harukin-expo-dev-env 2025-03-22 10:10:29 +00:00
parent e604df3e6a
commit 7f148c17e4
4 changed files with 161 additions and 67 deletions

View File

@ -27,7 +27,7 @@ export function AppContainer() {
const [fontLoaded, error] = useFonts({
"JR-Nishi": require("./assets/fonts/jr-nishi.otf"),
Zou: require("./assets/fonts/DelaGothicOne-Regular.ttf"),
"JNR-font": require("./assets/fonts/JNRFont_pic.ttf"),
"JNR-font": require("./assets/fonts/JNRfont_pict.ttf"),
});
return (
<NavigationContainer ref={navigationRef}>

View File

@ -8,6 +8,7 @@ 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";
type Props = {
data: { trainNum: string; limited: string };
@ -22,7 +23,7 @@ type Props = {
};
const textConfig: TextStyle = {
fontSize: 18,
fontSize: 17,
fontWeight: "bold",
color: "white",
};
@ -40,70 +41,79 @@ export const HeaderText: FC<Props> = ({
const { limited, trainNum } = data;
// 列車名、種別、フォントの取得
const [typeName, trainName, fontAvailable, isOneMan] = useMemo(() => {
const customTrainData = customTrainDataDetector(trainNum);
const [type, fontAvailable, isOneMan] = (() => {
switch (customTrainData.type) {
case "LTDEXP":
return ["特急", true, false];
case "Rapid":
return ["快速", true, false];
case "Normal":
return ["普通", true, false];
case "OneManRapid":
return ["快速", true, true];
case "OneMan":
return ["普通", true, true];
case "NightLTDEXP":
return ["特急", true, false];
case "SPCL":
return ["臨時", false, false];
case "SPCL_EXP":
return ["臨時特急", false, false];
case "SPCL_Rapid":
return ["臨時快速", true, false];
case "SPCL_Normal":
return ["臨時", true, false];
case "Freight":
return ["貨物", false, false];
case "Other":
switch (true) {
case !!trainNum.includes("T"):
return ["単機回送", false, false];
case !!trainNum.includes("R"):
case !!trainNum.includes("E"):
case !!trainNum.includes("L"):
case !!trainNum.includes("A"):
case !!trainNum.includes("B"):
return ["回送", false, false];
case !!trainNum.includes("H"):
return ["試運転", false, false];
}
return ["", false, false];
const [typeName, trainName, fontAvailable, isOneMan, infogram] =
useMemo(() => {
const customTrainData = customTrainDataDetector(trainNum);
const [type, fontAvailable, isOneMan] = (() => {
switch (customTrainData.type) {
case "LTDEXP":
return ["特急", true, false];
case "Rapid":
return ["快速", true, false];
case "Normal":
return ["普通", true, false];
case "OneManRapid":
return ["快速", true, true];
case "OneMan":
return ["普通", true, true];
case "NightLTDEXP":
return ["特急", true, false];
case "SPCL":
return ["臨時", false, false];
case "SPCL_EXP":
return ["臨時特急", false, false];
case "SPCL_Rapid":
return ["臨時快速", true, false];
case "SPCL_Normal":
return ["臨時", true, false];
case "Freight":
return ["貨物", false, false];
case "Other":
switch (true) {
case !!trainNum.includes("T"):
return ["単機回送", false, false];
case !!trainNum.includes("R"):
case !!trainNum.includes("E"):
case !!trainNum.includes("L"):
case !!trainNum.includes("A"):
case !!trainNum.includes("B"):
return ["回送", false, false];
case !!trainNum.includes("H"):
return ["試運転", false, false];
}
return ["", false, false];
}
})();
switch (true) {
case customTrainData.trainName !== "":
// 特急の場合は、列車名を取得
// 列番対称データがある場合はそれから列車番号を取得
const distance = customTrainData.trainNumDistance;
const number =
distance !== null ? ` ${parseInt(trainNum) - distance}` : "";
const trainName = customTrainData.trainName + number;
return [
type,
trainName,
fontAvailable,
isOneMan,
customTrainData.infogram,
];
case trainData[trainData.length - 1] === undefined:
return [type, "", fontAvailable, isOneMan, customTrainData.infogram];
default:
// 行先がある場合は、行先を取得
return [
type,
migrateTrainName(
trainData[trainData.length - 1].split(",")[0] + "行き"
),
fontAvailable,
isOneMan,
customTrainData.infogram,
];
}
})();
switch (true) {
case customTrainData.trainName !== "":
// 特急の場合は、列車名を取得
// 列番対称データがある場合はそれから列車番号を取得
const distance = customTrainData.trainNumDistance;
const number = distance !== null ? ` ${parseInt(trainNum) - distance}` : "";
const trainName = customTrainData.trainName + number;
return [type, trainName, fontAvailable, isOneMan];
case trainData[trainData.length - 1] === undefined:
return [type, "", fontAvailable, isOneMan];
default:
// 行先がある場合は、行先を取得
return [
type,
migrateTrainName(
trainData[trainData.length - 1].split(",")[0] + "行き"
),
fontAvailable,
isOneMan,
];
}
}, [trainData]);
}, [trainData]);
return (
<View style={{ padding: 10, flexDirection: "row", alignItems: "center" }}>
@ -124,6 +134,7 @@ export const HeaderText: FC<Props> = ({
</Text>
{isOneMan && <OneManText />}
<Text style={textConfig}>{trainName}</Text>
<InfogramText infogram={infogram} />
</View>
<View style={{ flex: 1 }} />

View File

@ -0,0 +1,18 @@
import React, { FC } from "react";
import { Text } from "react-native";
type props = {
infogram: string;
}
export const InfogramText: FC<props> = ({infogram}) => {
return (
<Text
style={{
fontSize: 20,
color: "white",
fontFamily: "JNR-font",
}}
>
{infogram}
</Text>
);
};

View File

@ -28,6 +28,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shiokaze.html",
trainNumDistance: 0,
info: "いしづちと併結 / 8000系で運転",
infogram: ""
};
case "2M":
return {
@ -38,6 +39,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shiokaze.html",
trainNumDistance: 0,
info: "8000系で運転",
infogram: ""
};
//8000 アンパン
case "10M":
@ -51,6 +53,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 0,
info: "いしづちと併結 / アンパンマン列車で運転",
infogram: ""
};
//8600
case "8M":
@ -69,6 +72,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shiokaze.html",
trainNumDistance: 0,
info: "いしづちと併結 / 8600系で運転",
infogram: ""
};
//いしづちメイン
@ -99,6 +103,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 1000,
info: "しおかぜと併結 / 8000系で運転",
infogram: ""
};
//8000 アンパン
@ -113,6 +118,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 1000,
info: "しおかぜと併結 / アンパンマン列車で運転",
infogram: ""
};
//8600
@ -132,6 +138,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 1000,
info: "しおかぜと併結 / 8600系で運転",
infogram: ""
};
//MEXP
@ -145,6 +152,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/morning.html",
trainNumDistance: null,
info: "8000系で運転",
infogram: ""
};
//8600
case "1091M":
@ -156,6 +164,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/morning.html",
trainNumDistance: null,
info: "8600系で運転",
infogram: ""
};
//三桁いしづち
//8000 アンパン
@ -168,10 +177,21 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 940,
info: "アンパンマン列車で運転",
infogram: ""
};
//8600
case "1043M":
case "1042M":
return {
type: "LTDEXP",
trainName: "いしづち",
trainIcon: "https://storage.haruk.in/s8600_isz.png",
infoUrl:
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 940,
info: "8600系で運転",
infogram: ""
};
case "1046M":
return {
type: "LTDEXP",
@ -181,6 +201,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 940,
info: "8600系で運転",
infogram: ""
};
//南風 2700ーマル
@ -209,6 +230,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/nanpu.html",
trainNumDistance: 30,
info: "2700系で運転",
infogram: ""
};
//2700アンパン
@ -231,6 +253,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/dosan/train.html",
trainNumDistance: 30,
info: "アンパンマン列車で運転",
infogram: ""
};
//うずしお
@ -256,6 +279,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uzushio.html",
trainNumDistance: 3000,
info: "2700系で運転",
infogram: ""
};
//2700 二両編成
@ -277,6 +301,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uzushio.html",
trainNumDistance: 3000,
info: "2700系で運転",
infogram: ""
};
//2600
@ -298,6 +323,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uzushio.html",
trainNumDistance: 3000,
info: "2600系で運転",
infogram: ""
};
@ -377,6 +403,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html",
trainNumDistance: 3100,
info: "",
infogram: ""
};
case "3102M":
case "3101M":
@ -390,6 +417,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html",
trainNumDistance: 3100,
info: "",
infogram: ""
};
//下りサンポート
case "1219M":
@ -400,6 +428,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "",
trainNumDistance: null,
info: " 土曜・休日は多度津-琴平間運休",
infogram: ""
};
case "111M":
@ -419,6 +448,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
case "5109M":
case "5135M":
@ -430,6 +460,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
case "137M":
return {
@ -439,6 +470,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: "土曜・休日運休",
infogram: ""
};
//上りサンポート
case "116M":
@ -449,6 +481,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
case "130M":
@ -466,6 +499,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "",
trainNumDistance: null,
info: "",
infogram: ""
};
case "5118M":
case "5120M":
@ -479,6 +513,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
//サンライズ瀬戸
@ -492,6 +527,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"https://www.jr-odekake.net/train/sunriseseto_izumo/index.html",
trainNumDistance: null,
info: "",
infogram: "ブ"
};
case "8041M": //琴平延長高松迄
case "8031M": //琴平延長高松以降
@ -503,6 +539,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"https://www.jr-odekake.net/train/sunriseseto_izumo/index.html",
trainNumDistance: null,
info: "琴平延長運転日",
infogram: "ブ"
};
//宇和海
@ -540,6 +577,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uwakai.html",
trainNumDistance: 1050,
info: "2000系で運転",
infogram: ""
};
//2000 アンパン込み
case "1058D":
@ -555,6 +593,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 1050,
info: "アンパン列車で運転",
infogram: ""
};
//しまんと
case "2002D":
@ -569,6 +608,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shimanto.html",
trainNumDistance: 2000,
info: "2700系で運転",
infogram: ""
};
//あしずり 2000
@ -588,14 +628,25 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html",
trainNumDistance: 2070,
info: "2000系で運転",
infogram: ""
};
//あしずり 2700
case "2072D":
case "2078D":
case "2084D":
case "2075D":
case "2077D":
return {
type: "LTDEXP",
trainName: "あしずり",
trainIcon: "https://storage.haruk.in/s2700_asi.png",
infoUrl:
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html",
trainNumDistance: 2070,
info: "2700系で運転",
infogram: ""
};
case "2072D":
case "2083D":
return {
type: "LTDEXP",
@ -605,6 +656,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html",
trainNumDistance: 2070,
info: "2700系で運転",
infogram: ""
};
//剣山
@ -623,6 +675,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/tsurugisan.html",
trainNumDistance: 4000,
info: "キハ185系で運転",
infogram: ""
};
//よしのがわトロッコ
@ -636,6 +689,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/event_train/yoshino_torokko.html",
trainNumDistance: null,
info: "",
infogram: ""
};
//岡山高松アントロ
@ -652,6 +706,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"https://www.jr-eki.com/aptrain/naani/torokko_seto/jikoku.html",
trainNumDistance: null,
info: "",
infogram: ""
};
//伊予灘ものがたり
@ -664,6 +719,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://iyonadamonogatari.com/",
trainNumDistance: null,
info: "",
infogram: ""
};
case "8092D":
case "8094D":
@ -674,6 +730,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://iyonadamonogatari.com/",
trainNumDistance: null,
info: "",
infogram: ""
};
//千年ものがたり
@ -686,6 +743,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-shikoku.co.jp/sennenmonogatari/",
trainNumDistance: null,
info: "",
infogram: ""
};
//夜明けものがたり
@ -700,6 +758,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-shikoku.co.jp/yoakenomonogatari/index.html",
trainNumDistance: null,
info: "",
infogram: ""
};
case "9174M":
return {
@ -709,6 +768,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html",
trainNumDistance: null,
info: "WEST LIVE TOUR 2025臨 3/21,22のみ運転",
infogram: ""
};
case "9395D":
return {
@ -718,6 +778,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: "WEST LIVE TOUR 2025臨 3/21,22のみ運転",
infogram: ""
};
default:
if(getJRF(TrainNumber) !== null){
@ -727,7 +788,8 @@ export const customTrainDataDetector = (TrainNumber: string) => {
trainIcon: "https://storage.haruk.in/ef210a.png",
infoUrl: null,
trainNumDistance: null,
info: getJRF(TrainNumber),
info: "",
infogram: "",
};
}
else if (
@ -742,6 +804,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
else if (
new RegExp(/^[1-9]\d\d[DM]$/).test(TrainNumber) ||
@ -755,6 +818,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
} else {
return {
@ -764,6 +828,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
}
}