|
25 | 25 | import 'package:chatview_utils/chatview_utils.dart'; |
26 | 26 | import 'package:flutter/material.dart'; |
27 | 27 |
|
| 28 | +import '../extensions/extensions.dart'; |
| 29 | +import '../models/models.dart'; |
28 | 30 | import '../utils/package_strings.dart'; |
29 | 31 |
|
30 | 32 | enum ShowReceiptsIn { all, lastMessage } |
@@ -183,3 +185,46 @@ enum PinStatus { |
183 | 185 | unpinned => Icons.push_pin_outlined, |
184 | 186 | }; |
185 | 187 | } |
| 188 | + |
| 189 | +/// Enum for different chat list sorting options (for internal use only) |
| 190 | +enum ChatViewListSortBy { |
| 191 | + /// No sorting applied. |
| 192 | + none, |
| 193 | + |
| 194 | + /// Pin chats first (sorted by pin time), then unpinned by message date/time |
| 195 | + pinFirstByPinTime; |
| 196 | + |
| 197 | + int sort(ChatViewListItem chat1, ChatViewListItem chat2) { |
| 198 | + switch (this) { |
| 199 | + case none: |
| 200 | + return 0; |
| 201 | + case pinFirstByPinTime: |
| 202 | + final isChatAPinned = chat1.settings.pinStatus.isPinned; |
| 203 | + final isChatBPinned = chat2.settings.pinStatus.isPinned; |
| 204 | + |
| 205 | + // 1. Pinned chats first |
| 206 | + if (isChatAPinned && !isChatBPinned) return -1; |
| 207 | + if (!isChatAPinned && isChatBPinned) return 1; |
| 208 | + |
| 209 | + // 2. Sort pinned chats by pinTime descending (latest first) |
| 210 | + if (isChatAPinned && isChatBPinned) { |
| 211 | + final pinTimeA = chat1.settings.pinTime; |
| 212 | + final pinTimeB = chat2.settings.pinTime; |
| 213 | + if (pinTimeA != null && pinTimeB != null) { |
| 214 | + return pinTimeB.compareTo(pinTimeA); |
| 215 | + } |
| 216 | + // If one has null pinTime, treat it as older |
| 217 | + if (pinTimeA == null && pinTimeB != null) return 1; |
| 218 | + if (pinTimeA != null && pinTimeB == null) return -1; |
| 219 | + } |
| 220 | + |
| 221 | + // 3. Sort unpinned chats by message date/time (newest first) |
| 222 | + if (!isChatAPinned && !isChatBPinned) { |
| 223 | + final chatBCreateAt = chat2.lastMessage?.createdAt; |
| 224 | + return chatBCreateAt.compareWith(chat1.lastMessage?.createdAt); |
| 225 | + } |
| 226 | + |
| 227 | + return 0; |
| 228 | + } |
| 229 | + } |
| 230 | +} |
0 commit comments