This fork fixes a number of issues in the original repository, which is no longer maintained. See more here: nandorojo#117 (comment)
This is a collection of hooks to simplify the use of firestore with SWR. All hooks are tested against a real firebase project.
Important: Make sure to memoize options if passed in to either useDocument or useCollection.
import { initializeApp } from 'firebase/app';
initializeApp(options); // setup firestore
// ...
import { useDocument, useCollection, UseDocumentOptions, UseCollectionOptions } from 'swr-firestore';
type Fruit = {name: string};
// below options declared outside to not require memoization
const documentListenOptions: UseDocumentOptions = {listen: true};
const collectionListenOptions: UseCollectionOptions = {listen: true};
const collectionQueryOptions: UseCollectionOptions = {constraints: where('color', '==', 'yellow')};
function TestComponent() {
const { data: banana } = useDocument<Fruit>('fruits/banana');
const { data: banana } = useDocument<Fruit>('fruits/banana', documentListenOptions); // subscribe to changes
const { data: fruits } = useCollection<Fruit>('fruits');
const { data: fruits } = useCollection<Fruit>('fruits', collectionListenOptions); // subscribe to changes
const { data: yellowFruits } = useCollection<Fruit>('fruits', collectionQueryOptions);
}
- Typescript Enabled
- Firebase 9.X
- SWR 1.X
- Minimal - no side effects, all hooks are optional and expose as much of firestore's functionality as possible. It's up to you how to configure firebase and SWR.
- Tested against real data - tests run against a real firestore project
- Retrieving a collection will automatically update SWR cache for individual documents
- Listening/Subscribing to changes
- useCollection
- useDocument
- Jest has been fixed at version 25.x due to jestjs/jest#7780 (comment) (Issue seems to be fixed now, TODO: update)
- Firebase has been fixed at version 9.1.3 due to firebase/firebase-js-sdk#5687 (Issue seems to be fixed now, TODO: update)
In order to run the tests you need a firebase project. The test data will be created at the start of the test run.
yarn test
MIT