diff --git a/Apps/Attendi/ContentView.swift b/Apps/Attendi/ContentView.swift index 025a26a..fdc82a0 100644 --- a/Apps/Attendi/ContentView.swift +++ b/Apps/Attendi/ContentView.swift @@ -3,21 +3,62 @@ import SwiftUI /// The root view of the Attendi sample app. /// -/// The view hosts the `RecordingView` feature from the `Recording` target of the `Features` package, which drives the whole recording flow. +/// The view hosts the `RecordingView` feature from the `Recording` target of the `Features` package, which drives the whole recording flow, +/// and presents the transcribed text of every processed recording in a modal sheet. struct ContentView: View { + // MARK: Properties + + /// The transcription currently presented in the modal sheet, or `nil` when none is shown. + @State private var transcription: Transcription? + // MARK: Body - /// The content of the view: the recording feature's view, attached to the microphone-backed recording service and the on-device speech transcribing service. + /// The content of the view: the recording feature's view, attached to the microphone-backed recording service and the on-device speech + /// transcribing service, with the transcribed text of every processed recording presented in a modal sheet. var body: some View { RecordingView( recorder: AudioRecordingService(), transcriber: AudioTranscribingService() - ) + ) { text in + transcription = .init(text: text) + } + .sheet(item: $transcription) { transcription in + NavigationStack { + ScrollView { + Text(transcription.text) + .frame( + maxWidth: .infinity, + alignment: .leading + ) + .padding() + } + .navigationTitle("Transcription") + #if !os(macOS) + .navigationBarTitleDisplayMode(.inline) + #endif + .toolbar { + Button("Done") { + self.transcription = nil + } + } + } + .presentationDetents([.medium, .large]) + } } } +// MARK: - Models + +/// A transcription of a processed recording to present in the modal sheet. +private struct Transcription: Identifiable { + /// The unique identifier of the transcription. + let id = UUID() + /// The transcribed text of the processed recording. + let text: String +} + // MARK: - Previews #Preview(