Cập nhật thứ tự cảnh báo trong tab cảnh báo, sửa lại reload danh sách chuyến đi ( vuốt lên )

This commit is contained in:
2025-12-30 14:52:46 +07:00
parent bf261e70e4
commit 499bd76f5e
2 changed files with 14 additions and 35 deletions

View File

@@ -41,6 +41,7 @@ export default function diary() {
const [allTrips, setAllTrips] = useState<any[]>([]); const [allTrips, setAllTrips] = useState<any[]>([]);
const [isLoadingMore, setIsLoadingMore] = useState(false); const [isLoadingMore, setIsLoadingMore] = useState(false);
const [hasMore, setHasMore] = useState(true); const [hasMore, setHasMore] = useState(true);
const [refreshing, setRefreshing] = useState(false);
const isInitialLoad = useRef(true); const isInitialLoad = useRef(true);
const flatListRef = useRef<FlatList>(null); const flatListRef = useRef<FlatList>(null);
@@ -330,8 +331,9 @@ export default function diary() {
}, 100); }, 100);
}, [payloadTrips, getTripsList]); }, [payloadTrips, getTripsList]);
// Handle reload - gọi lại API // Handle refresh - pull-to-refresh
const handleReload = useCallback(() => { const handleRefresh = useCallback(() => {
setRefreshing(true);
isInitialLoad.current = true; isInitialLoad.current = true;
setAllTrips([]); setAllTrips([]);
setHasMore(true); setHasMore(true);
@@ -340,12 +342,9 @@ export default function diary() {
offset: 0, offset: 0,
}; };
setPayloadTrips(resetPayload); setPayloadTrips(resetPayload);
getTripsList(resetPayload); getTripsList(resetPayload).finally(() => {
setRefreshing(false);
// Scroll FlatList lên đầu });
setTimeout(() => {
flatListRef.current?.scrollToOffset({ offset: 0, animated: true });
}, 100);
}, [payloadTrips, getTripsList]); }, [payloadTrips, getTripsList]);
// Dynamic styles based on theme // Dynamic styles based on theme
@@ -436,21 +435,6 @@ export default function diary() {
<Text style={[styles.titleText, themedStyles.titleText]}> <Text style={[styles.titleText, themedStyles.titleText]}>
{t("diary.title")} {t("diary.title")}
</Text> </Text>
<TouchableOpacity
style={[
styles.reloadButton,
{ backgroundColor: colors.backgroundSecondary },
]}
onPress={handleReload}
activeOpacity={0.7}
disabled={loading}
>
{loading && allTrips.length === 0 ? (
<ActivityIndicator size="small" color={colors.primary} />
) : (
<Ionicons name="reload" size={20} color={colors.primary} />
)}
</TouchableOpacity>
</View> </View>
{/* Filter & Add Button Row */} {/* Filter & Add Button Row */}
@@ -489,6 +473,8 @@ export default function diary() {
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
onEndReached={handleLoadMore} onEndReached={handleLoadMore}
onEndReachedThreshold={0.5} onEndReachedThreshold={0.5}
refreshing={refreshing}
onRefresh={handleRefresh}
ListFooterComponent={renderFooter} ListFooterComponent={renderFooter}
ListEmptyComponent={renderEmpty} ListEmptyComponent={renderEmpty}
removeClippedSubviews={true} removeClippedSubviews={true}
@@ -544,13 +530,6 @@ const styles = StyleSheet.create({
alignItems: "center", alignItems: "center",
marginBottom: 10, marginBottom: 10,
}, },
reloadButton: {
width: 36,
height: 36,
borderRadius: 18,
justifyContent: "center",
alignItems: "center",
},
actionRow: { actionRow: {
flexDirection: "row", flexDirection: "row",
justifyContent: "space-between", justifyContent: "space-between",

View File

@@ -85,11 +85,11 @@ const WarningScreen = () => {
const slice = resp.data?.alarms ?? []; const slice = resp.data?.alarms ?? [];
// Sort alarms by level descending (higher level first: SOS > Danger > Warning > Info) // Sort alarms by level descending (higher level first: SOS > Danger > Warning > Info)
const sortedSlice = [...slice].sort( // When appending, we need to sort the entire combined list, not just the new slice
(a, b) => (b.level ?? 0) - (a.level ?? 0) setAlarms((prev) => {
); const combined = append ? [...prev, ...slice] : slice;
return combined.sort((a, b) => (b.level ?? 0) - (a.level ?? 0));
setAlarms((prev) => (append ? [...prev, ...sortedSlice] : sortedSlice)); });
setOffset(nextOffset); setOffset(nextOffset);
setHasMore(nextOffset + PAGE_SIZE < resp.data?.total!); setHasMore(nextOffset + PAGE_SIZE < resp.data?.total!);
} catch (error) { } catch (error) {