summaryrefslogtreecommitdiff
path: root/JuickNext/FeedView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'JuickNext/FeedView.swift')
-rw-r--r--JuickNext/FeedView.swift55
1 files changed, 55 insertions, 0 deletions
diff --git a/JuickNext/FeedView.swift b/JuickNext/FeedView.swift
new file mode 100644
index 0000000..399da1f
--- /dev/null
+++ b/JuickNext/FeedView.swift
@@ -0,0 +1,55 @@
+//
+// FeedView.swift
+// tst
+//
+// Created by Vitaly Takmazov on 10.12.2019.
+// Copyright © 2019 com.juick. All rights reserved.
+//
+
+import SwiftUI
+
+struct FeedView: View {
+ @ObservedObject var messageFetcher : MessageFetcher
+
+ let title: String
+
+ init(_ title: String, url: String) {
+ self.title = title
+ messageFetcher = MessageFetcher(url: url)
+ }
+
+ private var stateContent: AnyView {
+ switch messageFetcher.state {
+ case .loading:
+ return AnyView(
+ ProgressView()
+ )
+ case .fetched(let result):
+ switch result {
+ case .failure(let error):
+ return AnyView(
+ Text(error.localizedDescription)
+ )
+ case .success(let root):
+ return AnyView(
+ List(root) { (message: Message) in
+ MessageView(message: message)
+ }
+ )
+ }
+ }
+ }
+
+ var body: some View {
+ NavigationView {
+ stateContent
+ .navigationBarTitle(Text(title), displayMode: .inline)
+ }
+ }
+}
+
+struct FeedView_Previews: PreviewProvider {
+ static var previews: some View {
+ FeedView("Discover", url: "https://api.juick.com/messages")
+ }
+}