@@ -5,23 +5,40 @@ import { jwtDecode } from 'jwt-decode';
55
66import type { AuthSlice , SliceCreator } from '../types' ;
77
8- export const createAuthSlice : SliceCreator < AuthSlice > = ( set ) => ( {
9- accessToken : null ,
10- changeGroup : ( group ) => {
11- set ( { currentGroup : group , currentSession : null } ) ;
12- } ,
13- currentGroup : null ,
14- currentUser : null ,
15- login : ( accessToken ) => {
16- const { groups, permissions, ...rest } = jwtDecode < TokenPayload > ( accessToken ) ;
17- const ability = createMongoAbility < PureAbility < [ AppAction , AppSubjectName ] , any > > ( permissions ) ;
18- set ( {
19- accessToken,
20- currentGroup : groups [ 0 ] ,
21- currentUser : { ability, groups, ...rest }
22- } ) ;
23- } ,
24- logout : ( ) => {
25- window . location . reload ( ) ;
26- }
27- } ) ;
8+ const parseAccessToken = ( accessToken : string ) => {
9+ const { groups, permissions, ...rest } = jwtDecode < TokenPayload > ( accessToken ) ;
10+ const ability = createMongoAbility < PureAbility < [ AppAction , AppSubjectName ] , any > > ( permissions ) ;
11+ return {
12+ currentGroup : groups [ 0 ] ,
13+ currentUser : {
14+ ability,
15+ groups,
16+ ...rest
17+ }
18+ } ;
19+ } ;
20+
21+ export const createAuthSlice : SliceCreator < AuthSlice > = ( set ) => {
22+ const accessToken = window . __PLAYWRIGHT_ACCESS_TOKEN__ ?? null ;
23+ const initialState = accessToken ? parseAccessToken ( accessToken ) : null ;
24+
25+ return {
26+ accessToken,
27+ changeGroup : ( group ) => {
28+ set ( { currentGroup : group , currentSession : null } ) ;
29+ } ,
30+ currentGroup : initialState ?. currentGroup ?? null ,
31+ currentUser : initialState ?. currentUser ?? null ,
32+ login : ( accessToken ) => {
33+ const { currentGroup, currentUser } = parseAccessToken ( accessToken ) ;
34+ set ( {
35+ accessToken,
36+ currentGroup,
37+ currentUser
38+ } ) ;
39+ } ,
40+ logout : ( ) => {
41+ window . location . reload ( ) ;
42+ }
43+ } ;
44+ } ;
0 commit comments