Merge commit '6ad46c0e632c6fd1448cf743b8eadab2e5d8b216' into develop

This commit is contained in:
harukin-expo-dev-env 2025-06-10 16:19:52 +00:00
commit 0ce2b70669
2 changed files with 68 additions and 96 deletions

View File

@ -2,14 +2,10 @@ import React, { useEffect, useState } from "react";
import Icon from "react-native-vector-icons/Entypo"; import Icon from "react-native-vector-icons/Entypo";
import { View, Text, TouchableOpacity, LayoutAnimation } from "react-native"; import { View, Text, TouchableOpacity, LayoutAnimation } from "react-native";
import lineColorList from "../../../assets/originData/lineColorList"; import lineColorList from "../../../assets/originData/lineColorList";
import Ionicons from "react-native-vector-icons/Ionicons";
import { AS } from "../../../storageControl"; import { AS } from "../../../storageControl";
export const FavoriteSettingsItem = ({ export const FavoriteSettingsItem = ({ currentStation }) => {
currentStation,
setFavoriteStation,
index,
array,
}) => {
const lineIDs = []; const lineIDs = [];
const EachIDs = []; const EachIDs = [];
console.log(currentStation); console.log(currentStation);
@ -19,27 +15,6 @@ export const FavoriteSettingsItem = ({
lineIDs.push(textArray.filter((s) => "A" < s && s < "Z").join("")); lineIDs.push(textArray.filter((s) => "A" < s && s < "Z").join(""));
EachIDs.push(textArray.filter((s) => "0" <= s && s <= "9").join("")); EachIDs.push(textArray.filter((s) => "0" <= s && s <= "9").join(""));
}); });
const [head, setHead] = useState(false);
const [tail, setTail] = useState(false);
useEffect(() => {
switch (true) {
case array.length == 1:
setHead(true);
setTail(true);
break;
case index == 0:
setHead(true);
setTail(false);
break;
case index == array.length - 1:
setHead(false);
setTail(true);
break;
default:
setHead(false);
setTail(false);
}
}, [array]);
return ( return (
<View style={{ flexDirection: "row", backgroundColor: "white" }}> <View style={{ flexDirection: "row", backgroundColor: "white" }}>
@ -47,7 +22,7 @@ export const FavoriteSettingsItem = ({
style={{ style={{
width: 35, width: 35,
position: "relative", position: "relative",
marginHorizontal: 15, marginHorizontal: 10,
flexDirection: "row", flexDirection: "row",
height: "101%", height: "101%",
}} }}
@ -91,43 +66,15 @@ export const FavoriteSettingsItem = ({
> >
<Text style={{ fontSize: 20 }}>{currentStation[0].Station_JP}</Text> <Text style={{ fontSize: 20 }}>{currentStation[0].Station_JP}</Text>
<View style={{ flex: 1 }} /> <View style={{ flex: 1 }} />
<TouchableOpacity </View>
style={{ marginHorizontal: 10, marginVertical: 4, width: 30 }} <View
onPress={() => { style={{
console.log("up"); alignContent: "center",
LayoutAnimation.configureNext( alignItems: "center",
LayoutAnimation.Presets.easeInEaseOut alignSelf: "center",
); }}
const removedStation = [...array].filter((d, i) => { >
if (i == index) return false; <Ionicons name={"reorder-two"} size={20} style={{ marginHorizontal: 10 }} />
return true;
});
removedStation.splice(index - 1, 0, currentStation);
setFavoriteStation(removedStation);
AS.setItem("favoriteStation", JSON.stringify(removedStation));
}}
>
{head ? null : <Icon name="chevron-up" size={26} />}
</TouchableOpacity>
<TouchableOpacity
style={{ marginHorizontal: 10, marginVertical: 4, width: 30 }}
onPress={() => {
console.log("down");
LayoutAnimation.configureNext(
LayoutAnimation.Presets.easeInEaseOut
);
const removedStation = [...array].filter((d, i) => {
if (i == index) return false;
return true;
});
removedStation.splice(index + 1, 0, currentStation);
setFavoriteStation(removedStation);
AS.setItem("favoriteStation", JSON.stringify(removedStation));
}}
>
{tail ? null : <Icon name="chevron-down" size={26} />}
</TouchableOpacity>
</View> </View>
</View> </View>
); );

View File

@ -1,31 +1,57 @@
import React from "react"; import React, { useCallback } from "react";
import { View, Text, TouchableOpacity, ScrollView } from "react-native"; import { View, Text, StyleSheet } from "react-native";
import Animated, { useAnimatedRef } from "react-native-reanimated";
import { useNavigation } from "@react-navigation/native"; import { useNavigation } from "@react-navigation/native";
import Sortable from "react-native-sortables";
import { useFavoriteStation } from "../../stateBox/useFavoriteStation"; import { useFavoriteStation } from "../../stateBox/useFavoriteStation";
import { CheckBox } from "react-native-elements";
import { FavoriteSettingsItem } from "./FavoliteSettings/FavoiliteSettingsItem"; import { FavoriteSettingsItem } from "./FavoliteSettings/FavoiliteSettingsItem";
import { SheetHeaderItem } from "@/components/atom/SheetHeaderItem"; import { SheetHeaderItem } from "@/components/atom/SheetHeaderItem";
export const FavoriteSettings = () => { export const FavoriteSettings = () => {
const { favoriteStation, setFavoriteStation } = useFavoriteStation(); const { favoriteStation, setFavoriteStation } = useFavoriteStation();
const scrollableRef = useAnimatedRef();
const { goBack } = useNavigation(); const { goBack } = useNavigation();
const renderItem = useCallback((props) => {
const { item, index } = props;
return (
<FavoriteSettingsItem
currentStation={item}
key={item[0].StationNumber}
/>
);
}, []);
return ( return (
<View style={{ height: "100%", backgroundColor: "#0099CC" }}> <View style={{ height: "100%", backgroundColor: "#0099CC" }}>
<SheetHeaderItem <SheetHeaderItem
title="お気に入り設定" title="お気に入り設定"
LeftItem={{ title: " 設定", onPress: goBack }} LeftItem={{ title: " 設定", onPress: goBack }}
/> />
<ScrollView style={{ flex: 1, backgroundColor: "white" }}> <Animated.ScrollView
{favoriteStation.map((currentStation, index, array) => ( style={{ flex: 1, backgroundColor: "white" }}
<FavoriteSettingsItem contentContainerStyle={styles.contentContainer}
currentStation={currentStation} ref={scrollableRef}
setFavoriteStation={setFavoriteStation} >
index={index} <Sortable.Grid
array={array} columnGap={0}
key={currentStation[0].StationNumber} columns={1}
/> data={favoriteStation}
))} renderItem={renderItem}
</ScrollView> rowGap={0}
scrollableRef={scrollableRef} // required for auto scroll
snapOffsetY={0}
onDragEnd={(newOrder) => {
const newFavoriteStation = newOrder.indexToKey.map((item,index,array)=>{
let returnData = [];
favoriteStation.forEach((station) => {
if (station[0].StationNumber === item) returnData = station;
});
return returnData;
});
setFavoriteStation(newFavoriteStation);
}}
keyExtractor={(item) => item[0].StationNumber}
/>
</Animated.ScrollView>
<Text <Text
style={{ style={{
backgroundColor: "white", backgroundColor: "white",
@ -39,20 +65,19 @@ export const FavoriteSettings = () => {
); );
}; };
const SimpleSwitch = ({ bool, setBool, str }) => ( const styles = StyleSheet.create({
<View style={{ flexDirection: "row" }}> card: {
<CheckBox alignItems: "center",
checked={bool == "true" ? true : false} backgroundColor: "#36877F",
checkedColor="red" borderRadius: 10,
onPress={() => setBool(bool == "true" ? "false" : "true")} height: 100,
containerStyle={{ justifyContent: "center",
flex: 1, },
backgroundColor: "#00000000", contentContainer: {
borderColor: "white", padding: 10,
alignContent: "center", },
}} text: {
textStyle={{ fontSize: 20, fontWeight: "normal" }} color: "white",
title={str} fontWeight: "bold",
/> },
</View> });
);