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