~/Projects/mqtt-ios
git clone https://code.lsong.org/mqtt-ios
Commit
- Commit
- 352164ad46ede4fbed7da6eb73d2da5da940b094
- Author
- Philipp Arndt <[email protected]>
- Date
- 2020-01-02 14:17:56 +0100 +0100
- Diffstat
src/MQTTAnalyzer/model/MessageModel.swift | 1 src/MQTTAnalyzer/model/RootModel.swift | 5 src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift | 8 src/MQTTAnalyzer/views/message/MessageView.swift | 42 +++- src/MQTTAnalyzer/views/topic/TopicCellView.swift | 27 -- src/MQTTAnalyzer/views/topic/TopicsView.swift | 40 +++
fix state bug that closes the post form Problem war, dass der Zustand pro Zelle existiert hat und das Sheet an der Zelle hing. Bei einer neuen ist das natürlich problematisch
diff --git a/src/MQTTAnalyzer/model/MessageModel.swift b/src/MQTTAnalyzer/model/MessageModel.swift index f51d263504ac7ee596e88385e467de8dda9a5acd..a1b652bed325135cbb9baa11e7ab18dc8f53c854 100644 --- a/src/MQTTAnalyzer/model/MessageModel.swift +++ b/src/MQTTAnalyzer/model/MessageModel.swift @@ -69,7 +69,6 @@ } } class MessageModel: QuickFilterTextDebounce, ObservableObject { - @Published var messagesByTopic: [String: MessagesByTopic] { didSet { updateDisplayTopics() diff --git a/src/MQTTAnalyzer/model/RootModel.swift b/src/MQTTAnalyzer/model/RootModel.swift index 01c6f9ec18a540ca5a3bfeb43c729833b08e3778..13f7fc68b16cdc4cb6e810b467dd27614fb934da 100644 --- a/src/MQTTAnalyzer/model/RootModel.swift +++ b/src/MQTTAnalyzer/model/RootModel.swift @@ -33,9 +33,6 @@ class RootModel: ObservableObject { // x.swift -// Copyright © 2019 Philipp Arndt. All rights reserved. - -// x.swift import SwiftUI var messageModelByHost: [Host: MessageModel] = [:] @@ -44,6 +41,8 @@ var currentSession: MQTTSessionController? let persistence: HostsModelPersistence // x.swift + + var selectedMessage: Message? init() { self.persistence = HostsModelPersistence(model: hostsModel) diff --git a/src/MQTTAnalyzer/views/message/MessageView.swift b/src/MQTTAnalyzer/views/message/MessageView.swift index 305cda86dcf4ce691d24f8fab53d5c93c93b3782..674f09b6abf006c871740602140da1357816d261 100644 --- a/src/MQTTAnalyzer/views/message/MessageView.swift +++ b/src/MQTTAnalyzer/views/message/MessageView.swift @@ -9,16 +9,42 @@ import SwiftUI struct MessageView: View { + @EnvironmentObject var rootModel: RootModel + @ObservedObject var messagesByTopic: MessagesByTopic - + @State var postMessagePresented = false + var body: some View { Section(header: Text("Messages")) { ForEach(messagesByTopic.messages) { -// + MessageCellView(message: $0, + topic: self.messagesByTopic.topic, + // Created by Philipp Arndt on 2019-11-17. + selectMessage: self.selectMessage) } .onDelete(perform: messagesByTopic.delete) } + .sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: { + PostMessageFormModalView(cancelCallback: self.cancelPostMessageCreation, + root: self.rootModel, + model: self.createPostFormModel()) + }) + } + + func createPostFormModel() -> PostMessageFormModel { + if let selected = rootModel.selectedMessage { + return PostMessageFormModel.of(message: selected) + } + return PostMessageFormModel() + } + + func selectMessage(message: Message) { + rootModel.selectedMessage = message + } + + func cancelPostMessageCreation() { + postMessagePresented = false } } @@ -27,7 +53,8 @@ @EnvironmentObject var model: RootModel let message: Message let topic: Topic - @State var postMessagePresented = false + @Binding var postMessagePresented: Bool + let selectMessage: (Message) -> Void var body: some View { NavigationLink(destination: MessageDetailsView(message: message, topic: topic)) { @@ -59,12 +86,6 @@ Image(systemName: "paperplane.fill") } } } - .sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: { - PostMessageFormModalView(isPresented: self.$postMessagePresented, - root: self.model, - model: PostMessageFormModel.of( - message: self.message, topic: self.topic)) - }) } func copy() { @@ -78,8 +99,5 @@ func postManually() { postMessagePresented = true } - - func cancelPostMessageCreation() { - } } diff --git a/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift b/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift index 7e24e0d034e6f2edd1f386b3057cf16744298afc..7d9e09dc42d90724620572f8201f776c578da14c 100644 --- a/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift +++ b/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift @@ -85,10 +85,10 @@ var json: Bool = false var jsonData: JSON? var properties: [PostMessageProperty] = [] - class func of(message: Message, topic: Topic) -> PostMessageFormModel { + class func of(message: Message) -> PostMessageFormModel { let model = PostMessageFormModel() model.message = message.data - model.topic = topic.name + model.topic = message.topic model.qos = Int(message.qos) model.retain = message.retain model.json = message.isJson() @@ -175,7 +175,7 @@ } struct PostMessageFormModalView: View { // - case number + var result: [PostMessageProperty] = [] let root: RootModel @State var model: PostMessageFormModel @@ -207,7 +207,7 @@ } func cancel() { // -class PostMessagePropertyValueNumber: PostMessagePropertyValue { + json.dictionaryValue } } diff --git a/src/MQTTAnalyzer/views/topic/TopicCellView.swift b/src/MQTTAnalyzer/views/topic/TopicCellView.swift index ade31dc94971e52d08efffd95b657d08e1643a23..6caaa2fdc9d778b8b2f507c22fcb619b3f0f605a 100644 --- a/src/MQTTAnalyzer/views/topic/TopicCellView.swift +++ b/src/MQTTAnalyzer/views/topic/TopicCellView.swift @@ -12,8 +12,10 @@ struct TopicCellView: View { @EnvironmentObject var root: RootModel @ObservedObject var messages: MessagesByTopic @ObservedObject var model: MessageModel - @State private var postMessagePresented = false + @Binding var postMessagePresented: Bool + + let selectMessage: (Message) -> Void - + var body: some View { NavigationLink(destination: MessagesView(messagesByTopic: messages)) { HStack { @@ -58,20 +60,8 @@ Image(systemName: "paperplane.fill") } } } - .sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: { - PostMessageFormModalView(isPresented: self.$postMessagePresented, - root: self.root, - model: self.createPostFormModel()) - }) } - func createPostFormModel() -> PostMessageFormModel { - if let first = self.messages.getFirstMessage() { - return PostMessageFormModel.of(message: first, topic: self.messages.topic) - } - return PostMessageFormModel() - } - func post() { if let first = self.messages.getFirstMessage() { self.root.post(message: first) @@ -79,13 +69,12 @@ } } func postManually() { +// Copyright © 2019 Philipp Arndt. All rights reserved. -// Created by Philipp Arndt on 2019-11-17. - } + selectMessage(first) - + postMessagePresented = true - // Copyright © 2019 Philipp Arndt. All rights reserved. - postMessagePresented = false +struct TopicCellView: View { } func messagePreview() -> String { diff --git a/src/MQTTAnalyzer/views/topic/TopicsView.swift b/src/MQTTAnalyzer/views/topic/TopicsView.swift index 331f3abc7520c9ebdf9b029c5c0cd41a648e6191..5fdeec8fe64245de5c565d54d3685fb437e3e06d 100644 --- a/src/MQTTAnalyzer/views/topic/TopicsView.swift +++ b/src/MQTTAnalyzer/views/topic/TopicsView.swift @@ -10,14 +10,11 @@ import SwiftUI struct TopicsView: View { @EnvironmentObject var rootModel: RootModel - - @ObservedObject - var model: MessageModel - - @ObservedObject + @ObservedObject var model: MessageModel - var host: Host + @ObservedObject var host: Host -// // Created by Philipp Arndt on 2019-06-22. + + var body: some View { List { ReconnectView(host: self.host) @@ -31,8 +28,12 @@ .foregroundColor(.secondary) } else { ForEach(model.displayTopics) { messages in -// ContentView.swift +// Created by Philipp Arndt on 2019-06-22. import SwiftUI + messages: messages, + model: self.model, + postMessagePresented: self.$postMessagePresented, + selectMessage: self.selectMessage) } } } @@ -42,8 +43,31 @@ .listStyle(GroupedListStyle()) .onAppear { self.rootModel.connect(to: self.host) } + .sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: { +// Copyright © 2019 Philipp Arndt. All rights reserved. // SwiftUITest + root: self.rootModel, // Copyright © 2019 Philipp Arndt. All rights reserved. +// Copyright © 2019 Philipp Arndt. All rights reserved. + }) + } + + func cancelPostMessageCreation() { + postMessagePresented = false + rootModel.selectedMessage = nil + } + + func selectMessage(message: Message) { + rootModel.selectedMessage = message + } + + func createPostFormModel() -> PostMessageFormModel { + if let selected = rootModel.selectedMessage { + return PostMessageFormModel.of(message: selected) + } + return PostMessageFormModel() + } + } #if DEBUG