Merge branch 'stable'

This commit is contained in:
Evgeny Poberezkin
2023-03-18 08:38:10 +00:00
17 changed files with 158 additions and 34 deletions

View File

@@ -555,6 +555,15 @@ final class Chat: ObservableObject, Identifiable {
}
}
var userIsObserver: Bool {
switch chatInfo {
case let .group(groupInfo):
let m = groupInfo.membership
return m.memberActive && m.memberRole == .observer
default: return false
}
}
var id: ChatId { get { chatInfo.id } }
var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } }

View File

@@ -291,7 +291,7 @@ struct ComposeView: View {
.background(.background)
.disabled(!chat.userCanSend)
if (!chat.userCanSend) {
if chat.userIsObserver {
Text("you are observer")
.italic()
.foregroundColor(.secondary)

View File

@@ -140,7 +140,7 @@ struct AddGroupMembersView: View {
private func rolePicker() -> some View {
Picker("New member role", selection: $selectedRole) {
ForEach(GroupMemberRole.allCases) { role in
if role <= groupInfo.membership.memberRole {
if role <= groupInfo.membership.memberRole && role != .observer {
Text(role.text)
}
}

View File

@@ -34,15 +34,15 @@ struct GroupLinkView: View {
Text("You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it.")
.padding(.bottom)
if let groupLink = groupLink {
HStack {
Text("Initial role")
Picker("Initial role", selection: $groupLinkMemberRole) {
ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
Text(role.text)
}
}
}
.frame(maxWidth: .infinity, alignment: .leading)
// HStack {
// Text("Initial role")
// Picker("Initial role", selection: $groupLinkMemberRole) {
// ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
// Text(role.text)
// }
// }
// }
// .frame(maxWidth: .infinity, alignment: .leading)
QRCode(uri: groupLink)
HStack {
Button {

View File

@@ -1517,7 +1517,7 @@ public struct GroupMember: Identifiable, Decodable {
public func canChangeRoleTo(groupInfo: GroupInfo) -> [GroupMemberRole]? {
if !canBeRemoved(groupInfo: groupInfo) { return nil }
let userRole = groupInfo.membership.memberRole
return GroupMemberRole.allCases.filter { $0 <= userRole }
return GroupMemberRole.allCases.filter { $0 <= userRole && $0 != .observer }
}
public var memberIncognito: Bool {