39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import { ref, onValue } from 'firebase/database';
|
|
import { db } from '../lib/firebase';
|
|
import type { Match, Escalao } from '../types/database';
|
|
|
|
export function useMatches(escalao: Escalao, jornada: number) {
|
|
const [matches, setMatches] = useState<Match[]>([]);
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState<Error | null>(null);
|
|
|
|
useEffect(() => {
|
|
// Referência para jornadas/[escalao]/[numero_jornada]
|
|
const matchesRef = ref(db, `jornadas/${escalao}/${jornada}`);
|
|
|
|
const unsubscribe = onValue(matchesRef, (snapshot) => {
|
|
const data = snapshot.val();
|
|
if (data) {
|
|
// Converte o objeto { "id": matchData } num array de Match
|
|
const matchesList: Match[] = Object.entries(data).map(([id, matchData]: [string, any]) => ({
|
|
id,
|
|
...matchData,
|
|
jornadaId: jornada.toString()
|
|
}));
|
|
setMatches(matchesList);
|
|
} else {
|
|
setMatches([]);
|
|
}
|
|
setLoading(false);
|
|
}, (err) => {
|
|
setError(err);
|
|
setLoading(false);
|
|
});
|
|
|
|
return () => unsubscribe();
|
|
}, [escalao, jornada]);
|
|
|
|
return { matches, loading, error };
|
|
}
|