フォント実装、臨時列車のフィルタリング機能強化

This commit is contained in:
harukin-expo-dev-env
2025-09-19 14:15:45 +00:00
parent 1b26afb37b
commit 8ddf3a3e8d
5 changed files with 84 additions and 34 deletions

View File

@@ -28,6 +28,7 @@ export function AppContainer() {
"JR-Nishi": require("./assets/fonts/jr-nishi.otf"), "JR-Nishi": require("./assets/fonts/jr-nishi.otf"),
Zou: require("./assets/fonts/DelaGothicOne-Regular.ttf"), Zou: require("./assets/fonts/DelaGothicOne-Regular.ttf"),
"JNR-font": require("./assets/fonts/JNRfont_pict.ttf"), "JNR-font": require("./assets/fonts/JNRfont_pict.ttf"),
"DiaPro": require("./assets/fonts/DiaPro-Regular.otf"),
}); });
return ( return (
<NavigationContainer ref={navigationRef}> <NavigationContainer ref={navigationRef}>

Binary file not shown.

View File

@@ -1,17 +1,17 @@
import { FC } from "react"; import { FC } from "react";
import { ListViewItem } from "@/components/StationDiagram/ListViewItem"; import { ListViewItem } from "@/components/StationDiagram/ListViewItem";
import { View, Text, ScrollView } from "react-native"; import { View, Text, ScrollView } from "react-native";
type hoge = {
trainNumber: string;
array: string;
name: string;
timeType: string;
time: string;
};
export const ListView: FC<{ export const ListView: FC<{
data: { data: hoge[];
trainNumber: string;
array: string;
name: string;
type: string;
time: string;
}[];
}> = ({ data }) => { }> = ({ data }) => {
const groupedData = {}; const groupedData: Record<string, hoge[]> = {};
const groupKeys = []; const groupKeys = [];
data.forEach((item) => { data.forEach((item) => {
const hour = item.time.split(":")[0]; const hour = item.time.split(":")[0];

View File

@@ -11,13 +11,16 @@ import { useNavigation } from "@react-navigation/native";
import { lineList } from "@/lib/getStationList"; import { lineList } from "@/lib/getStationList";
import { useStationList } from "@/stateBox/useStationList"; import { useStationList } from "@/stateBox/useStationList";
import { CustomTrainData, trainTypeID } from "@/lib/CommonTypes"; import { CustomTrainData, trainTypeID } from "@/lib/CommonTypes";
import { StationNumberMaker } from "../駅名表/StationNumberMaker";
import { getStationID } from "@/lib/eachTrainInfoCoreLib/getStationData";
import lineColorList from "@/assets/originData/lineColorList";
export const ListViewItem: FC<{ export const ListViewItem: FC<{
d: { d: {
trainNumber: string; trainNumber: string;
array: string; array: string;
name: string; name: string;
type: string; timeType: string;
time: string; time: string;
}; };
}> = ({ d }) => { }> = ({ d }) => {
@@ -33,9 +36,13 @@ export const ListViewItem: FC<{
}); });
} }
}, []); }, []);
const { color, name, data } = getTrainType({ type: trainData?.type, whiteMode: true }); const { color, name, data } = getTrainType({
const { originalStationList } = useStationList(); type: trainData?.type,
whiteMode: true,
});
// 列車名、種別、フォントの取得 // 列車名、種別、フォントの取得
const { getStationDataFromName, stationList, originalStationList } =
useStationList();
const [ const [
typeString, typeString,
trainName, trainName,
@@ -45,7 +52,7 @@ export const ListViewItem: FC<{
isEdit, isEdit,
uwasa, uwasa,
vehicleFormation, vehicleFormation,
trainInfoUrl, trainInfoUrl,lineColor
] = useMemo(() => { ] = useMemo(() => {
const { const {
type, type,
@@ -62,6 +69,11 @@ export const ListViewItem: FC<{
d.trainNumber d.trainNumber
); );
const trainData = d.array.split("#").filter((d) => d !== ""); const trainData = d.array.split("#").filter((d) => d !== "");
const station = getStationDataFromName(trainData[trainData.length - 1].split(",")[0]);
const lineColor =
station.length > 0
? lineColorList[station[0]?.StationNumber.slice(0, 1)]
: "black";
switch (true) { switch (true) {
case trainData[trainData.length - 1] === undefined: case trainData[trainData.length - 1] === undefined:
return [ return [
@@ -73,7 +85,7 @@ export const ListViewItem: FC<{
isEdit, isEdit,
uwasa, uwasa,
vehicleFormation, vehicleFormation,
trainInfoUrl, trainInfoUrl,lineColor
]; ];
default: default:
// 行先がある場合は、行先を取得 // 行先がある場合は、行先を取得
@@ -88,7 +100,7 @@ export const ListViewItem: FC<{
isEdit, isEdit,
uwasa, uwasa,
vehicleFormation, vehicleFormation,
trainInfoUrl, trainInfoUrl,lineColor
]; ];
} }
}, [d.array]); }, [d.array]);
@@ -118,7 +130,7 @@ export const ListViewItem: FC<{
//@ts-ignore //@ts-ignore
useShow: () => SheetManager.show("StationDetailView", { payload }), useShow: () => SheetManager.show("StationDetailView", { payload }),
onExit: () => SheetManager.hide("StationDetailView"), onExit: () => SheetManager.hide("StationDetailView"),
};//@ts-ignore }; //@ts-ignore
setTimeout(() => SheetManager.show("StationDetailView", { payload }), 50); setTimeout(() => SheetManager.show("StationDetailView", { payload }), 50);
} else { } else {
SheetManager.hide("StationDetailView"); SheetManager.hide("StationDetailView");
@@ -159,12 +171,14 @@ export const ListViewItem: FC<{
borderStyle: "solid", borderStyle: "solid",
borderColor: "darkgray", borderColor: "darkgray",
padding: 10, padding: 10,
opacity: d.type.includes("通") ? 0.5 : 1, opacity: d.timeType?.includes("通") ? 0.5 : 1,
}} }}
onPress={() => openTrainInfo()} onPress={() => openTrainInfo()}
> >
<View style={{ position: "relative" }}> <View style={{ position: "relative", flex: 3 }}>
<Text style={{ fontSize: 30 }}>{formattedTime}</Text> <Text style={{ fontSize: 30, fontFamily: "DiaPro" }}>
{formattedTime}
</Text>
<Text <Text
style={{ style={{
fontSize: 10, fontSize: 10,
@@ -174,10 +188,10 @@ export const ListViewItem: FC<{
fontWeight: "bold", fontWeight: "bold",
}} }}
> >
{d.type} {d.timeType}
</Text> </Text>
</View> </View>
<View style={{ flex: 1, flexDirection: "column" }}> <View style={{ flex: 10, flexDirection: "column" }}>
<View style={{ flexDirection: "row" }}> <View style={{ flexDirection: "row" }}>
<Text <Text
style={{ style={{
@@ -214,16 +228,19 @@ export const ListViewItem: FC<{
{trainData?.TrainNumber} {trainData?.TrainNumber}
</Text> </Text>
</View> </View>
<Text <View style={{ flexDirection: "row", alignItems: "center", flex: 1 }}>
style={{ <Text
fontSize: 15, style={{
flex: 1, fontSize: 15,
paddingHorizontal: 10, flex: 1,
fontWeight: "bold", paddingHorizontal: 10,
}} fontWeight: "bold",
> color: lineColor
{trainName} }}
</Text> >
{trainName}
</Text>
</View>
</View> </View>
</TouchableOpacity> </TouchableOpacity>
); );

View File

@@ -55,6 +55,7 @@ export const StationDiagramView: FC<props> = ({ route }) => {
const { navigate, addListener, goBack, canGoBack } = useNavigation(); const { navigate, addListener, goBack, canGoBack } = useNavigation();
const [keyBoardVisible, setKeyBoardVisible] = useState(false); const [keyBoardVisible, setKeyBoardVisible] = useState(false);
const [input, setInput] = useState(""); const [input, setInput] = useState("");
const [displayMode, setDisplayMode] = useState<"list" | "grid">("list");
const [selectedTypeList, setSelectedTypeList] = useState<trainTypeID[]>([ const [selectedTypeList, setSelectedTypeList] = useState<trainTypeID[]>([
"Normal", "Normal",
"OneMan", "OneMan",
@@ -128,6 +129,9 @@ export const StationDiagramView: FC<props> = ({ route }) => {
// //条件によってフィルタリング // //条件によってフィルタリング
if (!threw && timeType && timeType.includes("通")) return; if (!threw && timeType && timeType.includes("通")) return;
if (!showLastStop && timeType && timeType.includes("着")) return; if (!showLastStop && timeType && timeType.includes("着")) return;
if(selectedTypeList.findIndex((item) => item === "SPCL") === -1){
if(d.match(/9\d\d\d[D,M,S]/)) return;
}
if ( if (
selectedTypeList.length > 0 && selectedTypeList.length > 0 &&
selectedTypeList.findIndex((item) => item === type) === -1 selectedTypeList.findIndex((item) => item === type) === -1
@@ -194,8 +198,11 @@ export const StationDiagramView: FC<props> = ({ route }) => {
> >
{currentStation[0].Station_JP} {currentStation[0].Station_JP}
</Text> </Text>
{/* <ListView data={currentStationDiagram} /> */} {displayMode === "list" ? (
<ExGridView data={currentStationDiagram} /> <ListView data={currentStationDiagram} />
) : (
<ExGridView data={currentStationDiagram} />
)}
{/* <Text {/* <Text
style={{ style={{
backgroundColor: "white", backgroundColor: "white",
@@ -361,6 +368,31 @@ export const StationDiagramView: FC<props> = ({ route }) => {
</Text> </Text>
</TouchableOpacity> </TouchableOpacity>
)} )}
<TouchableOpacity
style={{
alignItems: "center",
marginHorizontal: 5,
backgroundColor: "#ffffff00",
alignSelf: "center",
borderColor: "white",
borderWidth: 1,
borderRadius: 100,
}}
onPress={() => {
setDisplayMode(displayMode === "list" ? "grid" : "list");
}}
>
<Text
style={{
color: "white",
fontSize: 14,
margin: 5,
}}
>
{displayMode === "list" ? "横並びモード" : "リストモード"}
</Text>
</TouchableOpacity>
</ScrollView> </ScrollView>
<View <View
style={{ style={{