From bc88a7bb0e7866fe042a65e362e5114656f3a3b0 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Sun, 19 Jan 2025 16:56:59 +0300 Subject: [PATCH] Opening report from history --- .../Screens/HistoryScreen/HistoryCoordinator.swift | 13 +++++++++++-- AutoCat/Screens/HistoryScreen/HistoryScreen.swift | 3 +++ .../Screens/HistoryScreen/HistoryViewModel.swift | 13 ++++++++++--- AutoCat/SwiftUI/VehicleCellView.swift | 3 ++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift b/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift index 63e93fd..021410b 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryCoordinator.swift @@ -11,7 +11,7 @@ import SwiftUI import AutoCatCore @MainActor -class HistoryCoordinator { +final class HistoryCoordinator { var navController: UINavigationController? @@ -20,7 +20,8 @@ class HistoryCoordinator { let resolver = ServiceContainer.shared let viewModel = HistoryViewModel( apiService: resolver.resolve(ApiServiceProtocol.self), - storageService: resolver.resolve(StorageServiceProtocol.self) + storageService: resolver.resolve(StorageServiceProtocol.self), + coordinator: self ) let view = HistoryScreen(viewModel: viewModel) @@ -31,4 +32,12 @@ class HistoryCoordinator { return navController } + + func openReport(vehicle: VehicleDto) async { + + let coordinator = ReportCoordinator(controller: navController, + vehicle: vehicle, + isPersistent: true) + _ = try? await coordinator.start() + } } diff --git a/AutoCat/Screens/HistoryScreen/HistoryScreen.swift b/AutoCat/Screens/HistoryScreen/HistoryScreen.swift index 2991e69..5f1c560 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryScreen.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryScreen.swift @@ -21,6 +21,9 @@ struct HistoryScreen: View { Section(header: Text(section.header)) { ForEach(section.elements) { vehicle in VehicleCellView(vehicle: vehicle) + .onTapGesture { + Task { await viewModel.openReport(vehicle: vehicle) } + } } } } diff --git a/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift b/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift index dcc2044..08483f1 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift @@ -15,6 +15,7 @@ final class HistoryViewModel: ACHudContainer { let apiService: ApiServiceProtocol let storageService: StorageServiceProtocol + let coordinator: HistoryCoordinator? var hud: ACHud? @@ -43,10 +44,12 @@ final class HistoryViewModel: ACHudContainer { var dbFileURL: URL? init(apiService: ApiServiceProtocol, - storageService: StorageServiceProtocol) { + storageService: StorageServiceProtocol, + coordinator: HistoryCoordinator) { self.apiService = apiService self.storageService = storageService + self.coordinator = coordinator Task { await loadVehicles() } Task { dbFileURL = await storageService.dbFileURL } @@ -55,8 +58,12 @@ final class HistoryViewModel: ACHudContainer { func loadVehicles() async { vehicles = await storageService.loadVehicles() - vehiclesFiltered = vehicles - vehicleSections = vehiclesFiltered.groupedByDate(type: .updatedDate) + applyFilters() + } + + func openReport(vehicle: VehicleDto) async { + await coordinator?.openReport(vehicle: vehicle) + await loadVehicles() } func applyFilters() { diff --git a/AutoCat/SwiftUI/VehicleCellView.swift b/AutoCat/SwiftUI/VehicleCellView.swift index ceb656f..3db23d8 100644 --- a/AutoCat/SwiftUI/VehicleCellView.swift +++ b/AutoCat/SwiftUI/VehicleCellView.swift @@ -45,7 +45,7 @@ struct VehicleCellView: View { Spacer(minLength: 8) VStack(alignment: .trailing, spacing: 8) { - if vehicle.updatedDate != vehicle.addedDate { + if abs(vehicle.updatedDate - vehicle.addedDate) > 10 { Text(Formatters.short.string(from: Date(timeIntervalSince1970: vehicle.updatedDate))) .font(.footnote) .foregroundStyle(.secondary) @@ -56,6 +56,7 @@ struct VehicleCellView: View { } } } + .contentShape(Rectangle()) } func getForegroundColor() -> Color {