@@ -6,6 +6,10 @@ import { createCallable, wrapDisplayName } from './utils'
66import ReduxFirestoreContext from './ReduxFirestoreContext'
77import ReactReduxFirebaseContext from './ReactReduxFirebaseContext'
88
9+ // Reserved props that should not be passed into a firebaseConnect wrapped
10+ // component. Will throw an error if they are.
11+ const RESERVED_PROPS = [ 'firebase' , 'firestore' ]
12+
913/**
1014 * Function that creates a Higher Order Component which
1115 * automatically listens/unListens to provided firebase paths using
@@ -94,22 +98,38 @@ export const createFirestoreConnect = (storeKey = 'store') => (
9498
9599 const HoistedComp = hoistStatics ( FirestoreConnectWrapped , WrappedComponent )
96100
97- const FirestoreConnect = props => (
98- < ReactReduxFirebaseContext . Consumer >
99- { firebase => (
100- < ReduxFirestoreContext . Consumer >
101- { firestore => (
102- < HoistedComp
103- firestore = { firestore }
104- firebase = { firebase }
105- dispatch = { firebase . dispatch }
106- { ...props }
107- />
108- ) }
109- </ ReduxFirestoreContext . Consumer >
110- ) }
111- </ ReactReduxFirebaseContext . Consumer >
112- )
101+ const FirestoreConnect = props => {
102+ // Check that reserved props are not supplied to a FirebaseConnected
103+ // component and if they are, throw an error so the developer can rectify
104+ // this issue.
105+ const clashes = Object . keys ( props ) . filter ( k => RESERVED_PROPS . includes ( k ) )
106+
107+ if ( clashes . length > 0 ) {
108+ const moreThanOne = clashes . length > 1
109+ throw new Error (
110+ `Supplied prop${ moreThanOne ? 's' : '' } "${ clashes . join ( '", "' ) } " ${
111+ moreThanOne ? 'are' : 'is'
112+ } reserved for internal firestoreConnect() usage.`
113+ )
114+ }
115+
116+ return (
117+ < ReactReduxFirebaseContext . Consumer >
118+ { firebase => (
119+ < ReduxFirestoreContext . Consumer >
120+ { firestore => (
121+ < HoistedComp
122+ { ...props }
123+ dispatch = { firebase . dispatch }
124+ firestore = { firestore }
125+ firebase = { firebase }
126+ />
127+ ) }
128+ </ ReduxFirestoreContext . Consumer >
129+ ) }
130+ </ ReactReduxFirebaseContext . Consumer >
131+ )
132+ }
113133
114134 FirestoreConnect . displayName = wrapDisplayName (
115135 WrappedComponent ,
0 commit comments