cealning up sent message ux

This commit is contained in:
talksik
2022-01-04 10:11:12 -08:00
parent db33f05679
commit 4115a76cce
3 changed files with 40 additions and 33 deletions
@@ -105,36 +105,40 @@ struct CircleFooterView: View {
x:0, x:0,
y:self.selectedFriendIndex == nil ? 150 : 0 y:self.selectedFriendIndex == nil ? 150 : 0
) )
.onChange(of: self.selectedFriendIndex) {newValue in .onChange(of: self.selectedFriendIndex) {_ in
// update meta data based on which friend was selected self.updateLocals()
let myId = self.authSessionStore.user?.id }
}
// reset the selected options to start fresh
self.selectedFriend = nil func updateLocals() {
self.myTurn = false // update meta data based on which friend was selected
self.convoRelativeTime = "" let myId = AuthSessionStore.getCurrentUserId()
// set convo moment/relative time to show // reset the selected options to start fresh
if newValue != nil && myId != nil { self.selectedFriend = nil
self.selectedFriend = self.authSessionStore.relevantUsersDict[newValue!] self.myTurn = false
self.convoRelativeTime = ""
// get the latest message's timestamp...will be the first in list now
let lastMessage = self.authSessionStore.relevantMessagesByUserDict[self.selectedFriend!.id!]?.first
if lastMessage != nil {
// figure out whose turn it is
self.myTurn = lastMessage!.receiverId == myId! ? true : false
// ask for the full relative date
let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full
let relativeDate = formatter.localizedString(for: lastMessage?.sentTimestamp ?? Date(), relativeTo: Date())
print("Relative date is: \(relativeDate)")
// setting the state for ui to update // set convo moment/relative time to show
self.convoRelativeTime = self.myTurn! ? "received " + relativeDate: "sent " + relativeDate if myId != nil && self.selectedFriendIndex != nil {
} self.selectedFriend = self.authSessionStore.relevantUsersDict[self.selectedFriendIndex!]
// get the latest message's timestamp...will be the first in list now
let lastMessage = self.authSessionStore.relevantMessagesByUserDict[self.selectedFriend!.id!]?.first
if lastMessage != nil {
// figure out whose turn it is
self.myTurn = lastMessage!.receiverId == myId! ? true : false
// ask for the full relative date
let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full
let relativeDate = formatter.localizedString(for: lastMessage?.sentTimestamp ?? Date(), relativeTo: Date())
print("Relative date is: \(relativeDate)")
// setting the state for ui to update
self.convoRelativeTime = self.myTurn! ? "received " + relativeDate: "sent " + relativeDate
} }
} }
} }
@@ -34,6 +34,7 @@ struct CircleGridView: View {
count: totalColumns) count: totalColumns)
@Binding var selectedFriendIndex: String? @Binding var selectedFriendIndex: String?
@State var lastPersonIdSentMessageTo: String?
private let big:CGFloat = 1 private let big:CGFloat = 1
private let medium:CGFloat = 0.9 private let medium:CGFloat = 0.9
@@ -157,7 +158,8 @@ struct CircleGridView: View {
if self.haveNewMessageFromFriend(friendDbId: friendId) { if self.haveNewMessageFromFriend(friendDbId: friendId) {
ProgressBarView(progress: self.selectedFriendIndex == friendId ? self.innerCircleVM.messagesListeningProgress : Float(1), color: Color.orange) ProgressBarView(progress: self.selectedFriendIndex == friendId ? self.innerCircleVM.messagesListeningProgress : Float(1), color: Color.orange)
} else if self.selectedFriendIndex == friendId { }
else if friendId == self.lastPersonIdSentMessageTo { // show that I sent a message to the last person I sent a message to
ProgressBarView(progress: self.innerCircleVM.toast == InnerCircleViewModel.Toast.clipSent ? Float(1) : Float(0), color: NirvanaColor.dimTeal) ProgressBarView(progress: self.innerCircleVM.toast == InnerCircleViewModel.Toast.clipSent ? Float(1) : Float(0), color: NirvanaColor.dimTeal)
} }
@@ -252,7 +254,8 @@ struct CircleGridView: View {
// stop recording // stop recording
print("stopping recording") print("stopping recording")
// self.selectedFriendIndex = nil self.lastPersonIdSentMessageTo = self.selectedFriendIndex
self.selectedFriendIndex = nil
self.innerCircleVM.stopRecording(sender: self.authSessionStore.user!, receiver: self.authSessionStore.relevantUsersDict[friendId]!) self.innerCircleVM.stopRecording(sender: self.authSessionStore.user!, receiver: self.authSessionStore.relevantUsersDict[friendId]!)
@@ -360,7 +363,6 @@ struct CircleGridView: View {
} //lazygrid // TODO: add padding based on if we are on any cornering item to allow the bubble to enlargen } //lazygrid // TODO: add padding based on if we are on any cornering item to allow the bubble to enlargen
.padding(.trailing, Self.size / 2 + Self.spacingBetweenColumns / 2) // because of the offset of last column .padding(.trailing, Self.size / 2 + Self.spacingBetweenColumns / 2) // because of the offset of last column
.padding(.top, Self.size / 2 + Self.spacingBetweenRows / 2) // because we are going under the nav bar .padding(.top, Self.size / 2 + Self.spacingBetweenRows / 2) // because we are going under the nav bar
// .id(UUID())
}// scrollview }// scrollview
.onAppear { .onAppear {
// scrolling to first person in grid // scrolling to first person in grid
@@ -63,7 +63,7 @@ class InnerCircleViewModel: NSObject, ObservableObject {
case .problemSendingClip: case .problemSendingClip:
return AlertToast(displayMode: .hud, type: .error(Color.orange), title: "problem sending clip", subTitle: "please try again") return AlertToast(displayMode: .hud, type: .error(Color.orange), title: "problem sending clip", subTitle: "please try again")
case .startedClip: case .startedClip:
return AlertToast(displayMode: .hud, type: .systemImage("waveform.and.mic", Color.orange), subTitle: "you're on") return AlertToast(displayMode: .hud, type: .systemImage("waveform.and.mic", Color.orange))
default: default:
return AlertToast(displayMode: .hud, type: .error(Color.orange), title: "Something went wrong ‼️") return AlertToast(displayMode: .hud, type: .error(Color.orange), title: "Something went wrong ‼️")
} }
@@ -74,6 +74,7 @@ class InnerCircleViewModel: NSObject, ObservableObject {
var queuePlayer = AVQueuePlayer() var queuePlayer = AVQueuePlayer()
var avplayer: AVPlayer? var avplayer: AVPlayer?
private var cachedPlayerItemsDict: [String: URL] = [:] // firebase audio url to local url private var cachedPlayerItemsDict: [String: URL] = [:] // firebase audio url to local url
@Published var isRecording : Bool = false @Published var isRecording : Bool = false