wrbapp/frontend/stores/contestStore.js
Xeovalyte 6fb439a754
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
large backend recreation
2023-03-20 11:23:46 +01:00

75 lines
2.0 KiB
JavaScript

import { getDocs, collection, getFirestore, query } from 'firebase/firestore'
export const useContestStore = defineStore('contest', () => {
// General
const db = getFirestore()
// Contest competitors
const competitors = ref([])
const getCompetitors = async () => {
if (competitors.value[0]) return
const querySnapshot = await getDocs(collection(db, "competitors"))
querySnapshot.forEach((doc) => {
const data = doc.data()
data.checked = true
competitors.value.push(data)
})
}
const selectCompetitors = (x, relatiecodes) => {
if (x === 'user') {
competitors.value.forEach(competitor => {
if (relatiecodes.includes(competitor.relatiecode)) {
competitor.checked = true
} else {
competitor.checked = false
}
})
} else if (x === 'all') {
competitors.value.forEach(competitor => competitor.checked = true)
} else if (x === 'none') {
competitors.value.forEach(competitor => competitor.checked = false)
}
}
// Contest Timings
const timings = ref([])
const filteredTimings = computed(() => {
timings.value = timings.value.sort((a, b) => a.time.combined.localeCompare(b.time.combined))
timings.value.forEach((time, index) => {
if (time.dsq === true) {
timings.value.push(timings.value.splice(index, 1)[0])
}
})
return timings.value.filter(a => competitors.value.filter(b => b.checked === true).map(x => x.relatiecode).includes(a.relatiecode))
})
const getTimings = async () => {
if (timings.value[0]) return;
if (!competitors.value[0]) await getCompetitors()
const timingsRef = collection(db, "timings");
const q = query(timingsRef);
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
const data = doc.data()
data.id = doc.id
data.contest.date = data.contest.date.toDate()
timings.value.push(data)
});
}
return { competitors, getCompetitors, getTimings, timings, filteredTimings, selectCompetitors }
})