1+ import  *  as  React  from  'react' ; 
2+ import  {  Button ,  Modal  }  from  'react-bootstrap' ; 
3+ import  {  UserDlgProps ,  UserDlgState  }  from  './cred-dlg-types' ; 
4+ import  UserCredentialAttrs  from  '../user-credential-attrs/user-credential-attrs' ; 
5+ 
6+ 
7+ class  CredDlg  extends  React . Component < UserDlgProps ,  UserDlgState >  { 
8+     constructor ( props : UserDlgProps )  { 
9+         super ( props ) ; 
10+         this . sendCommand  =  this . sendCommand . bind ( this ) ; 
11+         this . toggleModal  =  this . toggleModal . bind ( this ) ; 
12+         this . state  =  { 
13+             Command : { } , 
14+             Unid : "" , 
15+             ShowModal : false , 
16+             UserCredential : { } 
17+         } ; 
18+         this . changeCommandAttrs  =  React . createRef ( ) ; 
19+     } 
20+     changeCommandAttrs : any ; 
21+ 
22+     toggleModal ( value : boolean )  { 
23+         this . setState ( {  ShowModal : value  } ) ; 
24+     } 
25+ 
26+     getDefinedUserIDs ( userCredential : any )  { 
27+         var  users  =  userCredential . User 
28+         if  ( ! users )  { 
29+             return  [ ] ; 
30+         } 
31+         return  Object . keys ( users ) . map ( user_id  =>  { 
32+             return  {  label : user_id ,  id : parseInt ( user_id )  } 
33+         } ) ; 
34+     } 
35+ 
36+     getSupportedEnum ( enumData : any ,  supportedEnumField : any )  { 
37+         if  ( ! supportedEnumField )  { 
38+             return  enumData ; 
39+         } 
40+         return  enumData . filter ( ( enumItem :any )  =>  supportedEnumField [ enumItem . name ] ) ; 
41+     } 
42+ 
43+     updateState ( unid : string ,  command : any ,  showModal : boolean ,  userCredential : any )  { 
44+         let  updatedCommand  =  structuredClone ( command ) ; 
45+ 
46+         updatedCommand . fields  =  command . fields . map (  ( field : any )  =>  { 
47+             switch  ( field . name )  { 
48+                 case  "UserUniqueID" :
49+                     field . values  =  this . getDefinedUserIDs ( userCredential ) ; 
50+                     if  ( field . values . length  !==  0 )  { 
51+                         field . defaultValue  =  field . values [ 0 ] ; 
52+                         field . default  =  field . values [ 0 ] . id ; 
53+                     } 
54+                     break ; 
55+                 case  "CredentialType" :
56+                     field . enum  =  this . getSupportedEnum ( field . enum ,  userCredential . SupportedCredentialTypes ?. Reported ) ; 
57+                     break ; 
58+             } 
59+             return  field ; 
60+         } ) ; 
61+         
62+ 
63+         updatedCommand . UserList  =  userCredential . User ; 
64+         updatedCommand . UserCredential  =  userCredential ; 
65+         
66+         this . setState ( {  Unid : unid ,  Command : updatedCommand ,  ShowModal : showModal ,  UserCredential : userCredential  } ,  
67+             ( )  =>  { 
68+                 this . changeCommandAttrs . current . updateState ( this . state . Command ) 
69+             } ) ; 
70+ 
71+     } 
72+ 
73+     sendCommand ( )  { 
74+         if  ( this . state . UserCredential  !==  undefined ) 
75+             this . props . SocketServer . send ( JSON . stringify ( 
76+                 { 
77+                     type : "run-cluster-command" , 
78+                     data : { 
79+                         Unid : this . state . Unid , 
80+                         ClusterType : "UserCredential" , 
81+                         Cmd : this . state . Command . name , 
82+                         Payload : this . changeCommandAttrs . current . state . Payload 
83+                     } 
84+                 } ) ) ; 
85+     } 
86+ 
87+ 
88+     render ( )  { 
89+         return  ( 
90+             < Modal  show = { this . state . ShowModal }  size = "lg"  onHide = { ( )  =>  this . toggleModal ( false ) } > 
91+                 < Modal . Header  closeButton > 
92+                     < Modal . Title > { this . state . Command . name } </ Modal . Title > 
93+                 </ Modal . Header > 
94+                 < Modal . Body > 
95+                     < UserCredentialAttrs  ref = { this . changeCommandAttrs }  /> 
96+                 </ Modal . Body > 
97+                 < Modal . Footer > 
98+                     < Button  variant = "primary"  onClick = { ( )  =>  {  this . sendCommand ( ) ;  this . toggleModal ( false ) ;  } } > 
99+                         Send
100+                     </ Button > 
101+                     < Button  variant = "outline-primary"  onClick = { ( )  =>  this . toggleModal ( false ) } > 
102+                         Cancel
103+                     </ Button > 
104+                 </ Modal . Footer > 
105+             </ Modal > 
106+         ) ; 
107+     } 
108+ } 
109+ 
110+ export  default  CredDlg 
0 commit comments