85 lines
2.9 KiB
JavaScript
85 lines
2.9 KiB
JavaScript
import React, { useCallback } from "react";
|
||
import { View, Text, StyleSheet } from "react-native";
|
||
import Animated, { useAnimatedRef } from "react-native-reanimated";
|
||
import { useNavigation } from "@react-navigation/native";
|
||
import Sortable from "react-native-sortables";
|
||
import { useFavoriteStation } from "../../stateBox/useFavoriteStation";
|
||
import { FavoriteSettingsItem } from "./FavoliteSettings/FavoiliteSettingsItem";
|
||
import { SheetHeaderItem } from "@/components/atom/SheetHeaderItem";
|
||
import { AS } from "@/storageControl";
|
||
|
||
export const FavoriteSettings = () => {
|
||
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
|
||
const scrollableRef = useAnimatedRef();
|
||
const { goBack } = useNavigation();
|
||
const renderItem = useCallback((props) => {
|
||
const { item, index } = props;
|
||
return (
|
||
<FavoriteSettingsItem currentStation={item} key={item[0].StationNumber} />
|
||
);
|
||
}, []);
|
||
return (
|
||
<View style={{ height: "100%", backgroundColor: "#0099CC" }}>
|
||
<SheetHeaderItem
|
||
title="お気に入り設定"
|
||
LeftItem={{ title: "< 設定", onPress: goBack }}
|
||
/>
|
||
<Animated.ScrollView
|
||
style={{ flex: 1, backgroundColor: "white" }}
|
||
contentContainerStyle={styles.contentContainer}
|
||
ref={scrollableRef}
|
||
>
|
||
<Sortable.Grid
|
||
columnGap={0}
|
||
columns={1}
|
||
data={favoriteStation}
|
||
renderItem={renderItem}
|
||
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);
|
||
AS.setItem("favoriteStation", JSON.stringify(newFavoriteStation));
|
||
}}
|
||
keyExtractor={(item) => item[0].StationNumber}
|
||
/>
|
||
</Animated.ScrollView>
|
||
<Text
|
||
style={{
|
||
backgroundColor: "white",
|
||
borderWidth: 1,
|
||
borderStyle: "solid",
|
||
}}
|
||
>
|
||
お気に入り登録した駅を並び替えることができます。一番上に置いた駅が位置情報の起動時に表示されます。(移動不可能な駅の場合エラーが発生します。任意指定が可能になる機能を開発予定です。)
|
||
</Text>
|
||
</View>
|
||
);
|
||
};
|
||
|
||
const styles = StyleSheet.create({
|
||
card: {
|
||
alignItems: "center",
|
||
backgroundColor: "#36877F",
|
||
borderRadius: 10,
|
||
height: 100,
|
||
justifyContent: "center",
|
||
},
|
||
contentContainer: {
|
||
padding: 10,
|
||
},
|
||
text: {
|
||
color: "white",
|
||
fontWeight: "bold",
|
||
},
|
||
});
|