mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-06-26 18:52:01 +00:00
ad23da63d0
* core: supporter badges using anonymous BBS credentials * badges in profiles * badge in profiles * process badges * update simplexmq * update simplexmq * change types * fix migration * migration * update simplexmq * fix bot API, schema * fix postgresql build * refactor * postgresql schema * correctly set badges in all cases * badges ffi * plan, bot types * FFI * FFI: export badge symbols * add extra field * refactor badge types to GADT * configurable badge key * add badge to profile, test * ui: badge images * generate badge key and sign badge * badge sign in CLI * fix commands, ui * rename badges * Binary * image size, migration * update badge images, add public key * send badges in more cases * update UI, tests * bot types, schema * postgres schema * tone down badges * revert formula * refactor badges * smaller badges * badge position * better badge position * simpler * position * move position * update simplexmq * show badge after name * badge layout * fix badge * debug badge height * shift badge * fix badge in member name * bigger badge * badge layout * differentiate badge colors * more avatars for the user's profiles * refactor * remove color filter * alerts * multiple keys, old expired * use new BBS api * update badge keys, bot api * presentation header * simplify * parser * update iOS images * update public keys * query plans * update simplexmq * refactor badge types * simplexmq * bot api types * update simplexmq - commoncrypto flag * update simplexmq * pass commoncrypto flag to simplexmq in nix iOS build * ios ui * update core library, fixes * badge layout * badge size * badge gap * remove extensions * simplify * share badge in more events, reverify badge if verification failed * larger files with badges * allow sending larger files * simpler * update simplexmq * better decoder for badge keys * update simplexmq --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> Co-authored-by: shum <github.shum@liber.li>
97 lines
3.2 KiB
Swift
97 lines
3.2 KiB
Swift
//
|
|
// ChannelMembersView.swift
|
|
// SimpleX (iOS)
|
|
//
|
|
// Created by spaced4ndy on 20.02.2026.
|
|
// Copyright © 2026 SimpleX Chat. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import SimpleXChat
|
|
|
|
struct ChannelMembersView: View {
|
|
@ObservedObject var chat: Chat
|
|
var groupInfo: GroupInfo
|
|
@EnvironmentObject var chatModel: ChatModel
|
|
@EnvironmentObject var theme: AppTheme
|
|
|
|
var body: some View {
|
|
let members = chatModel.groupMembers
|
|
.filter { m in
|
|
let s = m.wrapped.memberStatus
|
|
return s != .memLeft && s != .memRemoved && m.wrapped.memberRole != .relay
|
|
}
|
|
if groupInfo.isOwner {
|
|
let subscriberCount = groupInfo.groupSummary.publicMemberCount ?? Int64(members.count + 1)
|
|
List {
|
|
Section(header: Text(subscriberCountStr(subscriberCount)).foregroundColor(theme.colors.secondary)) {
|
|
memberRow(GMember(groupInfo.membership), user: true, showRole: true)
|
|
ForEach(members) { member in
|
|
memberRow(member, user: false, showRole: member.wrapped.memberRole >= .owner)
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
let owners = members.filter { $0.wrapped.memberRole >= .owner }
|
|
List {
|
|
Section(header: Text("Owners").foregroundColor(theme.colors.secondary)) {
|
|
ForEach(owners) { member in
|
|
memberRow(member, user: false, showRole: false)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@ViewBuilder private func memberRow(_ gMember: GMember, user: Bool, showRole: Bool) -> some View {
|
|
let member = gMember.wrapped
|
|
let nameText = Text(member.chatViewName)
|
|
.foregroundColor(member.memberIncognito ? .indigo : theme.colors.onBackground)
|
|
let displayName = member.verified
|
|
? (Text(Image(systemName: "checkmark.shield")) + textSpace)
|
|
.font(.caption).baselineOffset(2).kerning(-2)
|
|
.foregroundColor(theme.colors.secondary) + nameText
|
|
: nameText
|
|
let row = HStack {
|
|
MemberProfileImage(member, size: 38)
|
|
.padding(.trailing, 2)
|
|
VStack(alignment: .leading) {
|
|
NameWithBadge(displayName, member.nameBadge)
|
|
.lineLimit(1)
|
|
if user {
|
|
Text("you")
|
|
.font(.caption)
|
|
.foregroundColor(theme.colors.secondary)
|
|
}
|
|
}
|
|
Spacer()
|
|
if showRole {
|
|
Text(member.memberRole.text)
|
|
.foregroundColor(theme.colors.secondary)
|
|
}
|
|
}
|
|
if user {
|
|
row
|
|
} else {
|
|
NavigationLink {
|
|
GroupMemberInfoView(
|
|
groupInfo: groupInfo,
|
|
chat: chat,
|
|
groupMember: gMember,
|
|
scrollToItemId: Binding.constant(nil)
|
|
)
|
|
.navigationBarHidden(false)
|
|
} label: {
|
|
row
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
ChannelMembersView(
|
|
chat: Chat.sampleData,
|
|
groupInfo: GroupInfo.sampleData
|
|
)
|
|
}
|