Language Exchange Partner Finder

Language Exchange Partner Finder

Find people from around the world to practice languages with.

Loading your profile...

LEARNING:

${profile.learning.map(lang => `${lang}`).join('')}
`; document.getElementById('download-profile-btn').addEventListener('click', () => downloadProfileAsPDF(profile)); }; const renderPartnerList = (users) => { partnerList.innerHTML = ''; if (users.length === 0) { partnerList.innerHTML = '

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('')}
`; 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`); }; });
Scroll to Top