Files
Map-Jurnal/src/lib/layout/selection.svelte.js

59 lines
1.4 KiB
JavaScript

import { db } from '../firebase.js';
import { doc, onSnapshot, updateDoc, arrayUnion, arrayRemove } from 'firebase/firestore';
let selected = $state(new Set());
let totalCountries = $state(0);
let homeCountryCode = $state(null);
let _uid = null;
let _unsubscribe = null;
export function initSelectionListener(uid) {
if (_unsubscribe) _unsubscribe();
_uid = uid;
const userRef = doc(db, 'users', uid);
_unsubscribe = onSnapshot(userRef, (snap) => {
if (snap.exists()) {
const codes = snap.data().visitedCountries || [];
selected = new Set(codes);
homeCountryCode = snap.data().homeCountryCode || null;
}
});
}
export function toggle(id) {
const was = selected.has(id);
const next = new Set(selected);
if (was) next.delete(id);
else next.add(id);
selected = next;
if (_uid) {
const userRef = doc(db, 'users', _uid);
if (was) updateDoc(userRef, { visitedCountries: arrayRemove(id) });
else updateDoc(userRef, { visitedCountries: arrayUnion(id) });
}
}
export function clearAll() {
selected = new Set();
if (_uid) {
const userRef = doc(db, 'users', _uid);
updateDoc(userRef, { visitedCountries: [] });
}
}
export function getSelected() {
return selected;
}
export function setTotalCount(n) {
totalCountries = n;
}
export function getTotalCount() {
return totalCountries;
}
export function getHomeCountryCode() {
return homeCountryCode;
}