feat: add iOS travel album photo preview
This commit is contained in:
@@ -11,6 +11,7 @@ import UIKit
|
||||
final class TravelAlbumDetailViewController: BaseViewController {
|
||||
private let viewModel: TravelAlbumDetailViewModel
|
||||
private let api: any TravelAlbumServing
|
||||
private let previewConfiguration: TravelAlbumPreviewConfiguration
|
||||
|
||||
private let contentView = UIView()
|
||||
private let infoCard = TravelAlbumInfoCard()
|
||||
@@ -27,9 +28,14 @@ final class TravelAlbumDetailViewController: BaseViewController {
|
||||
private let deleteSelectedButton = UIButton(type: .system)
|
||||
private let uploadButton = UIButton(type: .system)
|
||||
|
||||
init(albumId: Int, api: (any TravelAlbumServing)? = nil) {
|
||||
init(
|
||||
albumId: Int,
|
||||
api: (any TravelAlbumServing)? = nil,
|
||||
previewConfiguration: TravelAlbumPreviewConfiguration = .init()
|
||||
) {
|
||||
viewModel = TravelAlbumDetailViewModel(albumId: albumId)
|
||||
self.api = api ?? NetworkServices.shared.travelAlbumAPI
|
||||
self.previewConfiguration = previewConfiguration
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
@@ -413,12 +419,36 @@ final class TravelAlbumDetailViewController: BaseViewController {
|
||||
)
|
||||
navigationController?.pushViewController(controller, animated: true)
|
||||
}
|
||||
|
||||
private func presentPreview(startingWith material: TravelAlbumMaterial) {
|
||||
guard let startIndex = viewModel.materials.firstIndex(where: { $0.id == material.id }) else { return }
|
||||
let previewViewModel = viewModel
|
||||
let previewAPI = api
|
||||
let controller = TravelAlbumPhotoPreviewViewController(
|
||||
projects: viewModel.materials.map(TravelAlbumPreviewProject.init(material:)),
|
||||
totalCount: viewModel.currentPhotoCount,
|
||||
startProjectIndex: startIndex,
|
||||
configuration: previewConfiguration,
|
||||
loadMore: {
|
||||
await previewViewModel.loadMaterials(reset: false, api: previewAPI)
|
||||
return (
|
||||
previewViewModel.materials.map(TravelAlbumPreviewProject.init(material:)),
|
||||
previewViewModel.currentPhotoCount
|
||||
)
|
||||
}
|
||||
)
|
||||
present(controller, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
extension TravelAlbumDetailViewController: UICollectionViewDelegate {
|
||||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||
guard let material = dataSource.itemIdentifier(for: indexPath) else { return }
|
||||
viewModel.toggleMaterialSelection(material)
|
||||
if viewModel.isSelectionMode {
|
||||
viewModel.toggleMaterialSelection(material)
|
||||
} else {
|
||||
presentPreview(startingWith: material)
|
||||
}
|
||||
}
|
||||
|
||||
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||
|
||||
Reference in New Issue
Block a user