UNPKG

reactfire

Version:
59 lines (58 loc) 2.26 kB
import * as React from 'react'; import { user } from 'rxfire/auth'; import { preloadAuth, preloadObservable, useAuth, useObservable } from '..'; import { from } from 'rxjs'; export function preloadUser(firebaseApp) { return preloadAuth(firebaseApp).then(function (auth) { var result = preloadObservable(user(auth()), 'auth: user'); return result.request.promise; }); } export function useUser(auth, options) { auth = auth || useAuth()(); var currentUser = undefined; if (options && options.startWithValue !== undefined) { currentUser = options.startWithValue; } else if (auth.currentUser) { currentUser = auth.currentUser; } return useObservable(user(auth), 'auth: user', currentUser); } export function useIdTokenResult(user, forceRefresh) { if (forceRefresh === void 0) { forceRefresh = false; } if (!user) { throw new Error('you must provide a user'); } var idToken$ = from(user.getIdTokenResult(forceRefresh)); return useObservable(idToken$, user.uid + "-claims"); } export function ClaimsCheck(_a) { var user = _a.user, fallback = _a.fallback, children = _a.children, requiredClaims = _a.requiredClaims; var claims = useIdTokenResult(user, false).claims; var missingClaims = {}; Object.keys(requiredClaims).forEach(function (claim) { if (requiredClaims[claim] !== claims[claim]) { missingClaims[claim] = { expected: requiredClaims[claim], actual: claims[claim] }; } }); if (Object.keys(missingClaims).length === 0) { return React.createElement(React.Fragment, null, children); } else { return React.createElement(React.Fragment, null, fallback); } } export function AuthCheck(_a) { var auth = _a.auth, fallback = _a.fallback, children = _a.children, requiredClaims = _a.requiredClaims; var user = useUser(auth); if (user) { return requiredClaims ? (React.createElement(ClaimsCheck, { user: user, fallback: fallback, requiredClaims: requiredClaims }, children)) : (React.createElement(React.Fragment, null, children)); } else { return React.createElement(React.Fragment, null, fallback); } }