mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-28 12:19:54 +00:00
ios: close user picker before opening other sheets
This commit is contained in:
parent
bb8bf0c8b2
commit
19110398f8
2 changed files with 50 additions and 50 deletions
|
@ -31,7 +31,7 @@ struct ChatListView: View {
|
||||||
@State private var searchChatFilteredBySimplexLink: String? = nil
|
@State private var searchChatFilteredBySimplexLink: String? = nil
|
||||||
@State private var scrollToSearchBar = false
|
@State private var scrollToSearchBar = false
|
||||||
@State private var activeUserPickerSheet: UserPickerSheet? = nil
|
@State private var activeUserPickerSheet: UserPickerSheet? = nil
|
||||||
@State private var isUserPickerPresented: Bool = false
|
@State private var userPickerShown: Bool = false
|
||||||
|
|
||||||
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
|
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
|
||||||
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
|
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
|
||||||
|
@ -58,43 +58,46 @@ struct ChatListView: View {
|
||||||
destination: chatView
|
destination: chatView
|
||||||
) { chatListView }
|
) { chatListView }
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $isUserPickerPresented) {
|
.sheet(isPresented: $userPickerShown) {
|
||||||
UserPicker(activeSheet: $activeUserPickerSheet)
|
UserPicker {
|
||||||
.sheet(item: $activeUserPickerSheet) { sheet in
|
userPickerShown = false
|
||||||
if let currentUser = chatModel.currentUser {
|
activeUserPickerSheet = $0
|
||||||
switch sheet {
|
}
|
||||||
case .address:
|
}
|
||||||
NavigationView {
|
.sheet(item: $activeUserPickerSheet) { sheet in
|
||||||
UserAddressView(shareViaProfile: currentUser.addressShared)
|
if let currentUser = chatModel.currentUser {
|
||||||
.navigationTitle("Public address")
|
switch sheet {
|
||||||
.navigationBarTitleDisplayMode(.large)
|
case .address:
|
||||||
.modifier(ThemedBackground(grouped: true))
|
NavigationView {
|
||||||
}
|
UserAddressView(shareViaProfile: currentUser.addressShared)
|
||||||
case .chatProfiles:
|
.navigationTitle("Public address")
|
||||||
NavigationView {
|
.navigationBarTitleDisplayMode(.large)
|
||||||
UserProfilesView()
|
.modifier(ThemedBackground(grouped: true))
|
||||||
}
|
|
||||||
case .currentProfile:
|
|
||||||
NavigationView {
|
|
||||||
UserProfile()
|
|
||||||
.navigationTitle("Your current profile")
|
|
||||||
.modifier(ThemedBackground())
|
|
||||||
}
|
|
||||||
case .chatPreferences:
|
|
||||||
NavigationView {
|
|
||||||
PreferencesView(profile: currentUser.profile, preferences: currentUser.fullPreferences, currentPreferences: currentUser.fullPreferences)
|
|
||||||
.navigationTitle("Your preferences")
|
|
||||||
.navigationBarTitleDisplayMode(.large)
|
|
||||||
.modifier(ThemedBackground(grouped: true))
|
|
||||||
}
|
|
||||||
case .useFromDesktop:
|
|
||||||
ConnectDesktopView(viaSettings: false)
|
|
||||||
case .settings:
|
|
||||||
SettingsView(showSettings: $showSettings)
|
|
||||||
.navigationBarTitleDisplayMode(.large)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
case .chatProfiles:
|
||||||
|
NavigationView {
|
||||||
|
UserProfilesView()
|
||||||
|
}
|
||||||
|
case .currentProfile:
|
||||||
|
NavigationView {
|
||||||
|
UserProfile()
|
||||||
|
.navigationTitle("Your current profile")
|
||||||
|
.modifier(ThemedBackground())
|
||||||
|
}
|
||||||
|
case .chatPreferences:
|
||||||
|
NavigationView {
|
||||||
|
PreferencesView(profile: currentUser.profile, preferences: currentUser.fullPreferences, currentPreferences: currentUser.fullPreferences)
|
||||||
|
.navigationTitle("Your preferences")
|
||||||
|
.navigationBarTitleDisplayMode(.large)
|
||||||
|
.modifier(ThemedBackground(grouped: true))
|
||||||
|
}
|
||||||
|
case .useFromDesktop:
|
||||||
|
ConnectDesktopView(viaSettings: false)
|
||||||
|
case .settings:
|
||||||
|
SettingsView(showSettings: $showSettings)
|
||||||
|
.navigationBarTitleDisplayMode(.large)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +210,7 @@ struct ChatListView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
isUserPickerPresented = true
|
userPickerShown = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,7 @@ struct UserPicker: View {
|
||||||
@Environment(\.dynamicTypeSize) private var userFont: DynamicTypeSize
|
@Environment(\.dynamicTypeSize) private var userFont: DynamicTypeSize
|
||||||
@Environment(\.scenePhase) private var scenePhase: ScenePhase
|
@Environment(\.scenePhase) private var scenePhase: ScenePhase
|
||||||
@Environment(\.colorScheme) private var colorScheme: ColorScheme
|
@Environment(\.colorScheme) private var colorScheme: ColorScheme
|
||||||
@Environment(\.dismiss) private var dismiss: DismissAction
|
let setActiveSheet: (UserPickerSheet?) -> Void
|
||||||
@Binding var activeSheet: UserPickerSheet?
|
|
||||||
@State private var switchingProfile = false
|
@State private var switchingProfile = false
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
@ -46,15 +45,15 @@ struct UserPicker: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
activeSheet = .currentProfile
|
setActiveSheet(.currentProfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
openSheetOnTap(title: m.userAddress == nil ? "Create public address" : "Your public address", icon: "qrcode") {
|
openSheetOnTap(title: m.userAddress == nil ? "Create public address" : "Your public address", icon: "qrcode") {
|
||||||
activeSheet = .address
|
setActiveSheet(.address)
|
||||||
}
|
}
|
||||||
|
|
||||||
openSheetOnTap(title: "Chat preferences", icon: "switch.2") {
|
openSheetOnTap(title: "Chat preferences", icon: "switch.2") {
|
||||||
activeSheet = .chatPreferences
|
setActiveSheet(.chatPreferences)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,7 +61,7 @@ struct UserPicker: View {
|
||||||
Section {
|
Section {
|
||||||
if otherUsers.isEmpty {
|
if otherUsers.isEmpty {
|
||||||
openSheetOnTap(title: "Your chat profiles", icon: "person.crop.rectangle.stack") {
|
openSheetOnTap(title: "Your chat profiles", icon: "person.crop.rectangle.stack") {
|
||||||
activeSheet = .chatProfiles
|
setActiveSheet(.chatProfiles)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let v = userPickerRow(otherUsers, size: 44)
|
let v = userPickerRow(otherUsers, size: 44)
|
||||||
|
@ -75,12 +74,12 @@ struct UserPicker: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
openSheetOnTap(title: "Use from desktop", icon: "desktopcomputer") {
|
openSheetOnTap(title: "Use from desktop", icon: "desktopcomputer") {
|
||||||
activeSheet = .useFromDesktop
|
setActiveSheet(.useFromDesktop)
|
||||||
}
|
}
|
||||||
|
|
||||||
HStack {
|
HStack {
|
||||||
openSheetOnTap(title: "Settings", icon: "gearshape") {
|
openSheetOnTap(title: "Settings", icon: "gearshape") {
|
||||||
activeSheet = .settings
|
setActiveSheet(.settings)
|
||||||
}
|
}
|
||||||
Label {} icon: {
|
Label {} icon: {
|
||||||
Image(systemName: colorScheme == .light ? "sun.max" : "moon.fill")
|
Image(systemName: colorScheme == .light ? "sun.max" : "moon.fill")
|
||||||
|
@ -181,7 +180,7 @@ struct UserPicker: View {
|
||||||
.foregroundColor(theme.colors.secondary)
|
.foregroundColor(theme.colors.secondary)
|
||||||
.padding(.trailing, 4)
|
.padding(.trailing, 4)
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
activeSheet = .chatProfiles
|
setActiveSheet(.chatProfiles)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,7 +201,7 @@ struct UserPicker: View {
|
||||||
try await changeActiveUserAsync_(u.user.userId, viewPwd: nil)
|
try await changeActiveUserAsync_(u.user.userId, viewPwd: nil)
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
switchingProfile = false
|
switchingProfile = false
|
||||||
dismiss()
|
setActiveSheet(nil)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
|
@ -250,12 +249,10 @@ struct UserPicker: View {
|
||||||
|
|
||||||
struct UserPicker_Previews: PreviewProvider {
|
struct UserPicker_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
@State var activeSheet: UserPickerSheet?
|
|
||||||
|
|
||||||
let m = ChatModel()
|
let m = ChatModel()
|
||||||
m.users = [UserInfo.sampleData, UserInfo.sampleData]
|
m.users = [UserInfo.sampleData, UserInfo.sampleData]
|
||||||
return UserPicker(
|
return UserPicker(
|
||||||
activeSheet: $activeSheet
|
setActiveSheet: { _ in }
|
||||||
)
|
)
|
||||||
.environmentObject(m)
|
.environmentObject(m)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue