adding in notification icon if that user has a message for me
This commit is contained in:
@@ -22,7 +22,7 @@ struct CircleGridView: View {
|
|||||||
private static let spacingBetweenRows: CGFloat = 0
|
private static let spacingBetweenRows: CGFloat = 0
|
||||||
private static let totalColumns: Int = Int(log2(Double(Self.numberOfItems))) // scaling the circles and calculating column count
|
private static let totalColumns: Int = Int(log2(Double(Self.numberOfItems))) // scaling the circles and calculating column count
|
||||||
|
|
||||||
@State private var selectedUserIndex: Int? = nil
|
@State private var selectedFriendIndex: Int? = nil
|
||||||
|
|
||||||
// TODO: change the size to adaptive or something to make outer ring items shrink their overall size and fit better
|
// TODO: change the size to adaptive or something to make outer ring items shrink their overall size and fit better
|
||||||
let gridItems: [GridItem] = Array(
|
let gridItems: [GridItem] = Array(
|
||||||
@@ -32,7 +32,7 @@ struct CircleGridView: View {
|
|||||||
private let big:CGFloat = 1
|
private let big:CGFloat = 1
|
||||||
private let medium:CGFloat = 0.75
|
private let medium:CGFloat = 0.75
|
||||||
private let small:CGFloat = 0.5
|
private let small:CGFloat = 0.5
|
||||||
private let supersmall:CGFloat = 0.3
|
private let supersmall:CGFloat = 0.3
|
||||||
|
|
||||||
// TODO: centered honeycomb + side: maybe have two honeycombs: one in the center of 7 people and then everyone else surrounding
|
// TODO: centered honeycomb + side: maybe have two honeycombs: one in the center of 7 people and then everyone else surrounding
|
||||||
// TODO: maybe make our "center" offset to a little to the top left to make it more honeycomb from top left
|
// TODO: maybe make our "center" offset to a little to the top left to make it more honeycomb from top left
|
||||||
@@ -42,6 +42,7 @@ struct CircleGridView: View {
|
|||||||
gridContent
|
gridContent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private var gridContent: some View {
|
private var gridContent: some View {
|
||||||
// main communication hub
|
// main communication hub
|
||||||
// TODO: client side, sort the honeycomb from top left to bottom right
|
// TODO: client side, sort the honeycomb from top left to bottom right
|
||||||
@@ -53,18 +54,31 @@ struct CircleGridView: View {
|
|||||||
alignment: .center,
|
alignment: .center,
|
||||||
spacing: Self.spacingBetweenRows
|
spacing: Self.spacingBetweenRows
|
||||||
) {
|
) {
|
||||||
ForEach(Array(self.authSessionStore.friendsArr.enumerated()), id: \.offset) { value, element in
|
ForEach(Array(self.authSessionStore.friendsArr.enumerated()), id: \.offset) { value, friend in
|
||||||
// for (value, element) in self.authSessionStore.friendMessagesDict.keys.enumerated() {
|
// for (value, element) in self.authSessionStore.friendMessagesDict.keys.enumerated() {
|
||||||
GeometryReader {gridProxy in
|
GeometryReader {gridProxy in
|
||||||
let scale = getScale(proxy: gridProxy, itemNumber: value)
|
let scale = getScale(proxy: gridProxy, itemNumber: value)
|
||||||
|
|
||||||
|
let messagesRelatedToFriend = self.authSessionStore.friendMessagesDict[friend.id!]
|
||||||
|
// sort the list
|
||||||
|
// shouldn't be nil...hopefully
|
||||||
|
let userId = self.authSessionStore.user!.id
|
||||||
|
|
||||||
ZStack(alignment: .topTrailing) {
|
ZStack(alignment: .topTrailing) {
|
||||||
|
// check if the last message in the conversation between me and my friend was me talking or him
|
||||||
|
// also check if I have listened to it once or twice
|
||||||
|
if messagesRelatedToFriend?.last?.receiverId == userId && messagesRelatedToFriend?.last?.listenCount == 0 { // him talking
|
||||||
|
Image(systemName: "wave.3.right.circle")
|
||||||
|
.foregroundColor(Color.orange)
|
||||||
|
.font(.title)
|
||||||
|
}
|
||||||
|
|
||||||
Circle()
|
Circle()
|
||||||
.foregroundColor(self.getBubbleTint(userIndex: value)) // different color for a selected user
|
.foregroundColor(self.getBubbleTint(userIndex: value)) // different color for a selected user
|
||||||
.blur(radius: 8)
|
.blur(radius: 8)
|
||||||
.cornerRadius(100)
|
.cornerRadius(100)
|
||||||
|
|
||||||
Image(element.avatar ?? Avatars.avatarSystemNames[0])
|
Image(friend.avatar ?? Avatars.avatarSystemNames[0])
|
||||||
.resizable()
|
.resizable()
|
||||||
.scaledToFit()
|
.scaledToFit()
|
||||||
.shadow(color: Color.black.opacity(0.2), radius: 10, x: 0, y: 20)
|
.shadow(color: Color.black.opacity(0.2), radius: 10, x: 0, y: 20)
|
||||||
@@ -81,13 +95,19 @@ struct CircleGridView: View {
|
|||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
withAnimation {
|
withAnimation {
|
||||||
// if user had previously selected user, put nil as a toggle
|
// if user had previously selected user, put nil as a toggle
|
||||||
if self.selectedUserIndex == value {
|
if self.selectedFriendIndex == value {
|
||||||
self.selectedUserIndex = nil
|
self.selectedFriendIndex = nil
|
||||||
} else {
|
} else {
|
||||||
self.selectedUserIndex = value
|
self.selectedFriendIndex = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// I want to play the last x messages if I was the receiver
|
||||||
|
// ["sarth": [me, me]] -> play nothing
|
||||||
|
// ["sarth": [me, him, him, him]] -> play his last three messages
|
||||||
|
|
||||||
|
// update the count of those messages and update them in db
|
||||||
|
|
||||||
print("the selected item is: \(value)")
|
print("the selected item is: \(value)")
|
||||||
}
|
}
|
||||||
.onLongPressGesture { // haptics for recording
|
.onLongPressGesture { // haptics for recording
|
||||||
@@ -110,7 +130,7 @@ struct CircleGridView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func getBubbleTint(userIndex: Int) -> Color {
|
private func getBubbleTint(userIndex: Int) -> Color {
|
||||||
if (userIndex == self.selectedUserIndex) { // user clicked on this user
|
if (userIndex == self.selectedFriendIndex) { // user clicked on this user
|
||||||
return NirvanaColor.dimTeal.opacity(0.4)
|
return NirvanaColor.dimTeal.opacity(0.4)
|
||||||
}
|
}
|
||||||
// else if self.usersWithNewMessage.contains(userIndex) { // this user has a message
|
// else if self.usersWithNewMessage.contains(userIndex) { // this user has a message
|
||||||
@@ -124,7 +144,7 @@ struct CircleGridView: View {
|
|||||||
// and decoding into a scale that the item should take
|
// and decoding into a scale that the item should take
|
||||||
private func getScale(proxy: GeometryProxy, itemNumber: Int) -> CGFloat {
|
private func getScale(proxy: GeometryProxy, itemNumber: Int) -> CGFloat {
|
||||||
// if this user is selected
|
// if this user is selected
|
||||||
if itemNumber == self.selectedUserIndex {
|
if itemNumber == self.selectedFriendIndex {
|
||||||
return big + 0.2
|
return big + 0.2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user