ios: fix picker resetting value in iOS 15 (fixes disappearing messages and changing member role) (#2503)

* ios: fix picker resetting value in iOS 15

* group link view layout
This commit is contained in:
Evgeny Poberezkin
2023-05-24 15:29:27 +02:00
committed by GitHub
parent fd2c7c888c
commit 494328541a
3 changed files with 29 additions and 29 deletions

View File

@@ -29,43 +29,33 @@ struct GroupLinkView: View {
}
var body: some View {
ScrollView {
VStack (alignment: .leading) {
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)
List {
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.")
.listRowBackground(Color.clear)
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
Section {
if let groupLink = groupLink {
HStack {
Text("Initial role")
Picker("Initial role", selection: $groupLinkMemberRole) {
ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
Text(role.text)
}
Picker("Initial role", selection: $groupLinkMemberRole) {
ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
Text(role.text)
}
.frame(height: 36)
}
.frame(maxWidth: .infinity, alignment: .leading)
.frame(height: 36)
QRCode(uri: groupLink)
HStack {
Button {
showShareSheet(items: [groupLink])
} label: {
Label("Share link", systemImage: "square.and.arrow.up")
}
.padding()
Button(role: .destructive) { alert = .deleteLink } label: {
Label("Delete link", systemImage: "trash")
}
.padding()
Button {
showShareSheet(items: [groupLink])
} label: {
Label("Share link", systemImage: "square.and.arrow.up")
}
Button(role: .destructive) { alert = .deleteLink } label: {
Label("Delete link", systemImage: "trash")
}
.frame(maxWidth: .infinity)
} else {
Button(action: createGroupLink) {
Label("Create link", systemImage: "link.badge.plus")
}
.frame(maxWidth: .infinity)
.disabled(creatingLink)
.padding(.bottom)
if creatingLink {
ProgressView()
.scaleEffect(2)
@@ -73,8 +63,6 @@ struct GroupLinkView: View {
}
}
}
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
.alert(item: $alert) { alert in
switch alert {
case .deleteLink:

View File

@@ -20,6 +20,7 @@ struct GroupMemberInfoView: View {
@State private var newRole: GroupMemberRole = .member
@State private var alert: GroupMemberInfoViewAlert?
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@State private var justOpened = true
enum GroupMemberInfoViewAlert: Identifiable {
case removeMemberAlert(mem: GroupMember)
@@ -146,6 +147,10 @@ struct GroupMemberInfoView: View {
}
.navigationBarHidden(true)
.onAppear {
if #unavailable(iOS 16) {
// this condition prevents re-setting picker
if !justOpened { return }
}
newRole = member.memberRole
do {
let stats = try apiGroupMemberInfo(groupInfo.apiId, member.groupMemberId)
@@ -156,6 +161,7 @@ struct GroupMemberInfoView: View {
} catch let error {
logger.error("apiGroupMemberInfo or apiGetGroupMemberCode error: \(responseError(error))")
}
justOpened = false
}
.onChange(of: newRole) { _ in
if newRole != member.memberRole {

View File

@@ -147,6 +147,7 @@ struct DropdownCustomTimePicker: View {
@State private var dropdownSelection: DropdownSelection = .dropdownValue(value: nil)
@State private var showCustomTimePicker = false
@State private var selectedCustomTime: Int? = nil
@State private var justOpened = true
enum DropdownSelection: Hashable {
case dropdownValue(value: Int?)
@@ -167,7 +168,12 @@ struct DropdownCustomTimePicker: View {
}
}
.onAppear {
if #unavailable(iOS 16) {
// this condition prevents re-setting picker
if !justOpened { return }
}
dropdownSelection = .dropdownValue(value: selection)
justOpened = false
}
.onChange(of: selection) { v in
logger.debug("*** .onChange(of: selection)")