From 1d5c361b9a040b93c22c700058e5ee9f9d11110e Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 23 Jan 2023 15:48:29 +0000 Subject: [PATCH] ios: restore scroll and update user profile in user profile menu (#1811) * ios: Small UserPicker fixes * update scroll * update current user and update users list * refactor Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- apps/ios/Shared/Model/ChatModel.swift | 12 ++++++++++++ apps/ios/Shared/Views/ChatList/UserPicker.swift | 7 ++++--- .../Shared/Views/UserSettings/PreferencesView.swift | 5 +---- apps/ios/Shared/Views/UserSettings/UserProfile.swift | 4 +--- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 6f96b8a2c9..31ee686413 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -275,6 +275,18 @@ final class ChatModel: ObservableObject { return nil } + func updateCurrentUser(_ newProfile: Profile, _ preferences: FullPreferences? = nil) { + if let current = currentUser { + currentUser?.profile = toLocalProfile(current.profile.profileId, newProfile, "") + if let preferences = preferences { + currentUser?.fullPreferences = preferences + } + if let current = currentUser, let i = users.firstIndex(where: { $0.user.userId == current.userId }) { + users[i].user = current + } + } + } + func addLiveDummy(_ chatInfo: ChatInfo) -> ChatItem { let cItem = ChatItem.liveDummy(chatInfo.chatType) withAnimation { diff --git a/apps/ios/Shared/Views/ChatList/UserPicker.swift b/apps/ios/Shared/Views/ChatList/UserPicker.swift index 9a151c8a90..3503a87615 100644 --- a/apps/ios/Shared/Views/ChatList/UserPicker.swift +++ b/apps/ios/Shared/Views/ChatList/UserPicker.swift @@ -29,8 +29,9 @@ struct UserPicker: View { VStack(spacing: 0) { ScrollView { ScrollViewReader { sp in + let users = m.users.sorted { u, _ in u.user.activeUser } VStack(spacing: 0) { - ForEach(Array(m.users.sorted(by: { u, _ in u.user.activeUser }))) { u in + ForEach(users) { u in userView(u) Divider() } @@ -49,8 +50,8 @@ struct UserPicker: View { } } .onChange(of: userPickerVisible) { visible in - if visible { - sp.scrollTo(0) + if visible, let u = users.first { + sp.scrollTo(u.id) } } } diff --git a/apps/ios/Shared/Views/UserSettings/PreferencesView.swift b/apps/ios/Shared/Views/UserSettings/PreferencesView.swift index dc6da64ebd..fbce7193fa 100644 --- a/apps/ios/Shared/Views/UserSettings/PreferencesView.swift +++ b/apps/ios/Shared/Views/UserSettings/PreferencesView.swift @@ -71,10 +71,7 @@ struct PreferencesView: View { p.preferences = fullPreferencesToPreferences(preferences) if let newProfile = try await apiUpdateProfile(profile: p) { await MainActor.run { - if let profileId = chatModel.currentUser?.profile.profileId { - chatModel.currentUser?.profile = toLocalProfile(profileId, newProfile, "") - chatModel.currentUser?.fullPreferences = preferences - } + chatModel.updateCurrentUser(newProfile, preferences) currentPreferences = preferences } } diff --git a/apps/ios/Shared/Views/UserSettings/UserProfile.swift b/apps/ios/Shared/Views/UserSettings/UserProfile.swift index de7a19c8bd..5388cc3cfb 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfile.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfile.swift @@ -141,9 +141,7 @@ struct UserProfile: View { do { if let newProfile = try await apiUpdateProfile(profile: profile) { DispatchQueue.main.async { - if let profileId = chatModel.currentUser?.profile.profileId { - chatModel.currentUser?.profile = toLocalProfile(profileId, newProfile, "") - } + chatModel.updateCurrentUser(newProfile) profile = newProfile } }