feat(album): add pull-to-refresh to management grid
This commit is contained in:
@@ -22,6 +22,7 @@ final class TravelAlbumDetailViewController: BaseViewController {
|
||||
private let purchasedTabButton = UIButton(type: .system)
|
||||
private let sortButton = UIButton(type: .system)
|
||||
private let selectButton = UIButton(type: .system)
|
||||
private let refreshControl = UIRefreshControl()
|
||||
private var collectionView: UICollectionView!
|
||||
private var dataSource: UICollectionViewDiffableDataSource<Int, TravelAlbumMaterial>!
|
||||
private let bottomBar = UIView()
|
||||
@@ -97,6 +98,9 @@ final class TravelAlbumDetailViewController: BaseViewController {
|
||||
collectionView.alwaysBounceVertical = true
|
||||
collectionView.showsVerticalScrollIndicator = false
|
||||
collectionView.delegate = self
|
||||
refreshControl.tintColor = TravelAlbumDetailStyle.primary
|
||||
refreshControl.accessibilityIdentifier = "travelAlbum.refreshControl"
|
||||
collectionView.refreshControl = refreshControl
|
||||
collectionView.register(
|
||||
TravelAlbumMaterialCell.self,
|
||||
forCellWithReuseIdentifier: TravelAlbumMaterialCell.reuseIdentifier
|
||||
@@ -225,6 +229,7 @@ final class TravelAlbumDetailViewController: BaseViewController {
|
||||
aiRetouchButton.addTarget(self, action: #selector(aiRetouchTapped), for: .touchUpInside)
|
||||
deleteSelectedButton.addTarget(self, action: #selector(deleteSelectedTapped), for: .touchUpInside)
|
||||
uploadButton.addTarget(self, action: #selector(uploadTapped), for: .touchUpInside)
|
||||
refreshControl.addTarget(self, action: #selector(refreshPulled), for: .valueChanged)
|
||||
viewModel.onStateChange = { [weak self] in
|
||||
Task { @MainActor in self?.applyViewModel() }
|
||||
}
|
||||
@@ -291,13 +296,20 @@ final class TravelAlbumDetailViewController: BaseViewController {
|
||||
}
|
||||
dataSource.apply(snapshot, animatingDifferences: true)
|
||||
|
||||
if viewModel.isLoading && viewModel.album == nil {
|
||||
if !viewModel.isRefreshing {
|
||||
refreshControl.endRefreshing()
|
||||
}
|
||||
if viewModel.isLoading && viewModel.album == nil && !refreshControl.isRefreshing {
|
||||
showLoading()
|
||||
} else {
|
||||
hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func refreshPulled() {
|
||||
Task { await viewModel.refreshAll(api: api) }
|
||||
}
|
||||
|
||||
private func configureTabButtonBase(_ button: UIButton) {
|
||||
button.titleLabel?.font = .systemFont(ofSize: 13, weight: .medium)
|
||||
button.accessibilityTraits.insert(.button)
|
||||
|
||||
Reference in New Issue
Block a user