A firebase data provider for the React Admin framework
A firebase data provider for the React-Admin framework. It maps collections from the Firebase database (Firestore) to your react-admin application. It's an npm package!
---
_Pull requests welcome!!_
(GET, POST, GET_LIST ect...) fieldyarn add react-admin-firebase firebaseor
npm install --save react-admin-firebase firebase
- Demo Project (javascript)
- Demo Project (typescript)
posts collection in the firebase firestore database`` javascript
import {
FirebaseAuthProvider,
FirebaseDataProvider,
FirebaseRealTimeSaga
} from 'react-admin-firebase';
const config = {
apiKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
authDomain: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
databaseURL: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
projectId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
storageBucket: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
messagingSenderId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
};
// All options are optional
const options = {
// Use a different root document to set your resource collections, by default it uses the root collections of firestore
rootRef: 'root-collection/some-doc' | () => 'root-collection/some-doc',
// Your own, previously initialized firebase app instance
app: firebaseAppInstance,
// Enable logging of react-admin-firebase
logging: true,
// Resources to watch for realtime updates, will implicitly watch all resources by default, if not set.
watch: ['posts'],
// Resources you explicitly dont want realtime updates for
dontwatch: ['comments'],
// Authentication persistence, defaults to 'session', options are 'session' | 'local' | 'none'
persistence: 'session',
// Disable the metadata; 'createdate', 'lastupdate', 'createdby', 'updatedby'
disableMeta: false,
// Have custom metadata field names instead of: 'createdate', 'lastupdate', 'createdby', 'updatedby'
renameMetaFields: {
created_at: 'my_created_at', // default: 'createdate'
created_by: 'my_created_by', // default: 'createdby'
updated_at: 'my_updated_at', // default: 'lastupdate'
updated_by: 'my_updated_by', // default: 'updatedby'
},
// Prevents document from getting the ID field added as a property
dontAddIdFieldToDoc: false,
// Adds 'deleted' meta field for non-destructive deleting functionality
// NOTE: Hides 'deleted' records from list views unless overridden by filtering for {deleted: true}
softDelete: false,
// Changes meta fields like 'createdby' and 'updatedby' to store user IDs instead of email addresses
associateUsersById: false,
// Casing for meta fields like 'createdby' and 'updatedby', defaults to 'lower', options are 'lower' | 'camel' | 'snake' | 'pascal' | 'kebab'
metaFieldCasing: 'lower',
// Instead of saving full download url for file, save just relative path and then get download url
// when getting docs - main use case is handling multiple firebase projects (environments)
// and moving/copying documents/storage files between them - with relativeFilePaths, download url
// always point to project own storage
relativeFilePaths: false,
// Add file name to storage path, when set to true the file name is included in the path
useFileNamesInStorage: false,
// Use firebase sdk queries for pagination, filtering and sorting
lazyLoading: {
enabled: false
},
// Logging of all reads performed by app (additional feature, for lazy-loading testing)
firestoreCostsLogger: {
enabled: false,
localStoragePrefix // optional
},
// Function to transform documentData before they are written to Firestore
transformToDb: (resourceName, documentData, documentId) => documentDataTransformed
}
const dataProvider = FirebaseDataProvider(config, options);
const authProvider = FirebaseAuthProvider(config, options);
const firebaseRealtime = FirebaseRealTimeSaga(dataProvider, options);
`
` javascript
import * as React from 'react';
import { Admin, Resource } from 'react-admin';
import { PostList, PostShow, PostCreate, PostEdit } from "./posts";
import {
FirebaseAuthProvider,
FirebaseDataProvider,
FirebaseRealTimeSaga
} from 'react-admin-firebase';
const config = {
apiKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
authDomain: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
databaseURL: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
projectId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
storageBucket: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
messagingSenderId: "aaaaaaaaaaaaaaaaaaaaaaaaaaa",
};
const options = {};
const dataProvider = FirebaseDataProvider(config, options);
...
>
...
`FirebaseAuthProviderAuth Provider
Using the you can allow authentication in the application.
` javascript`
const dataProvider = FirebaseDataProvider(config);
const authProvider = FirebaseAuthProvider(config);
...
authProvider={authProvider}
>
...
Also checkout how to login with: Google, Facebook, Github etc... (Example Here)
And you might want a "Forgot password" button... (Example Here)
#### Note
To get the currently logged in user run const user = await authProvider.checkAuth(), this will return the firebase user object, or null if there is no currently logged in user.
NOTE: Realtime updates were removed in react-admin v3.x (see https://github.com/marmelab/react-admin/pull/3908). As such, react-admin-firebase v3.x also does not support Realtime Updates. However, much of the original code used for this functionality in react-admin v2.x remains - including the documentation below. For updates on the implementation of realtime please follow these issues:
- https://github.com/benwinding/react-admin-firebase/issues/49
- https://github.com/benwinding/react-admin-firebase/issues/57
Get realtime updates from the firebase server instantly on your tables, with minimal overheads, using rxjs observables!
` javascript`
...
import {
FirebaseRealTimeSaga,
FirebaseDataProvider
} from 'react-admin-firebase';
...
const dataProvider = FirebaseDataProvider(config);
const firebaseRealtime = FirebaseRealTimeSaga(dataProvider);
...
customSagas={[firebaseRealtime]}
>
...
` javascript`
...
const dataProvider = FirebaseDataProvider(config);
const options = {
watch: ['posts', 'comments'],
dontwatch: ['users']
}
const firebaseRealtime = FirebaseRealTimeSaga(dataProvider, options);
...
Monitor file upload data using custom React component which listen for following events (CustomEvent):
- FILE_UPLOAD_WILL_STARTFILE_UPLOAD_START
- FILE_UPLOAD_PROGRESS
- FILE_UPLOAD_PAUSED
- FILE_UPLOAD_CANCELD
- FILE_UPLOAD_COMPLETE
- FILE_SAVED
-
All events have data passed in details key:
- fileName: the file anmedata
- : percentage for FILE_UPLOAD_PROGRESS
Events are sent to HTML DOM element with id "eventMonitor". See demo implementation for example at src-demo/src/App.js;
?1. git clone https://github.com/benwinding/react-admin-firebaseyarn
2. yarn start-demo
3.
Now all local changes in the library source code can be tested immediately in the demo app.
- yarn test-watchyarn test`
-
