AllTrainDiagramViewの強化
This commit is contained in:
parent
913a198a93
commit
7216392c9b
@ -44,7 +44,7 @@ export const EachTrainInfoCore = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const { currentTrain } = useCurrentTrain();
|
const { currentTrain } = useCurrentTrain();
|
||||||
const { originalStationList, stationList } = useStationList();
|
const { originalStationList, stationList } = useStationList();
|
||||||
const { allTrainDiagram: trainList, allCustonTrainData } =
|
const { allTrainDiagram: trainList, allCustomTrainData } =
|
||||||
useAllTrainDiagram();
|
useAllTrainDiagram();
|
||||||
const { setTrainInfo } = useTrainMenu();
|
const { setTrainInfo } = useTrainMenu();
|
||||||
const [currentTrainData, setCurrentTrainData] = useState();
|
const [currentTrainData, setCurrentTrainData] = useState();
|
||||||
@ -323,7 +323,7 @@ export const EachTrainInfoCore = ({
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const openTrainInfo = (d) => {
|
const openTrainInfo = (d) => {
|
||||||
const train = customTrainDataDetector(d, allCustonTrainData);
|
const train = customTrainDataDetector(d, allCustomTrainData);
|
||||||
let TrainNumber = "";
|
let TrainNumber = "";
|
||||||
if (train.trainNumDistance != undefined) {
|
if (train.trainNumDistance != undefined) {
|
||||||
const timeInfo =
|
const timeInfo =
|
||||||
|
@ -44,7 +44,7 @@ export const HeaderText: FC<Props> = ({
|
|||||||
const { limited, trainNum } = data;
|
const { limited, trainNum } = data;
|
||||||
|
|
||||||
const { updatePermission } = useTrainMenu();
|
const { updatePermission } = useTrainMenu();
|
||||||
const { allCustonTrainData } = useAllTrainDiagram();
|
const { allCustomTrainData } = useAllTrainDiagram();
|
||||||
const { expoPushToken } = useNotification();
|
const { expoPushToken } = useNotification();
|
||||||
|
|
||||||
// 列車名、種別、フォントの取得
|
// 列車名、種別、フォントの取得
|
||||||
@ -52,7 +52,7 @@ export const HeaderText: FC<Props> = ({
|
|||||||
useMemo(() => {
|
useMemo(() => {
|
||||||
const customTrainData = customTrainDataDetector(
|
const customTrainData = customTrainDataDetector(
|
||||||
trainNum,
|
trainNum,
|
||||||
allCustonTrainData
|
allCustomTrainData
|
||||||
);
|
);
|
||||||
const [type, fontAvailable, isOneMan] = (() => {
|
const [type, fontAvailable, isOneMan] = (() => {
|
||||||
switch (customTrainData.type) {
|
switch (customTrainData.type) {
|
||||||
|
@ -23,12 +23,12 @@ export const TrainIconStatus: FC<Props> = ({ data, navigate, from }) => {
|
|||||||
const [trainIcon, setTrainIcon] = useState(null);
|
const [trainIcon, setTrainIcon] = useState(null);
|
||||||
const [anpanmanStatus, setAnpanmanStatus] = useState<apt>();
|
const [anpanmanStatus, setAnpanmanStatus] = useState<apt>();
|
||||||
const [address, setAddress] = useState("");
|
const [address, setAddress] = useState("");
|
||||||
const { allCustonTrainData } = useAllTrainDiagram();
|
const { allCustomTrainData } = useAllTrainDiagram();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!data.trainNum) return;
|
if (!data.trainNum) return;
|
||||||
const { img, infoUrl } = customTrainDataDetector(
|
const { img, infoUrl } = customTrainDataDetector(
|
||||||
data.trainNum,
|
data.trainNum,
|
||||||
allCustonTrainData
|
allCustomTrainData
|
||||||
);
|
);
|
||||||
if (img) setTrainIcon(img);
|
if (img) setTrainIcon(img);
|
||||||
if (infoUrl) setAddress(infoUrl);
|
if (infoUrl) setAddress(infoUrl);
|
||||||
|
@ -10,6 +10,7 @@ import {
|
|||||||
Keyboard,
|
Keyboard,
|
||||||
ScrollView,
|
ScrollView,
|
||||||
Linking,
|
Linking,
|
||||||
|
Image,
|
||||||
} from "react-native";
|
} from "react-native";
|
||||||
import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram";
|
import { useAllTrainDiagram } from "../stateBox/useAllTrainDiagram";
|
||||||
|
|
||||||
@ -19,9 +20,11 @@ import { SheetManager } from "react-native-actions-sheet";
|
|||||||
import { useNavigation } from "@react-navigation/native";
|
import { useNavigation } from "@react-navigation/native";
|
||||||
import { BigButton } from "./atom/BigButton";
|
import { BigButton } from "./atom/BigButton";
|
||||||
import { Switch } from "react-native-elements";
|
import { Switch } from "react-native-elements";
|
||||||
|
import { migrateTrainName } from "@/lib/eachTrainInfoCoreLib/migrateTrainName";
|
||||||
|
import { OneManText } from "./ActionSheetComponents/EachTrainInfoCore/HeaderTextParts/OneManText";
|
||||||
export default function AllTrainDiagramView() {
|
export default function AllTrainDiagramView() {
|
||||||
const { goBack, navigate } = useNavigation();
|
const { goBack, navigate } = useNavigation();
|
||||||
const { keyList, allTrainDiagram, allCustonTrainData } = useAllTrainDiagram();
|
const { keyList, allTrainDiagram, allCustomTrainData } = useAllTrainDiagram();
|
||||||
const [input, setInput] = useState(""); // 文字入力
|
const [input, setInput] = useState(""); // 文字入力
|
||||||
const [keyBoardVisible, setKeyBoardVisible] = useState(false);
|
const [keyBoardVisible, setKeyBoardVisible] = useState(false);
|
||||||
const [useStationName, setUseStationName] = useState(false);
|
const [useStationName, setUseStationName] = useState(false);
|
||||||
@ -53,7 +56,7 @@ export default function AllTrainDiagramView() {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const openTrainInfo = (d) => {
|
const openTrainInfo = (d) => {
|
||||||
const train = customTrainDataDetector(d, allCustonTrainData);
|
const train = customTrainDataDetector(d, allCustomTrainData);
|
||||||
let TrainNumber = "";
|
let TrainNumber = "";
|
||||||
if (train.trainNumDistance != undefined) {
|
if (train.trainNumDistance != undefined) {
|
||||||
const timeInfo =
|
const timeInfo =
|
||||||
@ -71,6 +74,119 @@ export default function AllTrainDiagramView() {
|
|||||||
payload,
|
payload,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getStringConfig = (type, id) => {
|
||||||
|
switch (type) {
|
||||||
|
case "Normal":
|
||||||
|
return ["普通", true, false];
|
||||||
|
case "OneMan":
|
||||||
|
return ["普通", true, true];
|
||||||
|
case "Rapid":
|
||||||
|
return ["快速", true, false];
|
||||||
|
case "OneManRapid":
|
||||||
|
return ["快速", true, true];
|
||||||
|
case "LTDEXP":
|
||||||
|
return ["特急", true, false];
|
||||||
|
case "NightLTDEXP":
|
||||||
|
return ["特急", true, false];
|
||||||
|
case "SPCL":
|
||||||
|
return ["臨時", true, false];
|
||||||
|
case "SPCL_Normal":
|
||||||
|
return ["臨時", true, false];
|
||||||
|
case "SPCL_Rapid":
|
||||||
|
return ["臨時快速", true, false];
|
||||||
|
case "SPCL_EXP":
|
||||||
|
return ["臨時特急", true, false];
|
||||||
|
case "Freight":
|
||||||
|
return ["貨物", false, false];
|
||||||
|
case "Forwarding":
|
||||||
|
return ["回送", false, false];
|
||||||
|
case "FreightForwarding":
|
||||||
|
return ["単機回送", false, false];
|
||||||
|
case "Other":
|
||||||
|
switch (true) {
|
||||||
|
case !!id.includes("T"):
|
||||||
|
return ["単機回送", false, false];
|
||||||
|
case !!id.includes("R"):
|
||||||
|
case !!id.includes("E"):
|
||||||
|
case !!id.includes("L"):
|
||||||
|
case !!id.includes("A"):
|
||||||
|
case !!id.includes("B"):
|
||||||
|
return ["回送", false, false];
|
||||||
|
case !!id.includes("H"):
|
||||||
|
return ["試運転", false, false];
|
||||||
|
}
|
||||||
|
return ["", false, false];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const Item = ({ id, openTrainInfo }) => {
|
||||||
|
const { img, trainName, type, trainNumDistance, infogram } =
|
||||||
|
customTrainDataDetector(id, allCustomTrainData);
|
||||||
|
|
||||||
|
const [typeString, fontAvailable, isOneMan] = getStringConfig(type, id);
|
||||||
|
const trainNameString = (() => {
|
||||||
|
switch (true) {
|
||||||
|
case trainName !== "":
|
||||||
|
// 特急の場合は、列車名を取得
|
||||||
|
// 列番対称データがある場合はそれから列車番号を取得
|
||||||
|
const distance = trainNumDistance;
|
||||||
|
const number =
|
||||||
|
distance !== null ? ` ${parseInt(id) - distance}号` : "";
|
||||||
|
return trainName + number;
|
||||||
|
case allTrainDiagram[id] === undefined:
|
||||||
|
return "";
|
||||||
|
default:
|
||||||
|
// 行先がある場合は、行先を取得
|
||||||
|
const s = allTrainDiagram[id].split("#");
|
||||||
|
const hoge = s[s.length - 2].split(",")[0];
|
||||||
|
return migrateTrainName(hoge + "行き");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
return (
|
||||||
|
<TouchableOpacity
|
||||||
|
style={{
|
||||||
|
padding: 5,
|
||||||
|
flexDirection: "row",
|
||||||
|
borderColor: "white",
|
||||||
|
borderWidth: 1,
|
||||||
|
margin: 5,
|
||||||
|
borderRadius: 5,
|
||||||
|
alignItems: "center",
|
||||||
|
}}
|
||||||
|
onPress={() => openTrainInfo(id)}
|
||||||
|
>
|
||||||
|
{img && (
|
||||||
|
<Image
|
||||||
|
source={{ uri: img }}
|
||||||
|
style={{ width: 20, height: 20, marginLeft: 10, marginRight: 10 }}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{typeString && (
|
||||||
|
<Text
|
||||||
|
style={{
|
||||||
|
fontSize: 20,
|
||||||
|
color: "white",
|
||||||
|
fontFamily: fontAvailable ? "JR-Nishi" : undefined,
|
||||||
|
fontWeight: !fontAvailable ? "bold" : undefined,
|
||||||
|
marginRight: 5,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{typeString}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
{isOneMan && <OneManText />}
|
||||||
|
{trainNameString && (
|
||||||
|
<Text style={{ fontSize: 20, fontWeight: "bold", color: "white" }}>
|
||||||
|
{trainNameString}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
<View style={{ flex: 1 }} />
|
||||||
|
<Text style={{ fontSize: 20, fontWeight: "bold", color: "white" }}>
|
||||||
|
{id}
|
||||||
|
</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
);
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<View style={{ backgroundColor: "#0099CC", height: "100%" }}>
|
<View style={{ backgroundColor: "#0099CC", height: "100%" }}>
|
||||||
<FlatList
|
<FlatList
|
||||||
@ -101,7 +217,6 @@ export default function AllTrainDiagramView() {
|
|||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
|
|
||||||
keyExtractor={(item) => item}
|
keyExtractor={(item) => item}
|
||||||
//initialNumToRender={100}
|
//initialNumToRender={100}
|
||||||
/>
|
/>
|
||||||
@ -225,25 +340,3 @@ export default function AllTrainDiagramView() {
|
|||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const Item = ({ id, openTrainInfo }) => {
|
|
||||||
return (
|
|
||||||
<TouchableOpacity
|
|
||||||
style={{
|
|
||||||
padding: 5,
|
|
||||||
flexDirection: "row",
|
|
||||||
borderColor: "white",
|
|
||||||
borderWidth: 1,
|
|
||||||
margin: 5,
|
|
||||||
borderRadius: 5,
|
|
||||||
alignItems: "center",
|
|
||||||
}}
|
|
||||||
onPress={() => openTrainInfo(id)}
|
|
||||||
>
|
|
||||||
<View style={{ flex: 1 }} />
|
|
||||||
<Text style={{ fontSize: 25, fontWeight: "bold", color: "white" }}>
|
|
||||||
{id}
|
|
||||||
</Text>
|
|
||||||
<View style={{ flex: 1 }} />
|
|
||||||
</TouchableOpacity>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
export const customTrainDataDetector = (
|
export const customTrainDataDetector = (
|
||||||
TrainNumber: string,
|
TrainNumber: string,
|
||||||
allCustonTrainData?: any[]
|
allCustomTrainData?: any[]
|
||||||
) => {
|
) => {
|
||||||
if (allCustonTrainData && allCustonTrainData.length > 0) {
|
if (allCustomTrainData && allCustomTrainData.length > 0) {
|
||||||
const customTrain = allCustonTrainData.find(
|
const customTrain = allCustomTrainData.find(
|
||||||
(train) => train.TrainNumber === TrainNumber
|
(train) => train.TrainNumber === TrainNumber
|
||||||
);
|
);
|
||||||
if (customTrain) {
|
if (customTrain) {
|
||||||
|
@ -46,7 +46,7 @@ export const EachData: FC<Props> = (props) => {
|
|||||||
} = props;
|
} = props;
|
||||||
const { currentTrain } = useCurrentTrain();
|
const { currentTrain } = useCurrentTrain();
|
||||||
const { stationList } = useStationList();
|
const { stationList } = useStationList();
|
||||||
const { allCustonTrainData } = useAllTrainDiagram();
|
const { allCustomTrainData } = useAllTrainDiagram();
|
||||||
const openTrainInfo = (d: {
|
const openTrainInfo = (d: {
|
||||||
train: string;
|
train: string;
|
||||||
lastStation: string;
|
lastStation: string;
|
||||||
@ -78,7 +78,7 @@ export const EachData: FC<Props> = (props) => {
|
|||||||
const getTrainDataFromCurrentTrain = (trainNum: string) => {
|
const getTrainDataFromCurrentTrain = (trainNum: string) => {
|
||||||
const customTrainData = customTrainDataDetector(
|
const customTrainData = customTrainDataDetector(
|
||||||
d.train,
|
d.train,
|
||||||
allCustonTrainData
|
allCustomTrainData
|
||||||
);
|
);
|
||||||
switch (customTrainData.type) {
|
switch (customTrainData.type) {
|
||||||
case "Normal":
|
case "Normal":
|
||||||
|
@ -5,7 +5,7 @@ import React, { createContext, useContext, useEffect, useState } from "react";
|
|||||||
const initialState = {
|
const initialState = {
|
||||||
allTrainDiagram: undefined,
|
allTrainDiagram: undefined,
|
||||||
setAllTrainDiagram: () => {},
|
setAllTrainDiagram: () => {},
|
||||||
allCustonTrainData: [],
|
allCustomTrainData: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
const AllTrainDiagramContext = createContext(initialState);
|
const AllTrainDiagramContext = createContext(initialState);
|
||||||
@ -14,7 +14,7 @@ export const useAllTrainDiagram = () => useContext(AllTrainDiagramContext);
|
|||||||
|
|
||||||
export const AllTrainDiagramProvider = ({ children }) => {
|
export const AllTrainDiagramProvider = ({ children }) => {
|
||||||
const [allTrainDiagram, setAllTrainDiagram] = useState(trainList);
|
const [allTrainDiagram, setAllTrainDiagram] = useState(trainList);
|
||||||
const [allCustonTrainData, setAllCustonTrainData] = useState([]); // カスタム列車データ
|
const [allCustomTrainData, setAllCustomTrainData] = useState([]); // カスタム列車データ
|
||||||
const [keyList, setKeyList] = useState(); // 第二要素
|
const [keyList, setKeyList] = useState(); // 第二要素
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (allTrainDiagram && Object.keys(allTrainDiagram).length > 0)
|
if (allTrainDiagram && Object.keys(allTrainDiagram).length > 0)
|
||||||
@ -54,7 +54,7 @@ export const AllTrainDiagramProvider = ({ children }) => {
|
|||||||
fetch("https://n8n.haruk.in/webhook/jr-shikoku-position-custom-datalist")
|
fetch("https://n8n.haruk.in/webhook/jr-shikoku-position-custom-datalist")
|
||||||
.then((res) => res.json())
|
.then((res) => res.json())
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
setAllCustonTrainData(res[0].data);
|
setAllCustomTrainData(res[0].data);
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
alert("カスタム列車データの取得に失敗しました。");
|
alert("カスタム列車データの取得に失敗しました。");
|
||||||
@ -72,7 +72,7 @@ export const AllTrainDiagramProvider = ({ children }) => {
|
|||||||
value={{
|
value={{
|
||||||
allTrainDiagram,
|
allTrainDiagram,
|
||||||
setAllTrainDiagram,
|
setAllTrainDiagram,
|
||||||
allCustonTrainData,
|
allCustomTrainData,
|
||||||
keyList,
|
keyList,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
Loading…
Reference in New Issue
Block a user