ios: groups miscellaneous (#843)

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
This commit is contained in:
JRoberts
2022-07-27 11:16:07 +04:00
committed by GitHub
parent a4aaf36774
commit aa7e377bce
12 changed files with 265 additions and 144 deletions

View File

@@ -500,8 +500,8 @@ public struct NetCfg: Codable {
}
public struct ConnectionStats: Codable {
var rcvServers: [String]?
var sndServers: [String]?
public var rcvServers: [String]?
public var sndServers: [String]?
}
public protocol SelectableItem: Hashable, Identifiable {

View File

@@ -444,6 +444,10 @@ public struct GroupInfo: Identifiable, Decodable, NamedChat {
return membership.memberRole == .owner || (s == .memRemoved || s == .memLeft || s == .memGroupDeleted || s == .memInvited)
}
public var canAddMembers: Bool {
return membership.memberRole >= .admin && membership.memberActive
}
public static let sampleData = GroupInfo(
groupId: 1,
localDisplayName: "team",
@@ -524,6 +528,10 @@ public struct GroupMember: Identifiable, Decodable {
}
}
public func canRemove(userRole: GroupMemberRole) -> Bool {
return userRole >= .admin && userRole >= memberRole
}
public static let sampleData = GroupMember(
groupMemberId: 1,
groupId: 1,
@@ -539,18 +547,32 @@ public struct GroupMember: Identifiable, Decodable {
)
}
public enum GroupMemberRole: String, Decodable {
public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Decodable {
case member = "member"
case admin = "admin"
case owner = "owner"
public var id: Self { self }
public var text: LocalizedStringKey {
switch self {
case .member: return "Member"
case .admin: return "Admin"
case .owner: return "Owner"
case .member: return "member"
case .admin: return "admin"
case .owner: return "owner"
}
}
private var comparisonValue: Int {
switch self {
case .member: return 0
case .admin: return 1
case .owner: return 2
}
}
public static func < (lhs: Self, rhs: Self) -> Bool {
return lhs.comparisonValue < rhs.comparisonValue
}
}
public enum GroupMemberCategory: String, Decodable {
@@ -576,17 +598,17 @@ public enum GroupMemberStatus: String, Decodable {
public var text: LocalizedStringKey {
switch self {
case .memRemoved: return "Removed"
case .memLeft: return "Left"
case .memGroupDeleted: return "Group deleted"
case .memInvited: return "Invited"
case .memIntroduced: return "Connecting (introduced)"
case .memIntroInvited: return "Connecting (introduction invitation)"
case .memAccepted: return "Connecting (accepted)"
case .memAnnounced: return "Connecting (announced)"
case .memConnected: return "Connected"
case .memComplete: return "Complete"
case .memCreator: return "Creator"
case .memRemoved: return "removed"
case .memLeft: return "left"
case .memGroupDeleted: return "group deleted"
case .memInvited: return "invited"
case .memIntroduced: return "connecting (introduced)"
case .memIntroInvited: return "connecting (introduction invitation)"
case .memAccepted: return "connecting (accepted)"
case .memAnnounced: return "connecting (announced)"
case .memConnected: return "connected"
case .memComplete: return "complete"
case .memCreator: return "creator"
}
}