@rebasepro/client-firebase 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/useBuildUserManagement.d.ts +6 -1
- package/dist/hooks/useFirebaseAuthController.d.ts +2 -2
- package/dist/index.es.js +6 -9
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +6 -9
- package/dist/index.umd.js.map +1 -1
- package/dist/types/auth.d.ts +2 -2
- package/package.json +7 -7
- package/src/hooks/useBuildUserManagement.tsx +11 -6
- package/src/hooks/useFirebaseAuthController.ts +6 -8
- package/src/types/auth.tsx +2 -2
package/dist/types/auth.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApplicationVerifier, ConfirmationResult, User as FirebaseUser } from "@firebase/auth";
|
|
2
|
-
import { AuthController,
|
|
2
|
+
import type { AuthController, User } from "@rebasepro/types";
|
|
3
3
|
/**
|
|
4
4
|
* @group Firebase
|
|
5
5
|
*/
|
|
@@ -37,5 +37,5 @@ export type FirebaseAuthController<USER extends User = FirebaseUserWrapper, Extr
|
|
|
37
37
|
*/
|
|
38
38
|
skipLogin: () => void;
|
|
39
39
|
setUser: (user: USER | null) => void;
|
|
40
|
-
setUserRoles: (roles:
|
|
40
|
+
setUserRoles: (roles: string[]) => void;
|
|
41
41
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rebasepro/client-firebase",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.5",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
"fast-equals": "6.0.0",
|
|
15
15
|
"fuse.js": "^7.3.0",
|
|
16
16
|
"react-router-dom": "^7.15.1",
|
|
17
|
-
"@rebasepro/admin": "0.2.
|
|
18
|
-
"@rebasepro/
|
|
19
|
-
"@rebasepro/
|
|
20
|
-
"@rebasepro/
|
|
21
|
-
"@rebasepro/
|
|
22
|
-
"@rebasepro/
|
|
17
|
+
"@rebasepro/admin": "0.2.5",
|
|
18
|
+
"@rebasepro/core": "0.2.5",
|
|
19
|
+
"@rebasepro/common": "0.2.5",
|
|
20
|
+
"@rebasepro/ui": "0.2.5",
|
|
21
|
+
"@rebasepro/utils": "0.2.5",
|
|
22
|
+
"@rebasepro/types": "0.2.5"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"firebase": "^10.12.2 || ^11.0.0 || ^12.0.0",
|
|
@@ -6,12 +6,17 @@ import {
|
|
|
6
6
|
AuthController,
|
|
7
7
|
DataDriver,
|
|
8
8
|
Entity,
|
|
9
|
-
Role,
|
|
10
9
|
User,
|
|
11
10
|
UserManagementDelegate
|
|
12
11
|
} from "@rebasepro/types";
|
|
13
12
|
import { FirebaseAccessGate } from "./useFirebaseAccessGate";
|
|
14
13
|
|
|
14
|
+
export interface Role {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
isAdmin?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
15
20
|
type UserWithRoleIds<USER extends User = User> = Omit<USER, "roles"> & { roles: string[] };
|
|
16
21
|
|
|
17
22
|
export interface UserManagementDelegateParams<CONTROLLER extends AuthController<User> = AuthController<User>> {
|
|
@@ -254,12 +259,12 @@ export function useBuildUserManagement<CONTROLLER extends AuthController<User> =
|
|
|
254
259
|
|
|
255
260
|
|
|
256
261
|
|
|
257
|
-
const defineRolesFor: ((user: User) =>
|
|
262
|
+
const defineRolesFor: ((user: User) => string[] | undefined) = useCallback((user) => {
|
|
258
263
|
if (!usersWithRoleIds) throw Error("Users not loaded");
|
|
259
264
|
const mgmtUser = usersWithRoleIds.find(u => u.email?.toLowerCase() === user?.email?.toLowerCase());
|
|
260
265
|
if (!mgmtUser || !mgmtUser.roles) return undefined;
|
|
261
|
-
return
|
|
262
|
-
}, [
|
|
266
|
+
return mgmtUser.roles;
|
|
267
|
+
}, [usersWithRoleIds]);
|
|
263
268
|
|
|
264
269
|
const accessGate: FirebaseAccessGate<USER> = useCallback(({ user }) => {
|
|
265
270
|
|
|
@@ -303,9 +308,9 @@ export function useBuildUserManagement<CONTROLLER extends AuthController<User> =
|
|
|
303
308
|
}, [loading, users]);
|
|
304
309
|
|
|
305
310
|
const userRoles = authController.user ? defineRolesFor(authController.user) : undefined;
|
|
306
|
-
const isAdmin = (userRoles ?? []).some(r => r
|
|
311
|
+
const isAdmin = (userRoles ?? []).some(r => r === "admin");
|
|
307
312
|
|
|
308
|
-
const userRoleIds = userRoles
|
|
313
|
+
const userRoleIds = userRoles;
|
|
309
314
|
useEffect(() => {
|
|
310
315
|
console.debug("Setting user roles", {
|
|
311
316
|
userRoles,
|
|
@@ -24,14 +24,14 @@ import {
|
|
|
24
24
|
} from "@firebase/auth";
|
|
25
25
|
import { FirebaseApp } from "@firebase/app";
|
|
26
26
|
import { FirebaseAuthController, FirebaseSignInOption, FirebaseSignInProvider, FirebaseUserWrapper } from "../types";
|
|
27
|
-
import {
|
|
27
|
+
import type { User } from "@rebasepro/types";
|
|
28
28
|
|
|
29
29
|
export interface FirebaseAuthControllerProps {
|
|
30
30
|
loading?: boolean;
|
|
31
31
|
firebaseApp?: FirebaseApp;
|
|
32
32
|
signInOptions?: Array<FirebaseSignInProvider | FirebaseSignInOption>;
|
|
33
33
|
onSignOut?: () => void;
|
|
34
|
-
defineRolesFor?: (user: User) => Promise<
|
|
34
|
+
defineRolesFor?: (user: User) => Promise<string[] | undefined> | string[] | undefined;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -53,13 +53,11 @@ export const useFirebaseAuthController = <USER extends FirebaseUserWrapper = any
|
|
|
53
53
|
const [authLoading, setAuthLoading] = useState(true);
|
|
54
54
|
const [loginSkipped, setLoginSkipped] = useState<boolean>(false);
|
|
55
55
|
const [confirmationResult, setConfirmationResult] = useState<undefined | ConfirmationResult>();
|
|
56
|
-
const [userRoles, _setUserRoles] = useState<
|
|
56
|
+
const [userRoles, _setUserRoles] = useState<string[] | undefined>();
|
|
57
57
|
const [extra, setExtra] = useState<any>();
|
|
58
58
|
|
|
59
|
-
const setUserRoles = useCallback((roles:
|
|
60
|
-
|
|
61
|
-
const newRoleIds = roles?.map(r => r.id);
|
|
62
|
-
if (!equal(currentRoleIds, newRoleIds)) {
|
|
59
|
+
const setUserRoles = useCallback((roles: string[] | undefined) => {
|
|
60
|
+
if (!equal(userRoles, roles)) {
|
|
63
61
|
_setUserRoles(roles);
|
|
64
62
|
}
|
|
65
63
|
}, [userRoles]);
|
|
@@ -299,7 +297,7 @@ export const useFirebaseAuthController = <USER extends FirebaseUserWrapper = any
|
|
|
299
297
|
const firebaseUserWrapper: FirebaseUserWrapper | null = loggedUser
|
|
300
298
|
? {
|
|
301
299
|
...loggedUser,
|
|
302
|
-
roles: userRoles
|
|
300
|
+
roles: userRoles,
|
|
303
301
|
firebaseUser: loggedUser
|
|
304
302
|
}
|
|
305
303
|
: null;
|
package/src/types/auth.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ApplicationVerifier, ConfirmationResult, User as FirebaseUser } from "@firebase/auth";
|
|
2
2
|
|
|
3
|
-
import { AuthController,
|
|
3
|
+
import type { AuthController, User } from "@rebasepro/types";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @group Firebase
|
|
@@ -69,6 +69,6 @@ export type FirebaseAuthController<USER extends User = FirebaseUserWrapper, Extr
|
|
|
69
69
|
|
|
70
70
|
setUser: (user: USER | null) => void;
|
|
71
71
|
|
|
72
|
-
setUserRoles: (roles:
|
|
72
|
+
setUserRoles: (roles: string[]) => void;
|
|
73
73
|
|
|
74
74
|
};
|