LEDから列車視点版への移動が可能に

This commit is contained in:
harukin-DeskMini 2023-01-28 08:31:39 +09:00
parent a5523d61c3
commit 29963ab876
5 changed files with 74 additions and 26 deletions

12
App.js
View File

@ -110,6 +110,18 @@ function menuPage() {
}} }}
/> />
<Stack.Screen name="setting" component={Setting} options={optionData} /> <Stack.Screen name="setting" component={Setting} options={optionData} />
<Stack.Screen
name="trainbase"
component={trainbase}
options={{
...TransitionPresets.ModalPresentationIOS,
cardOverlayEnabled: true,
headerShown: false,
gestureEnabled: true,
headerTransparent: true,
gestureResponseDistance: { vertical: 300 },
}}
/>
</Stack.Navigator> </Stack.Navigator>
); );
} }

View File

@ -109,7 +109,7 @@ export default function Apps(props) {
const onMessage = (event) => { const onMessage = (event) => {
if (!event.nativeEvent.data.includes("PopUpMenu")) { if (!event.nativeEvent.data.includes("PopUpMenu")) {
navigate("trainbase", { info: event.nativeEvent.data }); navigate("trainbase", { info: event.nativeEvent.data, from: "Train" });
return; return;
} }
if (!originalStationList) { if (!originalStationList) {

View File

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { View, Text } from "react-native"; import { View, Text, TouchableOpacity } from "react-native";
import { Switch } from "react-native-elements"; import { Switch } from "react-native-elements";
import { widthPercentageToDP as wp } from "react-native-responsive-screen"; import { widthPercentageToDP as wp } from "react-native-responsive-screen";
import { customTrainDataDetector } from "../custom-train-data"; import { customTrainDataDetector } from "../custom-train-data";
@ -92,7 +92,6 @@ export default function LED_vision(props) {
returnData[key] = trainDiagram[key]; returnData[key] = trainDiagram[key];
} }
}); });
console.log(returnData);
setStationDiagram(returnData); setStationDiagram(returnData);
}, [trainDiagram, props.station]); }, [trainDiagram, props.station]);
@ -132,7 +131,6 @@ export default function LED_vision(props) {
}); });
return { train: d, time: a.time, lastStation: a.lastStation }; return { train: d, time: a.time, lastStation: a.lastStation };
}); });
console.log(returnData);
return returnData.sort((a, b) => { return returnData.sort((a, b) => {
switch (true) { switch (true) {
case parseInt(a.time.split(":")[0]) < parseInt(b.time.split(":")[0]): case parseInt(a.time.split(":")[0]) < parseInt(b.time.split(":")[0]):
@ -152,7 +150,6 @@ export default function LED_vision(props) {
useEffect(() => { useEffect(() => {
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット //現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
if (objectIsEmpty(stationDiagram)) return () => {}; if (objectIsEmpty(stationDiagram)) return () => {};
console.log(stationDiagram);
const getTimeData = getTime(stationDiagram, props.station); const getTimeData = getTime(stationDiagram, props.station);
setTrainTimeAndNumber(getTimeData); setTrainTimeAndNumber(getTimeData);
}, [stationDiagram]); }, [stationDiagram]);
@ -173,18 +170,7 @@ export default function LED_vision(props) {
return false; return false;
}; };
const getTrainType = (data) => {
switch (data) {
case "Rapid":
return { color: "aqua", name: "快速" };
case "LTDEXP":
return { color: "red", name: "特急" };
case "NightLTDEXP":
return { color: "red", name: "寝台特急" };
case "Normal":
return { color: "white", name: "普通列車" };
}
};
const [selectedTrain, setSelectedTrain] = useState([]); const [selectedTrain, setSelectedTrain] = useState([]);
useEffect(() => { useEffect(() => {
if (!trainTimeAndNumber) return () => {}; if (!trainTimeAndNumber) return () => {};
@ -194,7 +180,7 @@ export default function LED_vision(props) {
.filter(timeFiltering) .filter(timeFiltering)
.filter((d) => !!finalSwitch || d.lastStation != "当駅止"); .filter((d) => !!finalSwitch || d.lastStation != "当駅止");
setSelectedTrain(data); setSelectedTrain(data);
}, [trainTimeAndNumber, currentTrain]); }, [trainTimeAndNumber, currentTrain, finalSwitch]);
return ( return (
<View <View
style={{ style={{
@ -213,8 +199,8 @@ export default function LED_vision(props) {
trainDescriptionSwitch={trainDescriptionSwitch} trainDescriptionSwitch={trainDescriptionSwitch}
props={props} props={props}
currentTrain={currentTrain} currentTrain={currentTrain}
getTrainType={getTrainType}
customTrainDataDetector={customTrainDataDetector} customTrainDataDetector={customTrainDataDetector}
navigate={props.navigate}
/> />
))} ))}
<Footer <Footer
@ -310,13 +296,25 @@ const EachData = ({
trainDescriptionSwitch, trainDescriptionSwitch,
props, props,
currentTrain, currentTrain,
getTrainType,
customTrainDataDetector, customTrainDataDetector,
navigate,
}) => { }) => {
const getTrainType = (data) => {
switch (data) {
case "Rapid":
return { color: "aqua", name: "快速" };
case "LTDEXP":
return { color: "red", name: "特急" };
case "NightLTDEXP":
return { color: "red", name: "寝台特急" };
case "Normal":
return { color: "white", name: "普通列車" };
}
};
const train = customTrainDataDetector(d.train); const train = customTrainDataDetector(d.train);
return ( return (
<> <>
<View <TouchableOpacity
style={{ style={{
alignContent: "center", alignContent: "center",
alignItems: "center", alignItems: "center",
@ -326,6 +324,14 @@ const EachData = ({
backgroundColor: "#000", backgroundColor: "#000",
flexDirection: "row", flexDirection: "row",
}} }}
onPress={() => {
if (train.type != "Normal") {
navigate("trainbase", {
info: "train.html?tn=" + d.train,
from: "LED",
});
}
}}
> >
<TrainName <TrainName
train={train} train={train}
@ -336,7 +342,7 @@ const EachData = ({
<LastStation d={d} /> <LastStation d={d} />
<DependTime d={d} /> <DependTime d={d} />
<StatusAndDelay currentTrain={currentTrain} d={d} props={props} /> <StatusAndDelay currentTrain={currentTrain} d={d} props={props} />
</View> </TouchableOpacity>
{trainDescriptionSwitch && !!train.info && <Description train={train} />} {trainDescriptionSwitch && !!train.info && <Description train={train} />}
</> </>
); );

View File

@ -160,7 +160,7 @@ export default function Menu(props) {
originalStationList={originalStationList} originalStationList={originalStationList}
oP={StationBoardAcSR.current?.setModalVisible} oP={StationBoardAcSR.current?.setModalVisible}
/> />
<LED_vision station={currentStation[0]} /> <LED_vision station={currentStation[0]} navigate={navigate} />
</> </>
)} )}
<JRSTraInfoBox <JRSTraInfoBox

View File

@ -1,9 +1,18 @@
import React, { Component, useRef } from "react"; import React, { Component, useRef } from "react";
import { StatusBar, Platform, View } from "react-native"; import {
StatusBar,
Platform,
View,
TouchableOpacity,
Text,
} from "react-native";
import { WebView } from "react-native-webview"; import { WebView } from "react-native-webview";
import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
export default function TrainBase({ route }) { export default function TrainBase({ route, navigation }) {
const { info } = route.params; const { info, from } = route.params;
const { navigate } = navigation;
console.log(info);
const webview = useRef(); const webview = useRef();
const jss = `document.getElementById('Footer').style.display = 'none'; const jss = `document.getElementById('Footer').style.display = 'none';
${ ${
@ -28,6 +37,27 @@ export default function TrainBase({ route }) {
setSupportMultipleWindows={false} setSupportMultipleWindows={false}
onMessage={(event) => {}} onMessage={(event) => {}}
/> />
{from == "LED" && (
<TouchableOpacity
style={{
padding: 10,
flexDirection: "row",
borderColor: "black",
borderWidth: 1,
margin: 10,
borderRadius: 5,
alignItems: "center",
}}
onPress={() => navigate("menu")}
>
<View style={{ flex: 1 }} />
<MaterialCommunityIcons name="close" color="black" size={30} />
<Text style={{ fontSize: 25, fontWeight: "bold", color: "black" }}>
閉じる
</Text>
<View style={{ flex: 1 }} />
</TouchableOpacity>
)}
</View> </View>
); );
} }