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 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 {
|
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
|
// 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 {
|
var body: some View {
|
||||||
RecordingView(
|
RecordingView(
|
||||||
recorder: AudioRecordingService(),
|
recorder: AudioRecordingService(),
|
||||||
transcriber: AudioTranscribingService()
|
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
|
// MARK: - Previews
|
||||||
|
|
||||||
#Preview(
|
#Preview(
|
||||||
|
|||||||
Reference in New Issue
Block a user