diff --git a/AutoCat/Screens/RecordsScreen/AudioRecordView/AudioRecordViewModel.swift b/AutoCat/Screens/RecordsScreen/AudioRecordView/AudioRecordViewModel.swift index cf59466..360e7bb 100644 --- a/AutoCat/Screens/RecordsScreen/AudioRecordView/AudioRecordViewModel.swift +++ b/AutoCat/Screens/RecordsScreen/AudioRecordView/AudioRecordViewModel.swift @@ -17,6 +17,7 @@ struct AudioRecordViewModel: Identifiable { var number: String? var date: String var onPlay: () -> Void + var url: URL? init(dto: AudioRecordDto, isPlaying: Bool = false, onPlay: @escaping () -> Void) { @@ -28,5 +29,6 @@ struct AudioRecordViewModel: Identifiable { ) self.isPlaying = isPlaying self.onPlay = onPlay + self.url = try? FileManager.default.url(for: dto.path, in: Constants.audioRecordsFolder) } } diff --git a/AutoCat/Screens/RecordsScreen/RecordsCoordinator.swift b/AutoCat/Screens/RecordsScreen/RecordsCoordinator.swift index 72eb15a..ff86444 100644 --- a/AutoCat/Screens/RecordsScreen/RecordsCoordinator.swift +++ b/AutoCat/Screens/RecordsScreen/RecordsCoordinator.swift @@ -24,6 +24,8 @@ final class RecordsCoordinator { recordPlayer: resolver.resolve(RecordPlayerServiceProtocol.self) ) + viewModel.coordinator = self + let view = RecordsScreen(viewModel: viewModel) let controller = UIHostingController(rootView: view) @@ -31,4 +33,12 @@ final class RecordsCoordinator { self.navController = navController return navController } + + func showOnMap(event: VehicleEventDto) { + + let controller = ShowEventController() + controller.event = event + controller.hidesBottomBarWhenPushed = true + navController.pushViewController(controller, animated: true) + } } diff --git a/AutoCat/Screens/RecordsScreen/RecordsScreen.swift b/AutoCat/Screens/RecordsScreen/RecordsScreen.swift index d7a3f05..f334050 100644 --- a/AutoCat/Screens/RecordsScreen/RecordsScreen.swift +++ b/AutoCat/Screens/RecordsScreen/RecordsScreen.swift @@ -63,6 +63,14 @@ struct RecordsScreen: View { @ViewBuilder func makeActions(for record: AudioRecordViewModel, useLabels: Bool = false) -> some View { + if useLabels { + makeMenuActions(for: record) + } + + if let url = record.url { + ShareLink(item: url) + } + Button { selectedRecordId = record.id numberText = record.number ?? "" @@ -77,4 +85,20 @@ struct RecordsScreen: View { Label(useLabels ? "Delete" : "", systemImage: "trash") } } + + @ViewBuilder + func makeMenuActions(for record: AudioRecordViewModel) -> some View { + + Button { + viewModel.showRawRecognizedText(id: record.id) + } label: { + Label("Show recognized text", systemImage: "textformat") + } + + Button { + viewModel.showOnMap(id: record.id) + } label: { + Label("Show on map", systemImage: "map") + } + } } diff --git a/AutoCat/Screens/RecordsScreen/RecordsViewModel.swift b/AutoCat/Screens/RecordsScreen/RecordsViewModel.swift index a7935b9..845af3d 100644 --- a/AutoCat/Screens/RecordsScreen/RecordsViewModel.swift +++ b/AutoCat/Screens/RecordsScreen/RecordsViewModel.swift @@ -16,6 +16,7 @@ final class RecordsViewModel: ACHudContainer { let recordService: VehicleRecordServiceProtocol let storageService: StorageServiceProtocol let recordPlayer: RecordPlayerServiceProtocol + var coordinator: RecordsCoordinator? var hud: ACHud? var showRecordingAlert: Bool = false @@ -103,4 +104,22 @@ final class RecordsViewModel: ACHudContainer { } } } + + func showRawRecognizedText(id: String) { + guard let record = records.first(where: { $0.id == id }) else { + return + } + + hud = .message(record.rawText) + } + + func showOnMap(id: String) { + guard let record = records.first(where: { $0.id == id }), + let event = record.event + else { + return + } + + coordinator?.showOnMap(event: event) + } }