From fd96b36d4d60f68e8ddcd1b990c75faa6d2b2071 Mon Sep 17 00:00:00 2001 From: Blake McAnally Date: Tue, 16 Jul 2024 19:47:57 -0500 Subject: [PATCH] Update messages routing to clear NavigationSplitView when switching on sidebar --- Localizable.xcstrings | 9 +++++ Meshtastic/Views/Messages/Messages.swift | 48 +++++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 64bfb010..31db48de 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -18786,6 +18786,15 @@ }, "Secondary" : { + }, + "Select a channel" : { + + }, + "Select a conversation" : { + + }, + "Select a conversation type" : { + }, "Select a Trace Route" : { diff --git a/Meshtastic/Views/Messages/Messages.swift b/Meshtastic/Views/Messages/Messages.swift index 0d1cdab8..88a6f2a2 100644 --- a/Meshtastic/Views/Messages/Messages.swift +++ b/Meshtastic/Views/Messages/Messages.swift @@ -87,21 +87,26 @@ struct Messages: View { .navigationTitle("messages") .navigationBarTitleDisplayMode(.large) .navigationBarItems(leading: MeshtasticLogo()) - .onAppear { - setupNavigationState() - } } content: { if case .messages(.channels) = router.navigationState { ChannelList(node: $node, channelSelection: $channelSelection) } else if case .messages(.directMessages) = router.navigationState { UserList(node: $node, userSelection: $userSelection) + } else if case .messages(nil) = router.navigationState { + Text("Select a conversation type") } } detail: { if let myInfo = node?.myInfo, let channelSelection { ChannelMessageList(myInfo: myInfo, channel: channelSelection) } else if let userSelection { UserMessageList(user: userSelection) + } else if case .messages(.channels) = router.navigationState { + Text("Select a channel") + } else if case .messages(.directMessages) = router.navigationState { + Text("Select a conversation") } + }.onChange(of: router.navigationState) { _ in + setupNavigationState() } } @@ -115,23 +120,30 @@ struct Messages: View { return } - if let state { - switch state { - case .channels(channelId: let channelId, messageId: _): - if let channelId { - channelSelection = node?.myInfo?.channels?.first(where: { channel in - guard let channel = channel as? ChannelEntity else { return false } - return channel.id == channelId - }) as? ChannelEntity - } - case .directMessages(userNum: let userNum, messageId: _): - if let userNum { - userSelection = getUser(id: userNum, context: context) - } - } - } else { + guard let state else { channelSelection = nil userSelection = nil + return + } + + switch state { + case .channels(channelId: let channelId, messageId: _): + if let channelId { + channelSelection = node?.myInfo?.channels?.first(where: { channel in + guard let channel = channel as? ChannelEntity else { return false } + return channel.id == channelId + }) as? ChannelEntity + } else { + channelSelection = nil + userSelection = nil + } + case .directMessages(userNum: let userNum, messageId: _): + if let userNum { + userSelection = getUser(id: userNum, context: context) + } else { + channelSelection = nil + userSelection = nil + } } } }