react-firehooks
Version:
Lightweight dependency-free collection of React hooks for Firebase
53 lines (52 loc) • 1.56 kB
JavaScript
import { aggregateFieldEqual, getDoc, getDocFromCache, getDocFromServer, getDocs, getDocsFromCache, getDocsFromServer, queryEqual, refEqual, } from "firebase/firestore";
/**
* @internal
*/
export async function getDocFromSource(reference, source) {
switch (source) {
case "cache":
return await getDocFromCache(reference);
case "server":
return await getDocFromServer(reference);
case "default":
return await getDoc(reference);
}
}
/**
* @internal
*/
export async function getDocsFromSource(query, source) {
switch (source) {
case "cache":
return await getDocsFromCache(query);
case "server":
return await getDocsFromServer(query);
case "default":
return await getDocs(query);
}
}
/**
* @internal
*/
export function isDocRefEqual(a, b) {
const areBothUndefined = a === undefined && b === undefined;
const areSameRef = a !== undefined && b !== undefined && refEqual(a, b);
return areBothUndefined || areSameRef;
}
/**
* @internal
*/
export function isQueryEqual(a, b) {
const areBothUndefined = a === undefined && b === undefined;
const areSameRef = a !== undefined && b !== undefined && queryEqual(a, b);
return areBothUndefined || areSameRef;
}
/**
* @internal
*/
export function isAggregateSpecEqual(a, b) {
if (Object.keys(a).length !== Object.keys(b).length) {
return false;
}
return Object.entries(a).every(([key, value]) => aggregateFieldEqual(value, b[key]));
}