Revamped friend system

This commit is contained in:
Sterling Archer committed 2026-06-28 20:33:45 -07:00
1 parent 5783f00888
commit e4495440f0
1 file changed
+13 -7
+13 -7
View File
@@ -948,10 +948,10 @@ function loadFriendsRealtime() {
friendSteps = {}; friendSteps = {};
snap.forEach(d => { friendsData[d.id] = d.data(); }); snap.forEach(d => { friendsData[d.id] = d.data(); });
const approvedUids = Object.entries(friendsData) const approvedUids = Object.entries(friendsData)
.filter(([uid, data]) => data.approved === true && data.enabled === true) .filter(([uid, data]) => data.status === 'active')
.map(([uid]) => uid); .map(([uid]) => uid);
const pendingUids = Object.entries(friendsData) const pendingUids = Object.entries(friendsData)
.filter(([uid, data]) => data.approved === false && data.enabled !== false) .filter(([uid, data]) => data.status === 'pending')
.map(([uid]) => uid); .map(([uid]) => uid);
await loadFriendProfilesAndSteps(approvedUids); await loadFriendProfilesAndSteps(approvedUids);
for (const uid of pendingUids) { for (const uid of pendingUids) {
@@ -982,13 +982,13 @@ function loadFriendsRealtime() {
function getMutualFriendUids() { function getMutualFriendUids() {
return Object.entries(friendsData) return Object.entries(friendsData)
.filter(([uid, data]) => data.approved === true && data.enabled === true) .filter(([uid, data]) => data.status === 'active')
.map(([uid]) => uid); .map(([uid]) => uid);
} }
function getPendingFriendUids() { function getPendingFriendUids() {
return Object.entries(friendsData) return Object.entries(friendsData)
.filter(([uid, data]) => data.approved === false && data.enabled !== false) .filter(([uid, data]) => data.status === 'pending')
.map(([uid]) => uid); .map(([uid]) => uid);
} }
@@ -1168,7 +1168,7 @@ window.bulkRemoveFriends = async function() {
async function doRemoveFriend(friendUid) { async function doRemoveFriend(friendUid) {
const idToken = await currentUser.getIdToken(); const idToken = await currentUser.getIdToken();
await fetch(`${window.STEPMATES_CONFIG.friendRequestUrl}?action=remove&fromUid=${currentUser.uid}&toUid=${friendUid}&idToken=${idToken}`); await fetch(`${window.STEPMATES_CONFIG.friendRequestUrl}?action=remove&fromUid=${currentUser.uid}&toUid=${friendUid}&idToken=${idToken}`);
if (friendsData[friendUid]) friendsData[friendUid].enabled = false; if (friendsData[friendUid]) friendsData[friendUid].status = 'removed';
delete friendProfiles[friendUid]; delete friendProfiles[friendUid];
delete friendSteps[friendUid]; delete friendSteps[friendUid];
renderLeaderboard(); renderLeaderboard();
@@ -1176,13 +1176,19 @@ async function doRemoveFriend(friendUid) {
} }
window.approveFriend = async function(uid) { window.approveFriend = async function(uid) {
await updateDoc(doc(db, 'friends', currentUser.uid, 'list', uid), { approved: true }); try {
const idToken = await currentUser.getIdToken();
await fetch(`${STEPMATES_CONFIG.acceptFriendUrl}?fromUid=${currentUser.uid}&requesterUid=${uid}&idToken=${encodeURIComponent(idToken)}`);
await loadFriendProfilesAndSteps([uid]); await loadFriendProfilesAndSteps([uid]);
showToast('Friend added! 🎉', 'success'); showToast('Friend added! 🎉', 'success');
} catch(e) {
await updateDoc(doc(db, 'friends', currentUser.uid, 'list', uid), { status: 'active' });
showToast('Friend added! 🎉', 'success');
}
} }
window.denyFriend = async function(uid) { window.denyFriend = async function(uid) {
await updateDoc(doc(db, 'friends', currentUser.uid, 'list', uid), { enabled: false }); await updateDoc(doc(db, 'friends', currentUser.uid, 'list', uid), { status: 'removed' });
showToast('Request declined', ''); showToast('Request declined', '');
} }