Files
nirvana-ios/nirvana-ios/Views/Convos/ConvoFooterView.swift
T

128 lines
5.1 KiB
Swift

//
// ConvoFooterView.swift
// nirvana-ios
//
// Created by Arjun Patel on 12/30/21.
//
import SwiftUI
struct ConvoFooterView: View {
@EnvironmentObject var convoVM: ConvoViewModel
@State private var convoRelativeTime = "started 20 minutes ago"
var body: some View {
ZStack(alignment:.bottomTrailing) {
VStack(alignment:.center) {
Spacer()
HStack {
ProfilePicturesOverlappedView(indvAvatarWidth: CGFloat(35))
.padding(.leading, 20)
.padding(.trailing, 10)
// meta data of convo
VStack (alignment: .leading) {
Text("kev, sarth, and 5 others")
.font(.footnote)
.foregroundColor(NirvanaColor.light)
switch self.convoVM.connectionState {
case .connecting:
Label("connecting", systemImage: "chart.bar")
.foregroundColor(Color.orange)
.font(.caption)
case .connected:
Label("connected", systemImage: "chart.bar.fill")
.foregroundColor(Color.green)
.font(.caption)
case .reconnecting:
Label("reconnecting", systemImage: "chart.bar")
.foregroundColor(Color.orange)
.font(.caption)
case .failed:
Label("failed", systemImage: "chart.bar")
.foregroundColor(Color.red)
.font(.caption)
case .disconnected:
Label("disconnected", systemImage: "chart.bar")
.foregroundColor(Color.red)
.font(.caption)
default:
Label("disconnected", systemImage: "chart.bar")
.foregroundColor(Color.red)
.font(.caption)
}
Text(self.convoRelativeTime)
.font(.caption2)
.foregroundColor(.gray)
}
Spacer()
// disconnect button
Button {
print("showing more info about the chat")
// show a sheet of the members in the call and add them if I want
} label: {
Label("attendees", systemImage: "person.2.circle.fill")
.labelStyle(.iconOnly)
.foregroundColor(NirvanaColor.teal)
.font(.title2)
.padding(.trailing, 5)
}
// disconnect button
Button {
print("disconnecting user now ")
self.convoVM.leaveConvo()
// show success or failure toast
} label: {
Label("Call", systemImage: "powerplug.fill")
.labelStyle(.iconOnly)
.foregroundColor(Color.orange)
.font(.title2)
.padding(.trailing, 5)
}
}
.frame(maxWidth: .infinity, maxHeight: 60) // 60 is the height of the footer control big circle
.background(Color.white.opacity(0.5))
.clipShape(RoundedRectangle(cornerRadius: 30, style: .continuous))
.shadow(color: Color.black.opacity(0.25), radius: 30, x: 0, y: 20)
}
}
.padding()
.animation(Animation.spring(), value: self.convoVM.selectedConvoId)
.offset(
x:0,
y:self.convoVM.selectedConvoId == nil ? 150 : 0
)
.onChange(of: self.convoVM.selectedConvoId) {newConvo in
// update meta data based on which convo was selected
// reset the selected options to start fresh
// self.convoRelativeTime = ""
// get relative start time of convo
// let formatter = RelativeDateTimeFormatter()
// formatter.unitsStyle = .full
//
// let relativeDate = formatter.localizedString(for: ?.sentTimestamp ?? Date(), relativeTo: Date())
}
}
}
struct ConvoFooterView_Previews: PreviewProvider {
static var previews: some View {
ConvoFooterView()
}
}