({ user, fallback, children, requiredClaims }: ClaimsCheckProps)
| 201 | * Meant for Concurrent mode only (`<FirebaseAppProvider suspense=true />`). [More detail](https://github.com/FirebaseExtended/reactfire/issues/325#issuecomment-827654376). |
| 202 | */ |
| 203 | export function ClaimsCheck({ user, fallback, children, requiredClaims }: ClaimsCheckProps) { |
| 204 | const { data } = useIdTokenResult(user, false); |
| 205 | const { claims } = data; |
| 206 | const missingClaims: { [key: string]: { expected: string; actual: string | undefined } } = {}; |
| 207 | |
| 208 | const suspenseMode = useSuspenseEnabledFromConfigAndContext(); |
| 209 | if (!suspenseMode) { |
| 210 | console.warn( |
| 211 | 'ClaimsCheck is deprecated and only works when ReactFire is in experimental Suspense Mode. Use useSigninCheck or set suspense={true} in FirebaseAppProvider if you want to use this component.' |
| 212 | ); |
| 213 | } |
| 214 | |
| 215 | if (requiredClaims) { |
| 216 | Object.keys(requiredClaims).forEach((claim) => { |
| 217 | if (requiredClaims[claim] !== claims[claim]) { |
| 218 | missingClaims[claim] = { |
| 219 | expected: requiredClaims[claim], |
| 220 | actual: claims[claim]?.toString(), |
| 221 | }; |
| 222 | } |
| 223 | }); |
| 224 | } |
| 225 | |
| 226 | if (Object.keys(missingClaims).length === 0) { |
| 227 | return <>{children}</>; |
| 228 | } else { |
| 229 | return <>{fallback}</>; |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | /** |
| 234 | * @deprecated Use `useSigninCheck` instead |
nothing calls this directly
no test coverage detected