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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user