Presented transcribed recordings from the RecordingView view into the ContentView view in the Sample app target as a modal sheet.

This commit is contained in:
2026-07-03 23:48:16 +02:00
parent f56ca3d8ff
commit fe08548b08
+44 -3
View File
@@ -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(