1
- import { ChangeEvent , FC , useEffect , useMemo , useState } from 'react' ;
1
+ import { ChangeEvent , FC , useEffect , useMemo , useRef , useState } from 'react' ;
2
2
3
3
import { Button , DotProgress , Icon , Typography } from '@equinor/eds-core-react' ;
4
4
import { arrow_back } from '@equinor/eds-icons' ;
5
5
import { ImpersonateUserDto } from '@equinor/subsurface-app-management' ;
6
6
7
- import { useAllAppRoles } from '../hooks/useAllAppRoles' ;
8
7
import { useCreateImpersonation } from '../hooks/useCreateImpersonation' ;
9
8
import { useEditImpersonation } from '../hooks/useEditImpersonation' ;
10
9
import { Header } from '../Impersonate.styles' ;
11
10
import { Container , Section } from './CreateOrEditUser.styles' ;
12
- import { usePrevious } from 'src/atoms/hooks/usePrevious' ;
13
11
import { environment } from 'src/atoms/utils/auth_environment' ;
14
12
import { ComboBox , SelectOptionRequired } from 'src/molecules' ;
15
13
import { TextField } from 'src/molecules/TextField/TextField' ;
14
+ import { useAllAppRoles } from 'src/organisms/TopBar/Account/ImpersonateMenu/hooks/useAllAppRoles' ;
16
15
17
16
interface CreateOrEditUserProps {
18
17
editingUser ?: ImpersonateUserDto ;
@@ -23,32 +22,34 @@ export const CreateOrEditUser: FC<CreateOrEditUserProps> = ({
23
22
editingUser,
24
23
onBack,
25
24
} ) => {
26
- const previousEditingUser = usePrevious ( editingUser ) ;
25
+ const initializedEditUser = useRef < boolean > ( false ) ;
27
26
const [ roles , setRoles ] = useState < SelectOptionRequired [ ] > ( [ ] ) ;
28
27
const [ firstName , setFirstName ] = useState ( '' ) ;
29
28
const [ lastName , setLastName ] = useState ( '' ) ;
30
29
const [ email , setEmail ] = useState ( '' ) ;
31
-
32
30
const { data, isLoading : isLoadingRoles } = useAllAppRoles ( ) ;
33
31
34
32
useEffect ( ( ) => {
35
- if (
36
- editingUser &&
37
- ( previousEditingUser === undefined ||
38
- previousEditingUser . uniqueName !== editingUser . uniqueName )
39
- ) {
40
- setRoles ( editingUser . roles . map ( ( role ) => ( { value : role , label : role } ) ) ) ;
33
+ if ( editingUser && data && ! initializedEditUser . current ) {
34
+ initializedEditUser . current = true ;
35
+ setRoles (
36
+ editingUser . roles . map ( ( role ) => {
37
+ const mapped = data . find ( ( item ) => item . value === role ) ;
38
+ if ( mapped ) return { value : role , label : mapped . displayName } ;
39
+ return { value : role , label : role } ;
40
+ } )
41
+ ) ;
41
42
setFirstName ( editingUser . firstName ) ;
42
43
setLastName ( editingUser . lastName ) ;
43
44
setEmail ( editingUser . email ?? '' ) ;
44
45
}
45
- } , [ editingUser , previousEditingUser ] ) ;
46
+ } , [ data , editingUser , initializedEditUser ] ) ;
46
47
47
48
const availableRoles = useMemo (
48
49
( ) =>
49
50
data ?. map ( ( item ) => ( {
50
51
value : item . value ,
51
- label : item . value ,
52
+ label : item . displayName ,
52
53
} ) ) ?? [ ] ,
53
54
[ data ]
54
55
) ;
0 commit comments