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