feat: actually implement system audio + refactor
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import SwiftUI
|
||||
|
||||
struct MeetingListView: View {
|
||||
@StateObject private var viewModel = MeetingListViewModel()
|
||||
@State private var navigationPath = NavigationPath()
|
||||
|
||||
var body: some View {
|
||||
NavigationStack(path: $navigationPath) {
|
||||
List {
|
||||
if viewModel.meetings.isEmpty && !viewModel.isLoading {
|
||||
ContentUnavailableView(
|
||||
"No Meetings Yet",
|
||||
systemImage: "mic.slash",
|
||||
description: Text("Start a new meeting to begin transcribing")
|
||||
)
|
||||
} else {
|
||||
ForEach(viewModel.meetings) { meeting in
|
||||
NavigationLink(value: meeting) {
|
||||
MeetingRowView(meeting: meeting)
|
||||
}
|
||||
}
|
||||
.onDelete { indexSet in
|
||||
for index in indexSet {
|
||||
viewModel.deleteMeeting(viewModel.meetings[index])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Meetings")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .primaryAction) {
|
||||
Button {
|
||||
let newMeeting = viewModel.createNewMeeting()
|
||||
navigationPath.append(newMeeting)
|
||||
} label: {
|
||||
Label("New Meeting", systemImage: "plus")
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationDestination(for: Meeting.self) { meeting in
|
||||
MeetingDetailView(meeting: meeting)
|
||||
}
|
||||
}
|
||||
.overlay {
|
||||
if viewModel.isLoading {
|
||||
ProgressView("Loading meetings...")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MeetingRowView: View {
|
||||
let meeting: Meeting
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(meeting.date, style: .date)
|
||||
.font(.headline)
|
||||
|
||||
if !meeting.transcript.isEmpty {
|
||||
Text(meeting.transcript)
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
.lineLimit(2)
|
||||
} else {
|
||||
Text("No transcript")
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
.italic()
|
||||
}
|
||||
}
|
||||
.padding(.vertical, 4)
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
MeetingListView()
|
||||
}
|
||||
Reference in New Issue
Block a user