patch chats
This commit is contained in:
		
							parent
							
								
									b8d22c814c
								
							
						
					
					
						commit
						851f5f2f3f
					
				@ -23,6 +23,12 @@
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "Chat ID:" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Companion ID:" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Fun Fest" : {
 | 
			
		||||
      "comment" : "Fun Fest",
 | 
			
		||||
@ -79,6 +85,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Активные сессии" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Без звука (скоро)" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Безопасность" : {
 | 
			
		||||
 | 
			
		||||
@ -175,6 +184,9 @@
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "Закрепить (скоро)" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Закрыть" : {
 | 
			
		||||
      "comment" : "Закрыть",
 | 
			
		||||
@ -385,6 +397,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Неизвестная ошибка. Попробуйте позже." : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Неизвестный" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Неизвестный пользователь" : {
 | 
			
		||||
 | 
			
		||||
@ -551,6 +566,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Уведомления" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Удалить чат (скоро)" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Центр авторов" : {
 | 
			
		||||
      "comment" : "Creator Center",
 | 
			
		||||
@ -565,6 +583,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Частые вопросы" : {
 | 
			
		||||
      "comment" : "FAQ navigation title"
 | 
			
		||||
    },
 | 
			
		||||
    "Чат" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Чаты" : {
 | 
			
		||||
 | 
			
		||||
@ -582,6 +603,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Черновики доступны в боковом меню в разделе Drafts." : {
 | 
			
		||||
      "comment" : "FAQ answer: drafts"
 | 
			
		||||
    },
 | 
			
		||||
    "Экран чата в разработке" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Язык" : {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ import SwiftUI
 | 
			
		||||
struct ChatsTab: View {
 | 
			
		||||
    var currentUserId: String? = nil
 | 
			
		||||
    @StateObject private var viewModel = PrivateChatsViewModel()
 | 
			
		||||
    @State private var selectedChatId: String?
 | 
			
		||||
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        content
 | 
			
		||||
@ -54,11 +55,39 @@ struct ChatsTab: View {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ForEach(viewModel.chats) { chat in
 | 
			
		||||
                ChatRowView(chat: chat, currentUserId: currentUserId)
 | 
			
		||||
                    .contentShape(Rectangle())
 | 
			
		||||
                    .onAppear {
 | 
			
		||||
                        viewModel.loadMoreIfNeeded(currentItem: chat)
 | 
			
		||||
                Button {
 | 
			
		||||
                    selectedChatId = chat.chatId
 | 
			
		||||
                } label: {
 | 
			
		||||
                    ChatRowView(chat: chat, currentUserId: currentUserId)
 | 
			
		||||
                        .contentShape(Rectangle())
 | 
			
		||||
                }
 | 
			
		||||
                .buttonStyle(.plain)
 | 
			
		||||
                .contextMenu {
 | 
			
		||||
                    Button(action: {}) {
 | 
			
		||||
                        Label(NSLocalizedString("Закрепить (скоро)", comment: ""), systemImage: "pin")
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Button(action: {}) {
 | 
			
		||||
                        Label(NSLocalizedString("Без звука (скоро)", comment: ""), systemImage: "speaker.slash")
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Button(role: .destructive, action: {}) {
 | 
			
		||||
                        Label(NSLocalizedString("Удалить чат (скоро)", comment: ""), systemImage: "trash")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                .background(
 | 
			
		||||
                    NavigationLink(
 | 
			
		||||
                        destination: ChatPlaceholderView(chat: chat),
 | 
			
		||||
                        tag: chat.chatId,
 | 
			
		||||
                        selection: $selectedChatId
 | 
			
		||||
                    ) {
 | 
			
		||||
                        EmptyView()
 | 
			
		||||
                    }
 | 
			
		||||
                    .hidden()
 | 
			
		||||
                )
 | 
			
		||||
                .onAppear {
 | 
			
		||||
                    viewModel.loadMoreIfNeeded(currentItem: chat)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if viewModel.isLoadingMore {
 | 
			
		||||
@ -437,3 +466,63 @@ struct ChatsTab_Previews: PreviewProvider {
 | 
			
		||||
            .environmentObject(ThemeManager())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private struct ChatPlaceholderView: View {
 | 
			
		||||
    let chat: PrivateChatListItem
 | 
			
		||||
 | 
			
		||||
    private var companionId: String {
 | 
			
		||||
        if let profileId = chat.chatData?.userId {
 | 
			
		||||
            return profileId
 | 
			
		||||
        }
 | 
			
		||||
        if let senderId = chat.lastMessage?.senderId {
 | 
			
		||||
            return senderId
 | 
			
		||||
        }
 | 
			
		||||
        return NSLocalizedString("Неизвестный", comment: "")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        VStack(spacing: 16) {
 | 
			
		||||
            Text(NSLocalizedString("Экран чата в разработке", comment: ""))
 | 
			
		||||
                .font(.headline)
 | 
			
		||||
 | 
			
		||||
            VStack(alignment: .leading, spacing: 8) {
 | 
			
		||||
                HStack {
 | 
			
		||||
                    Text("Chat ID:")
 | 
			
		||||
                        .font(.subheadline)
 | 
			
		||||
                        .foregroundColor(.secondary)
 | 
			
		||||
                    Text(chat.chatId)
 | 
			
		||||
                        .font(.body.monospaced())
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if companionId != NSLocalizedString("Неизвестный", comment: "") {
 | 
			
		||||
                    HStack {
 | 
			
		||||
                        Text("Companion ID:")
 | 
			
		||||
                            .font(.subheadline)
 | 
			
		||||
                            .foregroundColor(.secondary)
 | 
			
		||||
                        Text(companionId)
 | 
			
		||||
                            .font(.body.monospaced())
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .frame(maxWidth: .infinity, alignment: .leading)
 | 
			
		||||
 | 
			
		||||
            Spacer()
 | 
			
		||||
        }
 | 
			
		||||
        .padding()
 | 
			
		||||
        .navigationTitle(title)
 | 
			
		||||
        .navigationBarTitleDisplayMode(.inline)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private var title: String {
 | 
			
		||||
        if let full = chat.chatData?.fullName, !full.isEmpty {
 | 
			
		||||
            return full
 | 
			
		||||
        }
 | 
			
		||||
        if let custom = chat.chatData?.customName, !custom.isEmpty {
 | 
			
		||||
            return custom
 | 
			
		||||
        }
 | 
			
		||||
        if let login = chat.chatData?.login, !login.isEmpty {
 | 
			
		||||
            return "@\(login)"
 | 
			
		||||
        }
 | 
			
		||||
        return NSLocalizedString("Чат", comment: "")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user