mirror of
https://github.com/ninxsoft/Mist.git
synced 2025-05-21 18:55:24 -04:00
Fix scrolling to current task in download view
This commit is contained in:
parent
5491ae6cf5
commit
b816ca257f
1 changed files with 23 additions and 12 deletions
|
@ -26,6 +26,7 @@ struct DownloadView: View {
|
||||||
var beta: Bool
|
var beta: Bool
|
||||||
var destinationURL: URL?
|
var destinationURL: URL?
|
||||||
@ObservedObject var taskManager: TaskManager
|
@ObservedObject var taskManager: TaskManager
|
||||||
|
@State private var currentTaskId: String?
|
||||||
@State private var value: Double = 0
|
@State private var value: Double = 0
|
||||||
@State private var showAlert: Bool = false
|
@State private var showAlert: Bool = false
|
||||||
@State private var alertType: ProgressAlertType = .cancel
|
@State private var alertType: ProgressAlertType = .cancel
|
||||||
|
@ -44,26 +45,35 @@ struct DownloadView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
// swiftlint:disable:next closure_body_length
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
DownloadHeaderView(imageName: imageName, name: name, version: version, build: build, beta: beta)
|
DownloadHeaderView(imageName: imageName, name: name, version: version, build: build, beta: beta)
|
||||||
Divider()
|
Divider()
|
||||||
List {
|
ScrollViewReader { proxy in
|
||||||
ForEach(taskManager.taskGroups, id: \.section) { taskGroup in
|
List {
|
||||||
Section(header: DownloadSectionHeaderView(section: taskGroup.section)) {
|
ForEach(taskManager.taskGroups, id: \.section) { taskGroup in
|
||||||
ForEach(taskGroup.tasks.indices, id: \.self) { index in
|
Section(header: DownloadSectionHeaderView(section: taskGroup.section)) {
|
||||||
VStack {
|
ForEach(taskGroup.tasks.indices, id: \.self) { index in
|
||||||
DownloadRowView(state: taskGroup.tasks[index].state, description: taskGroup.tasks[index].currentDescription, degrees: degrees)
|
VStack {
|
||||||
if taskGroup.tasks[index].type == .download && taskGroup.tasks[index].state != .pending,
|
DownloadRowView(state: taskGroup.tasks[index].state, description: taskGroup.tasks[index].currentDescription, degrees: degrees)
|
||||||
let size: UInt64 = taskGroup.tasks[index].downloadSize {
|
if taskGroup.tasks[index].type == .download && taskGroup.tasks[index].state != .pending,
|
||||||
DownloadProgressView(state: taskGroup.tasks[index].state, value: value, size: size)
|
let size: UInt64 = taskGroup.tasks[index].downloadSize {
|
||||||
}
|
DownloadProgressView(state: taskGroup.tasks[index].state, value: value, size: size)
|
||||||
if index < taskGroup.tasks.count - 1 {
|
}
|
||||||
Divider()
|
if index < taskGroup.tasks.count - 1 {
|
||||||
|
Divider()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
.id("\(taskGroup.section.id).\(index)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.onChange(of: currentTaskId) { id in
|
||||||
|
withAnimation(.easeOut(duration: 1.0)) {
|
||||||
|
proxy.scrollTo(id, anchor: .center)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Divider()
|
Divider()
|
||||||
HStack {
|
HStack {
|
||||||
|
@ -111,6 +121,7 @@ struct DownloadView: View {
|
||||||
|
|
||||||
for taskGroupIndex in taskManager.taskGroups.indices {
|
for taskGroupIndex in taskManager.taskGroups.indices {
|
||||||
for taskIndex in taskManager.taskGroups[taskGroupIndex].tasks.indices {
|
for taskIndex in taskManager.taskGroups[taskGroupIndex].tasks.indices {
|
||||||
|
currentTaskId = "\(taskManager.taskGroups[taskGroupIndex].section.id).\(taskIndex)"
|
||||||
degrees = 0
|
degrees = 0
|
||||||
taskManager.taskGroups[taskGroupIndex].tasks[taskIndex].state = .inProgress
|
taskManager.taskGroups[taskGroupIndex].tasks[taskIndex].state = .inProgress
|
||||||
timer = timer.upstream.autoconnect()
|
timer = timer.upstream.autoconnect()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue