From 8c03574e6a88a79b88f821cc17005379b6da5267 Mon Sep 17 00:00:00 2001 From: cheykrym Date: Wed, 8 Oct 2025 06:49:25 +0300 Subject: [PATCH] add line limit --- yobble/Views/Tab/ChatsTab.swift | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/yobble/Views/Tab/ChatsTab.swift b/yobble/Views/Tab/ChatsTab.swift index 86db664..415f115 100644 --- a/yobble/Views/Tab/ChatsTab.swift +++ b/yobble/Views/Tab/ChatsTab.swift @@ -15,6 +15,7 @@ struct ChatsTab: View { @Binding var searchRevealProgress: CGFloat @Binding var searchText: String private let searchService = SearchService() + @AppStorage("chatRowMessageLineLimit") private var messageLineLimitSetting: Int = 2 @StateObject private var viewModel = PrivateChatsViewModel() @State private var selectedChatId: String? @State private var searchDragStartProgress: CGFloat = 0 @@ -178,6 +179,17 @@ struct ChatsTab: View { !searchText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } + private var messagePreviewLineLimit: Int { + switch messageLineLimitSetting { + case ..<1: + return 1 + case 1...2: + return messageLineLimitSetting + default: + return 2 + } + } + private var filteredChats: [PrivateChatListItem] { let trimmedQuery = searchText.trimmingCharacters(in: .whitespacesAndNewlines) guard !trimmedQuery.isEmpty else { return viewModel.chats } @@ -301,7 +313,11 @@ struct ChatsTab: View { Button { selectedChatId = chat.chatId } label: { - ChatRowView(chat: chat, currentUserId: currentUserId) + ChatRowView( + chat: chat, + currentUserId: currentUserId, + messageLimitLine: messagePreviewLineLimit + ) .contentShape(Rectangle()) } .buttonStyle(.plain) @@ -328,6 +344,8 @@ struct ChatsTab: View { } .hidden() ) + .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) +// .listRowSeparator(.hidden) .onAppear { guard !isSearching else { return } viewModel.loadMoreIfNeeded(currentItem: chat) @@ -603,7 +621,8 @@ private struct SearchResultPlaceholderView: View { private struct ChatRowView: View { let chat: PrivateChatListItem let currentUserId: String? - let messageLimitLine: Int = 1 + let messageLimitLine: Int + private let avatarSize: CGFloat = 52 private var title: String { switch chat.chatType { @@ -783,17 +802,17 @@ private struct ChatRowView: View { HStack(spacing: 12) { Circle() .fill(avatarBackgroundColor) - .frame(width: 44, height: 44) + .frame(width: avatarSize, height: avatarSize) .overlay( Group { if isDeletedUser { Image(systemName: deletedUserSymbolName) .symbolRenderingMode(.hierarchical) - .font(.system(size: 20, weight: .semibold)) + .font(.system(size: avatarSize * 0.45, weight: .semibold)) .foregroundColor(avatarTextColor) } else { Text(initial) - .font(.headline) + .font(.system(size: avatarSize * 0.5, weight: .semibold)) .foregroundColor(avatarTextColor) } }