added admin page
This commit is contained in:
@@ -4,7 +4,13 @@ import {
|
||||
orderBy,
|
||||
onSnapshot,
|
||||
addDoc,
|
||||
getDocs,
|
||||
doc,
|
||||
updateDoc,
|
||||
deleteDoc,
|
||||
writeBatch,
|
||||
serverTimestamp,
|
||||
Timestamp,
|
||||
} from 'firebase/firestore';
|
||||
import { db } from './firebase.js';
|
||||
|
||||
@@ -45,6 +51,62 @@ export function calculateTotal(donors) {
|
||||
return donors.reduce((sum, d) => sum + (d.amount || 0), 0);
|
||||
}
|
||||
|
||||
// ===== Admin Operations =====
|
||||
|
||||
export async function getDonors() {
|
||||
const q = query(donorsRef, orderBy('date', 'desc'));
|
||||
const snapshot = await getDocs(q);
|
||||
const donors = [];
|
||||
snapshot.forEach((d) => donors.push({ id: d.id, ...d.data() }));
|
||||
return donors;
|
||||
}
|
||||
|
||||
export async function addDonorWithDate({ name, amount, classYear, message, anonymous, date }) {
|
||||
const dateValue = date ? Timestamp.fromDate(new Date(date)) : serverTimestamp();
|
||||
return addDoc(donorsRef, {
|
||||
name: anonymous ? 'Anonymous' : name,
|
||||
amount: Number(amount),
|
||||
classYear: classYear || '',
|
||||
message: message || '',
|
||||
anonymous: !!anonymous,
|
||||
date: dateValue,
|
||||
});
|
||||
}
|
||||
|
||||
export async function updateDonor(id, fields) {
|
||||
return updateDoc(doc(db, 'donors', id), fields);
|
||||
}
|
||||
|
||||
export async function deleteDonor(id) {
|
||||
return deleteDoc(doc(db, 'donors', id));
|
||||
}
|
||||
|
||||
export async function addDonorsBatch(donorsArray) {
|
||||
const chunks = [];
|
||||
for (let i = 0; i < donorsArray.length; i += 500) {
|
||||
chunks.push(donorsArray.slice(i, i + 500));
|
||||
}
|
||||
let imported = 0;
|
||||
for (const chunk of chunks) {
|
||||
const batch = writeBatch(db);
|
||||
for (const d of chunk) {
|
||||
const ref = doc(collection(db, 'donors'));
|
||||
const dateValue = d.date ? Timestamp.fromDate(new Date(d.date)) : serverTimestamp();
|
||||
batch.set(ref, {
|
||||
name: d.anonymous ? 'Anonymous' : (d.name || 'Anonymous'),
|
||||
amount: Number(d.amount) || 0,
|
||||
classYear: d.classYear || '',
|
||||
message: d.message || '',
|
||||
anonymous: !!d.anonymous,
|
||||
date: dateValue,
|
||||
});
|
||||
}
|
||||
await batch.commit();
|
||||
imported += chunk.length;
|
||||
}
|
||||
return imported;
|
||||
}
|
||||
|
||||
export function sortDonors(donors, sortBy) {
|
||||
const sorted = [...donors];
|
||||
if (sortBy === 'amount') {
|
||||
|
||||
Reference in New Issue
Block a user