Ferrite-backup/Ferrite/Views/ComponentViews/Settings/SettingsAppVersionView.swift
kingbri 9ff7f5a7d5 Ferrite: Fix iOS 14 onAppear bug
onAppear does not fire properly on iOS 14 due to a longstanding
bug in SwiftUI. Add a UIKit onAppear hook for listening to these
events and implement inside the backport namespace.

Signed-off-by: kingbri <bdashore3@proton.me>
2023-02-08 14:41:14 -05: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: [Github.Release] = []
@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)
}
}
.backport.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()
}
}