import { mutate as globalMutate } from 'swr' import { doc, setDoc as _setDoc } from '@lemasc/firebase-wrapper/firestore' import { db, empty, parseUpdateData } from '../../helpers' import type { PartialWithFieldValue } from '@lemasc/firebase-wrapper/firestore' import { CacheUpdateOptions, Document, isMergeFieldOptions, isMergeOptions, StaticMutateOptions, } from '../../types' import { mutateDocFromCollection } from '../../internals' const setDoc = < Data extends Record, Doc extends Document = Document >( path: string | null, data: PartialWithFieldValue, { ignoreLocalMutation, mutate, ...options }: CacheUpdateOptions & StaticMutateOptions = {} ) => { if (path === null) return null const ref = doc(db(), path) const mutateFn = mutate ?? globalMutate if (!ignoreLocalMutation) { mutateFn( path, (prevState = empty.object) => { if (isMergeOptions(options) || isMergeFieldOptions(options)) { return parseUpdateData(prevState, data as any, options) } return prevState }, false ) mutateDocFromCollection(ref, data as any, { mutate, ...options, }) } return _setDoc(ref, data, options) } export { setDoc }