Install module
yarn add @dck/bs-firebaseAdd it to bsconfig.json
{
"bs-dependencies": [
...,
"@dck/bs-firebase"
]
}open BsFirebase;
[@bs.module]
external firebaseConfig: firebaseConfig = "./config/firebase-config.json";
firebase->initializeApp(firebaseConfig);First include the 'firebase/auth' module in our app bundle.
BsFirebase.Auth.(require);
firebase
->auth
->Auth.onAuthStateChanged(user => {
switch (user->Js.Nullable.toOption) {
| None => ()
| Some(u) =>
Js.log3(
u->Auth.User.uid,
u->Auth.User.email,
u->Auth.User.displayName,
)
}
});
let signInWithGoogle = () => firebase->auth->Auth.signInWithPopup(Auth.Provider.google());
let signInWithEmailAndPassword = (~email, ~password) => firebase->auth->Auth.signInWithEmailAndPassword(~email, ~password);
let signOut = () => firebase->auth->Auth.signOut();Js.Promise.(
BsFirebase.(firebase->auth->Auth.signInWithEmailAndPassword(~email, ~password))
|> then_(value => {
Js.log(value);
Js.Promise.resolve(value);
})
|> ignore
);Js.Promise.(
firebase->auth->Auth.currentUser->Auth.User.getIdToken()
|> then_(value => {
Js.log(value);
Js.Promise.resolve(value);
})
|> ignore
);let fetchAll = () => {
firebase
->firestore
->Firestore.collection("mycollection")
->Firestore.Collection.get()
|> Js.Promise.then_(querySnapshot =>
querySnapshot
->Firestore.QuerySnapshot.docs
->Belt.Array.map(snapshot => {
let data = snapshot->Firestore.DocRef.data();
Js.log(snapshot->Firestore.DocRef.id);
Js.log(data##someAttribute);
data;
})
|> Js.Promise.resolve
);
};let fetchItem = (id) => {
firebase
->firestore
->Firestore.collection("mycollection")
->Firestore.Collection.doc(id)
->Firestore.Collection.DocRef.get()
|> Js.Promise.then_(doc => {
let data = doc->Firestore.DocSnapshot.data();
Js.log(data);
data;
});
}let create = (title, description) =>
firebase
->firestore
->Firestore.collection("collection")
->Firestore.Collection.add({
"title": title,
"description": description,
});let update = (id, title) =>
firebase
->firestore
->Firestore.collection("collection")
->Firestore.Collection.doc(id)
->Firestore.Collection.DocRef.set(
{"title": title},
~options=Firestore.Collection.DocRef.setOptions(~merge=true),
(),
);let remove = (id: string) =>
firebase
->firestore
->Firestore.collection("mycollection")
->Firestore.Collection.doc(id)
->Firestore.Collection.DocRef.delete();