-
Notifications
You must be signed in to change notification settings - Fork 289
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Replace outdated react-firebaseui package (#694)
* Replace outdated react-firebaseui package * Fix lint errors * Add one more space * Add back firebaseui * Fix all eslint errors * Remove package and yarn lock file * Fix remaining eslint errors * Add new eslint rule
- Loading branch information
1 parent
4556701
commit 6f5b0c9
Showing
5 changed files
with
519 additions
and
475 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
import React, { useEffect, useRef, useState } from 'react' | ||
import { Auth, onAuthStateChanged } from 'firebase/auth' | ||
import 'firebaseui/dist/firebaseui.css' | ||
import { auth } from 'firebaseui' | ||
|
||
interface Props { | ||
// The Firebase UI Web UI Config object. | ||
// See: https://github.com/firebase/firebaseui-web#configuration | ||
uiConfig: auth.Config | ||
// Callback that will be passed the FirebaseUi instance before it is | ||
// started. This allows access to certain configuration options such as | ||
// disableAutoSignIn(). | ||
uiCallback?(ui: auth.AuthUI): void | ||
// The Firebase App auth instance to use. | ||
firebaseAuth: Auth // As firebaseui-web | ||
className?: string | ||
} | ||
|
||
const StyledFirebaseAuth = ({ | ||
uiConfig, | ||
firebaseAuth, | ||
className, | ||
uiCallback, | ||
}: Props) => { | ||
const [firebaseui, setFirebaseui] = useState< | ||
typeof import('firebaseui') | null | ||
>(null) | ||
const [userSignedIn, setUserSignedIn] = useState(false) | ||
const elementRef = useRef(null) | ||
|
||
useEffect(() => { | ||
// Firebase UI only works on the Client. So we're loading the package only after | ||
// the component has mounted, so that this works when doing server-side rendering. | ||
async function setUI() { | ||
setFirebaseui(await import('firebaseui')) | ||
} | ||
|
||
setUI() | ||
}, []) | ||
|
||
useEffect(() => { | ||
if (firebaseui === null) return () => {} | ||
|
||
// Get or Create a firebaseUI instance. | ||
const firebaseUiWidget = | ||
firebaseui.auth.AuthUI.getInstance() || | ||
new firebaseui.auth.AuthUI(firebaseAuth) | ||
if (uiConfig.signInFlow === 'popup') firebaseUiWidget.reset() | ||
|
||
// We track the auth state to reset firebaseUi if the user signs out. | ||
const unregisterAuthObserver = onAuthStateChanged(firebaseAuth, (user) => { | ||
if (!user && userSignedIn) firebaseUiWidget.reset() | ||
setUserSignedIn(!!user) | ||
}) | ||
|
||
// Trigger the callback if any was set. | ||
if (uiCallback) uiCallback(firebaseUiWidget) | ||
|
||
// Render the firebaseUi Widget. | ||
firebaseUiWidget.start(elementRef.current!, uiConfig) | ||
|
||
return () => { | ||
unregisterAuthObserver() | ||
firebaseUiWidget.reset() | ||
} | ||
// eslint-disable-next-line react-hooks/exhaustive-deps | ||
}, [firebaseui, uiConfig]) | ||
|
||
return <div className={className} ref={elementRef} /> | ||
} | ||
|
||
export default StyledFirebaseAuth |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.