Fix list not updating in the quick access pills

This commit is contained in:
Thomas Ricouard 2024-01-02 11:54:17 +01:00
parent c4b85679a2
commit 13e87b41e9
3 changed files with 50 additions and 4 deletions

View file

@ -72,9 +72,18 @@ public struct ListEditView: View {
.background(theme.secondaryBackgroundColor) .background(theme.secondaryBackgroundColor)
.toolbar { .toolbar {
ToolbarItem { ToolbarItem {
Button("action.done") { Button {
Task {
await viewModel.update()
dismiss() dismiss()
} }
} label: {
if viewModel.isUpdating {
ProgressView()
} else {
Text("action.done")
}
}
} }
} }
.navigationTitle(viewModel.list.title) .navigationTitle(viewModel.list.title)

View file

@ -2,9 +2,11 @@ import SwiftUI
import Env import Env
import Models import Models
import DesignSystem import DesignSystem
import Network
@MainActor @MainActor
struct TimelineQuickAccessPills: View { struct TimelineQuickAccessPills: View {
@Environment(Client.self) private var client
@Environment(Theme.self) private var theme @Environment(Theme.self) private var theme
@Environment(CurrentAccount.self) private var currentAccount @Environment(CurrentAccount.self) private var currentAccount
@ -23,11 +25,28 @@ struct TimelineQuickAccessPills: View {
} }
.scrollClipDisabled() .scrollClipDisabled()
.scrollIndicators(.never) .scrollIndicators(.never)
.onChange(of: currentAccount.lists, { _, lists in
guard client.isAuth else { return }
var filters = pinnedFilters
for (index, filter) in filters.enumerated() {
switch filter {
case .list(let list):
if let accountList = lists.first(where: { $0.id == list.id }),
accountList.title != list.title {
filters[index] = .list(list: accountList)
}
default:
break
}
}
pinnedFilters = filters
})
} }
@ViewBuilder @ViewBuilder
private func makePill(_ filter: TimelineFilter) -> some View { private func makePill(_ filter: TimelineFilter) -> some View {
if !isFilterSupport(filter) { if !isFilterSupported(filter) {
EmptyView() EmptyView()
} else if filter == timeline { } else if filter == timeline {
makeButton(filter) makeButton(filter)
@ -47,6 +66,11 @@ struct TimelineQuickAccessPills: View {
Label(filter.title.replacingOccurrences(of: "#", with: ""), Label(filter.title.replacingOccurrences(of: "#", with: ""),
systemImage: filter.iconName()) systemImage: filter.iconName())
.font(.callout) .font(.callout)
case let .list(list):
if let list = currentAccount.lists.first(where: { $0.id == list.id }) {
Label(list.title, systemImage: filter.iconName())
.font(.callout)
}
default: default:
Label(filter.localizedTitle(), systemImage: filter.iconName()) Label(filter.localizedTitle(), systemImage: filter.iconName())
.font(.callout) .font(.callout)
@ -62,7 +86,7 @@ struct TimelineQuickAccessPills: View {
draggedItem: $draggedFilter)) draggedItem: $draggedFilter))
} }
private func isFilterSupport(_ filter: TimelineFilter) -> Bool { private func isFilterSupported(_ filter: TimelineFilter) -> Bool {
switch filter { switch filter {
case .list(let list): case .list(let list):
return currentAccount.lists.contains(where: { $0.id == list.id }) return currentAccount.lists.contains(where: { $0.id == list.id })

View file

@ -140,6 +140,19 @@ public struct TimelineView: View {
} }
} }
} }
.onChange(of: account.lists, { _, lists in
guard client.isAuth else { return }
switch timeline {
case let .list(list):
if let accountList = lists.first(where: { $0.id == list.id }),
list.id == accountList.id,
accountList.title != list.title {
timeline = .list(list: accountList)
}
default:
break
}
})
.onChange(of: timeline) { _, newValue in .onChange(of: timeline) { _, newValue in
switch newValue { switch newValue {
case let .remoteLocal(server, _): case let .remoteLocal(server, _):