From c2b045e55e74513977d4fdcf4b643a0f29179d27 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 10 Jul 2020 11:39:02 -0700 Subject: [PATCH] fix: made firebase context a function to support SSR use cases --- README.md | 6 ++++-- package-lock.json | 2 +- package.json | 2 +- src/FirebaseApp.svelte | 12 +++++++++--- src/helpers.js | 8 ++++---- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3cb0457..d01584f 100644 --- a/README.md +++ b/README.md @@ -208,10 +208,12 @@ data.subscribe(v => doStuff(v) ) ### Firebase App Context -The Firebase SDK is available via the [Context API](https://svelte.dev/tutorial/context-api) under the key of `firebase`. +The Firebase SDK is available via the [Context API](https://svelte.dev/tutorial/context-api) under the key of `firebase` using the `getFirebase` function. ```js -const db = getContext('firebase').firestore(); +const app = getContext('firebase').getFirebase(); +const db = app.firestore(); +const auth = app.auth(); ``` ## API diff --git a/package-lock.json b/package-lock.json index b930e8d..b89977d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sveltefire", - "version": "0.1.2", + "version": "0.1.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 36e451a..93e1037 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.4", + "version": "0.1.5", "name": "sveltefire", "svelte": "src/index.js", "main": "dist/index.js", diff --git a/src/FirebaseApp.svelte b/src/FirebaseApp.svelte index 4d27e63..80e605e 100644 --- a/src/FirebaseApp.svelte +++ b/src/FirebaseApp.svelte @@ -11,11 +11,17 @@ // Emit firebase const dispatch = createEventDispatcher(); - // Set firebase context - firebase = firebase || window.firebase; - setContext("firebase", firebase); + // Must be a function to ensure changes after initialization are caught + setContext("firebase", { + getFirebase: () => firebase + }); + onMount(() => { + + // Set firebase context from window if needed + firebase = firebase || (window && window.firebase); + if (!firebase) { throw Error( "No firebase app was provided. You must provide an initialized Firebase app or make it available globally." diff --git a/src/helpers.js b/src/helpers.js index 82e6b16..5fb3997 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -1,14 +1,14 @@ import { getContext } from 'svelte'; - -export function getApp() { - return getContext('firebase'); +export function getFirebaseContext() { + const { getFirebase } = getContext('firebase'); + return getFirebase(); } // Validates end-user has setup context and imported proper modules into the Svelte app export function assertApp(pkg) { - const app = getApp(); + const app = getFirebaseContext(); if (!app) { throw new Error(`Missing Firebase app in context. Are you inside a 'FirebaseApp' component?`)