From f2bf132d6df251ea7d5224d0d86c2ca5b0c02320 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 15 May 2024 09:38:05 +0300 Subject: Integrate feeds from good old `tst` 2019 project --- JuickNext/FeedView.swift | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 JuickNext/FeedView.swift (limited to 'JuickNext/FeedView.swift') 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") + } +} -- cgit v1.2.3