Skip to content

Default example produces: Expected first argument to collection() to be a CollectionReference #280

@dyerrington

Description

@dyerrington

Here's my basic setup:

import {
  Admin,
  Resource,
  ListGuesser,
  EditGuesser,
  ShowGuesser,
  SimpleShowLayout,
  Show,
  Create, SimpleForm,
  List,
  Edit,
  Datagrid,
  TextField,
} from "react-admin";

// import { dataProvider } from "./dataProvider";
// import { authProvider } from "./authProvider";
import { PostList, PostShow, PostCreate, PostEdit } from "./posts";

import UserIcon from '@material-ui/icons/People';
import CommentIcon from '@material-ui/icons/Comment';
import CustomLoginPage from "./LoginPage";

import {
    FirebaseAuthProvider,
    FirebaseDataProvider,
  } from 'react-admin-firebase';
  
import "firebase/compat/firestore"; 
import "firebase/compat/storage";

import firebase from "firebase/compat/app";

const firebaseConfig = {
    apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
    authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
    projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
    storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
    messagingSenderId: process.env.REACT_APP_FIREBASE_SENDER_ID,
    appId: process.env.REACT_APP_FIREBASE_APP_ID 
}


let firebaseApp;

if (!firebase.apps.length) {
    firebaseApp = firebase.initializeApp(firebaseConfig);
} else {
    firebaseApp = firebase.app(); // if already initialized, use that one
}

// const db = firebase.firestore(); // Add this line
// const storage = firebase.storage();

const dataProvider = FirebaseDataProvider(firebaseConfig, {
    logging: true,
    // watch: ['posts', 'comments'],
    // rootRef: 'rootrefcollection/QQG2McwjR2Bohi9OwQzP',
    // rootRef: 'test/p4BPibI6rQyoYjqlPP0Q',
    // rootRef: 'test/sandbox',
    app: firebaseApp,
    // watch: ['posts'];
    // dontwatch: ['comments'];
    // persistence: 'local',
    persistence: 'session',
    // disableMeta: true
    dontAddIdFieldToDoc: true,
    lazyLoading: {
      enabled: true,
    },
    // firestoreCostsLogger: {
    //   enabled: true,
    // },
});

console.log("Firestore instance: ", dataProvider);
console.log("Firebase App: ", firebaseApp);

const authProvider = FirebaseAuthProvider(firebaseConfig);

export const App = () => (
  <Admin dataProvider={dataProvider} authProvider={authProvider} loginPage={CustomLoginPage}>
    <Resource
    name="posts"
    list={PostList}
    show={PostShow}
    create={PostCreate}
    edit={PostEdit}
    />
  </Admin>
);

I have no problem accessing resources with Firebase library directly:

const db = firebaseApp.firestore();

db.collection("posts").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(doc.id, " => ", doc.data());
    });
}).catch((error) => {
    console.log("Error getting documents: ", error);
});

Also seems to let me on just fine with the test user / pass I setup in Firebase so seems at least the API creds are ok. Since this is my first time using this library, I'm sure it's something really dumb that I'm overlooking? Whenver I add the <Resource /> into <Admin />, I get this error:

FirebaseError: [code=invalid-argument]: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore

image

Thanks in advance for any help!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions