1
1
import { MembershipRole } from "@prisma/client" ;
2
- import { useState } from "react" ;
3
- import React , { SyntheticEvent , useEffect } from "react" ;
2
+ import { SyntheticEvent , useMemo , useState } from "react" ;
4
3
5
4
import { useLocale } from "@calcom/lib/hooks/useLocale" ;
6
5
import Button from "@calcom/ui/Button" ;
@@ -11,12 +10,10 @@ import ModalContainer from "@components/ui/ModalContainer";
11
10
import Select from "@components/ui/form/Select" ;
12
11
13
12
type MembershipRoleOption = {
13
+ label : string ;
14
14
value : MembershipRole ;
15
- label ?: string ;
16
15
} ;
17
16
18
- const options : MembershipRoleOption [ ] = [ { value : "MEMBER" } , { value : "ADMIN" } , { value : "OWNER" } ] ;
19
-
20
17
export default function MemberChangeRoleModal ( props : {
21
18
isOpen : boolean ;
22
19
currentMember : MembershipRole ;
@@ -25,18 +22,32 @@ export default function MemberChangeRoleModal(props: {
25
22
initialRole : MembershipRole ;
26
23
onExit : ( ) => void ;
27
24
} ) {
28
- useEffect ( ( ) => {
29
- options . forEach ( ( option , i ) => {
30
- options [ i ] . label = t ( option . value . toLowerCase ( ) ) ;
31
- } ) ;
32
- // eslint-disable-next-line react-hooks/exhaustive-deps
33
- } , [ ] ) ;
25
+ const { t } = useLocale ( ) ;
34
26
35
- const [ role , setRole ] = useState (
36
- options . find ( ( option ) => option . value === props . initialRole || MembershipRole . MEMBER ) !
27
+ const options = useMemo ( ( ) => {
28
+ return [
29
+ {
30
+ label : t ( "member" ) ,
31
+ value : MembershipRole . MEMBER ,
32
+ } ,
33
+ {
34
+ label : t ( "admin" ) ,
35
+ value : MembershipRole . ADMIN ,
36
+ } ,
37
+ {
38
+ label : t ( "owner" ) ,
39
+ value : MembershipRole . OWNER ,
40
+ } ,
41
+ ] . filter ( ( { value } ) => value !== MembershipRole . OWNER || props . currentMember === MembershipRole . OWNER ) ;
42
+ } , [ t , props . currentMember ] ) ;
43
+
44
+ const [ role , setRole ] = useState < MembershipRoleOption > (
45
+ options . find ( ( option ) => option . value === props . initialRole ) || {
46
+ label : t ( "member" ) ,
47
+ value : MembershipRole . MEMBER ,
48
+ }
37
49
) ;
38
50
const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
39
- const { t } = useLocale ( ) ;
40
51
const utils = trpc . useContext ( ) ;
41
52
42
53
const changeRoleMutation = trpc . useMutation ( "viewer.teams.changeMemberRole" , {
@@ -76,7 +87,7 @@ export default function MemberChangeRoleModal(props: {
76
87
{ /*<option value="OWNER">{t("owner")}</option> - needs dialog to confirm change of ownership */ }
77
88
< Select
78
89
isSearchable = { false }
79
- options = { props . currentMember !== MembershipRole . OWNER ? options . slice ( 0 , 2 ) : options }
90
+ options = { options }
80
91
value = { role }
81
92
onChange = { ( option ) => option && setRole ( option ) }
82
93
id = "role"
0 commit comments