`;
document.getElementById('download-profile-btn').addEventListener('click', () => downloadProfileAsPDF(profile));
};
const renderPartnerList = (users) => {
partnerList.innerHTML = '';
if (users.length === 0) {
partnerList.innerHTML = '
`;
partnerList.appendChild(card);
});
};
// --- DATA FETCHING & FILTERING ---
const fetchAllUsers = async () => {
const usersCol = collection(db, "artifacts", appId, "public", "data", "profiles");
const speaksFilter = filterSpeaksInput.value.trim().toLowerCase();
const learningFilter = filterLearningInput.value.trim().toLowerCase();
const userSnapshot = await getDocs(usersCol);
let allUsers = [];
userSnapshot.forEach(doc => {
if (doc.id !== currentUser.uid) { // Don't show the current user
allUsers.push(doc.data());
}
});
const filteredUsers = allUsers.filter(user => {
const speaksMatch = !speaksFilter || user.speaks.includes(speaksFilter);
const learningMatch = !learningFilter || user.learning.includes(learningFilter);
return speaksMatch && learningMatch;
});
renderPartnerList(filteredUsers);
};
filterSpeaksInput.addEventListener('input', fetchAllUsers);
filterLearningInput.addEventListener('input', fetchAllUsers);
// --- PDF DOWNLOAD ---
const downloadProfileAsPDF = (profile) => {
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
doc.setFontSize(22);
doc.text('Language Exchange Profile', 105, 20, { align: 'center' });
doc.autoTable({
startY: 30,
head: [['Field', 'Information']],
body: [
['Name', profile.name],
['Location', profile.location],
['Languages Spoken', profile.speaks.join(', ')],
['Languages Learning', profile.learning.join(', ')]
],
theme: 'grid'
});
doc.save(`${profile.name}-profile.pdf`);
};
});
No partners found. Try adjusting your filters.
'; return; } users.forEach(user => { const card = document.createElement('div'); card.className = 'profile-card bg-white p-4 rounded-lg shadow border'; card.innerHTML = `${user.name}
${user.location}
SPEAKS:
${user.speaks.map(lang => `${lang}`).join('')}
LEARNING:
${user.learning.map(lang => `${lang}`).join('')}
