reactfire
Version:
Firebase library for React
59 lines (58 loc) • 2.26 kB
JavaScript
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);
}
}