import { Permissions, webMethod } from "wix-web-module";
import { comments } from "wix-comments.v2";
import { elevate } from "wix-auth";
import { members as wixMembers } from 'wix-members-backend';
import { members as groupMembers } from "@wix/groups";
import { auth } from "@wix/essentials";
import { getUserGroupRole } from './groupComments.web';
const COMMENTS_APP_ID = "91c9d6a7-6667-41fb-b0b4-7d3b3ff0b02e";
// ─────────────────────────────────────────────
// Get member profile data
// ─────────────────────────────────────────────
async function getMemberData(memberId) {
try {
const elevatedGetMember = elevate(wixMembers.getMember);
const member = await elevatedGetMember(memberId);
let photoUrl = null;
if (member.profile?.profilePhoto) {
photoUrl = typeof member.profile.profilePhoto === 'string'
? member.profile.profilePhoto
: member.profile.profilePhoto.url || null;
}
return {
nickname: member.profile?.nickname || member.profile?.slug || 'Anonymous',
profilePhoto: photoUrl
};
} catch (error) {
console.error('Error getting member:', error);
return { nickname: 'Anonymous', profilePhoto: null };
}
}
// ─────────────────────────────────────────────
// Get ALL group members (both ADMIN + MEMBER)
// via SDK queryGroupMembers, filtered by role
// ─────────────────────────────────────────────
async function getAllGroupMembers(groupId) {
const elevatedQuery = auth.elevate(groupMembers.queryGroupMembers);
let allMembers = [];
// Fetch admins
try {
const adminRes = await elevatedQuery(groupId).eq('role', 'ADMIN').limit(100).find();
const adminItems = adminRes.items || [];
console.log('getAllGroupMembers admins:', adminItems.length);
allMembers = allMembers.concat(adminItems);
} catch (e) {
console.error('Failed fetching admins:', e.message);
}
// Fetch regular members with pagination
let offset = 0;
const limit = 100;
let hasMore = true;
while (hasMore) {
try {
const res = await elevatedQuery(groupId).eq('role', 'MEMBER').skip(offset).limit(limit).find();
const batch = res.items || [];
console.log(`getAllGroupMembers members batch: offset=${offset}, got=${batch.length}`);
allMembers = allMembers.concat(batch);
offset += batch.length;
hasMore = batch.length === limit;
} catch (e) {
console.error('Failed fetching members batch:', e.message);
hasMore = false;
}
}
console.log('getAllGroupMembers total:', allMembers.length);
return allMembers;
}
// ─────────────────────────────────────────────
// Get comments for a specific post
// ─────────────────────────────────────────────
async function getPostComments(postId) {
try {
const elevatedQuery = elevate(comments.queryComments);
const queryBuilder = await elevatedQuery(COMMENTS_APP_ID);
const response = await queryBuilder.find();
const allItems = response.items || [];
return allItems.filter(c => c.resourceId && c.resourceId.includes(postId));
} catch (error) {
console.error('Error in getPostComments (submissions):', error);
return [];
}
}
// ─────────────────────────────────────────────
// EXPORTED: Get submission status (group admin only)
// ─────────────────────────────────────────────
export const getSubmissionStatus = webMethod(
Permissions.SiteMember,
async (groupId, postId) => {
try {
const role = await getUserGroupRole(groupId);
console.log('getSubmissionStatus — role:', role);
if (role !== 'ADMIN') throw new Error('Only group admins can view submission status');
const [allGroupMembers, postComments] = await Promise.all([
getAllGroupMembers(groupId),
getPostComments(postId)
]);
console.log('Group members:', allGroupMembers.length, 'Post comments:', postComments.length);
const submittedMemberIds = new Set();
const markedByMemberId = {};
postComments.forEach(c => {
if (c.author?.memberId) {
submittedMemberIds.add(c.author.memberId);
if (c.marked) {
markedByMemberId[c.author.memberId] = true;
} else if (markedByMemberId[c.author.memberId] === undefined) {
markedByMemberId[c.author.memberId] = false;
}
}
});
const submitted = [];
const missing = [];
const profilePromises = allGroupMembers.map(async (groupMember) => {
const memberRole = (groupMember.role?.value || 'MEMBER').toUpperCase();
// Skip admins from the submission list
if (memberRole === 'ADMIN') return null;
const profile = await getMemberData(groupMember.memberId);
const entry = {
memberId: groupMember.memberId,
nickname: profile.nickname,
profilePhoto: profile.profilePhoto,
marked: markedByMemberId[groupMember.memberId] || false
};
if (submittedMemberIds.has(groupMember.memberId)) {
submitted.push(entry);
} else {
missing.push(entry);
}
});
await Promise.all(profilePromises);
console.log(`Submission status: ${submitted.length} submitted, ${missing.length} missing`);
return { submitted, missing };
} catch (error) {
console.error('Error getting submission status:', error);
throw error;
}
}
);
the problem is that I try to fetch the current group’s members by the id using wix groups v2 but it doesn’t return anything, member list is always being empty, no error shown, and I found no way to pass this problem. How do I fix this?