Ferrite-backup/Ferrite/Views/SettingsViews/SettingsAppVersionView.swift
kingbri 8306ca1f9b Ferrite: Clean up UI changes
- Migrate the empty view to a common view which vertically centers
itself to the screen's bounds

- Don't initialize underlying state variables in init as this is
discouraged behavior. Instead, hook the source list editor to an ID
that refreshes when an existing source list URL has been set

Signed-off-by: kingbri <bdashore3@proton.me>
2022-09-07 09:51:01 -04:00

62 lines
1.7 KiB
Swift

//
// SettingsAppVersionView.swift
// Ferrite
//
// Created by Brian Dashore on 8/29/22.
//
import SwiftUI
struct SettingsAppVersionView: View {
@EnvironmentObject var toastModel: ToastViewModel
@State private var viewTask: Task<Void, Never>?
@State private var releases: [GithubRelease] = []
@State private var loadedReleases = false
var body: some View {
ZStack {
if !loadedReleases {
ProgressView()
} else if !releases.isEmpty {
List {
Section(header: InlineHeader("GitHub links")) {
ForEach(releases, id: \.self) { release in
ListRowLinkView(text: release.tagName, link: release.htmlUrl)
}
}
}
.listStyle(.insetGrouped)
}
}
.onAppear {
viewTask = Task {
do {
if let fetchedReleases = try await Github().fetchReleases() {
releases = fetchedReleases
} else {
toastModel.updateToastDescription("Github error: No releases found")
}
} catch {
toastModel.updateToastDescription("Github error: \(error)")
}
withAnimation {
loadedReleases = true
}
}
}
.onDisappear {
viewTask?.cancel()
}
.navigationTitle("Version History")
.navigationBarTitleDisplayMode(.inline)
}
}
struct SettingsAppVersionView_Previews: PreviewProvider {
static var previews: some View {
SettingsAppVersionView()
}
}