From 65fb9f315c74e2a8456538700db24cf3781af636 Mon Sep 17 00:00:00 2001 From: steveoh Date: Thu, 13 Jun 2024 15:29:00 -0600 Subject: [PATCH] chore: review feedback --- src/App.jsx | 12 ++++--- src/components/firebase/AnalyticsProvider.jsx | 6 ++-- .../firebase/FirebaseAppProvider.jsx | 36 ++++--------------- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 2c3c7e9..76d30fa 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -2,7 +2,7 @@ import { BootstrapDartboard as FindAddress } from '@ugrc/dart-board'; import Sherlock, { WebApiProvider } from '@ugrc/sherlock'; import { logEvent } from 'firebase/analytics'; import PropTypes from 'prop-types'; -import { useCallback, useMemo, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; import { Button, Card, Collapse } from 'reactstrap'; import Header from './components/Header/Header'; @@ -37,9 +37,13 @@ ErrorFallback.propTypes = { export default function App() { const app = useFirebaseApp(); const analytics = useAnalytics(); - useMemo(async () => { - const { getPerformance } = await import('firebase/performance'); - return getPerformance(app); + useEffect(() => { + async function initPerformance() { + const { getPerformance } = await import('firebase/performance'); + + return getPerformance(app); + } + initPerformance(); }, [app]); const [zoomToGraphic, setZoomToGraphic] = useState({ zoomToGraphic: { diff --git a/src/components/firebase/AnalyticsProvider.jsx b/src/components/firebase/AnalyticsProvider.jsx index a3a323f..59a569e 100644 --- a/src/components/firebase/AnalyticsProvider.jsx +++ b/src/components/firebase/AnalyticsProvider.jsx @@ -1,7 +1,7 @@ import { getAnalytics } from 'firebase/analytics'; import PropTypes from 'prop-types'; import { createContext, useContext } from 'react'; -import { useFirebaseApp } from './FirebaseAppProvider'; +import { useFirebaseApp } from './FirebaseAppProvider.jsx'; const AnalyticsSdkContext = createContext(undefined); @@ -20,4 +20,6 @@ AnalyticsProvider.propTypes = { sdk: PropTypes.object, }; -export const useAnalytics = () => useContext(AnalyticsSdkContext); +export function useAnalytics() { + return useContext(AnalyticsSdkContext); +} diff --git a/src/components/firebase/FirebaseAppProvider.jsx b/src/components/firebase/FirebaseAppProvider.jsx index b57e2cd..f62e1a1 100644 --- a/src/components/firebase/FirebaseAppProvider.jsx +++ b/src/components/firebase/FirebaseAppProvider.jsx @@ -1,41 +1,19 @@ -import { getApps, initializeApp, registerVersion } from 'firebase/app'; +import { initializeApp, registerVersion } from 'firebase/app'; import PropTypes from 'prop-types'; import { createContext, useContext, useMemo, version } from 'react'; const DEFAULT_APP_NAME = '[DEFAULT]'; const FirebaseAppContext = createContext(undefined); -const shallowEq = (a, b) => a === b || [...Object.keys(a), ...Object.keys(b)].every((key) => a[key] === b[key]); - export function FirebaseAppProvider(props) { - const { firebaseConfig, appName } = props; - + const { firebaseConfig } = props; const firebaseApp = useMemo(() => { - if (props.firebaseApp) { - return props.firebaseApp; - } - - const existingApp = getApps().find((app) => app.name === (appName || DEFAULT_APP_NAME)); - if (existingApp) { - if (firebaseConfig && shallowEq(existingApp.options, firebaseConfig)) { - return existingApp; - } else { - throw new Error( - `Does not match the options already provided to the ${appName || 'default'} firebase app instance, give this new instance a different appName.`, - ); - } - } else { - if (!firebaseConfig) { - throw new Error('No firebaseConfig provided'); - } - - registerVersion('react', version || 'unknown'); - // TODO! add app package.json version - // registerVersion('app', appVersion || 'unknown'); + registerVersion('react', version || 'unknown'); + // TODO! add app package.json version + // registerVersion('app', appVersion || 'unknown'); - return initializeApp(firebaseConfig, appName); - } - }, [props.firebaseApp, appName, firebaseConfig]); + return initializeApp(firebaseConfig, DEFAULT_APP_NAME); + }, [firebaseConfig]); return ; }