import { mutate as globalMutate } from 'swr' import { getDocs } from '@lemasc/firebase-wrapper/firestore' import { createQuery } from './query' import { empty, validateAndParseDate } from '../../helpers' import type { CollectionQueryType, Document, FetchStaticOptions, StaticSWRConfig, } from '../../types' export const getCollection = async < Data extends Record, Doc extends Document = Document >( path: string, query: CollectionQueryType = empty.object, options: FetchStaticOptions & Pick ) => { const ref = createQuery(path, query) const mutateStatic = options.mutate ?? globalMutate const data: Doc[] = await getDocs(ref).then((querySnapshot) => { return Promise.all( querySnapshot.docs.map(async (doc) => { const document = await validateAndParseDate(doc, options) // update individual docs in the cache mutateStatic(doc.ref.path, document, false) return document }) ) }) return data }