@aj-shadow/z-abs-complayer-modaldialog-client 0.0.0-aj-beta.221

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.gitattributes +26 -0
  2. package/LICENSE.txt +96 -0
  3. package/README.md +5 -0
  4. package/npm-shrinkwrap.json +13 -0
  5. package/package.json +10 -0
  6. package/project/client/_build/Bundle-CompLayer-Modaldialog-client.bld +38 -0
  7. package/project/client/_build/Client-CompLayer-Modaldialog-client-jsx.bld +10 -0
  8. package/project/client/_build/Client-CompLayer-Modaldialog-client.bld +10 -0
  9. package/project/client/_build/Client-css-CompLayer-Modaldialog-bundle.bld +9 -0
  10. package/project/client/_build/z-abs-complayer-modaldialog-client.prj +36 -0
  11. package/project/client/actions/action-modal-dialog.js +29 -0
  12. package/project/client/css/abstraction_add.css +10 -0
  13. package/project/client/css/modal-dialog-file.css +5 -0
  14. package/project/client/css/modal.css +162 -0
  15. package/project/client/css/modal_body.css +18 -0
  16. package/project/client/css/modal_header.css +11 -0
  17. package/project/client/helper/helper-event-listener.js +29 -0
  18. package/project/client/helper/helper-modal-popover.js +35 -0
  19. package/project/client/helper/input-analyzer.js +47 -0
  20. package/project/client/images/actor-image.jsx +260 -0
  21. package/project/client/images/file-image.jsx +44 -0
  22. package/project/client/images/msg-image.jsx +31 -0
  23. package/project/client/modal-dialog-abstraction-add.jsx +992 -0
  24. package/project/client/modal-dialog-abstraction-properties.jsx +220 -0
  25. package/project/client/modal-dialog-file-add.jsx +183 -0
  26. package/project/client/modal-dialog-file-new.jsx +489 -0
  27. package/project/client/modal-dialog-file-properties.jsx +206 -0
  28. package/project/client/modal-dialog-file-remove.jsx +157 -0
  29. package/project/client/modal-dialog-folder-add.jsx +292 -0
  30. package/project/client/modal-dialog-folder-new.jsx +231 -0
  31. package/project/client/modal-dialog-folder-properties.jsx +237 -0
  32. package/project/client/modal-dialog-folder-remove.jsx +149 -0
  33. package/project/client/modal-dialog-search.jsx +144 -0
  34. package/project/client/modal-dialog-wizard-list.jsx +49 -0
  35. package/project/client/modal-dialog-wizard.jsx +145 -0
  36. package/project/client/modal-dialog-workspace-new.jsx +157 -0
  37. package/project/client/modal-dialog-workspace-open.jsx +306 -0
  38. package/project/client/stores/modal-dialog-store.js +63 -0
  39. package/project/z-abs-complayer-modaldialog-client.tree +41 -0
@@ -0,0 +1,237 @@
1
+
2
+ 'use strict';
3
+
4
+ import HelperEventListener from './helper/helper-event-listener';
5
+ import HelperModalPopover from './helper/helper-modal-popover';
6
+ import InputAnalyzer from './helper/input-analyzer';
7
+ import Modal from 'z-abs-complayer-bootstrap-client/client/modal';
8
+ import ModalHeader from 'z-abs-complayer-bootstrap-client/client/modal-header';
9
+ import ModalBody from 'z-abs-complayer-bootstrap-client/client/modal-body';
10
+ import ModalFooter from 'z-abs-complayer-bootstrap-client/client/modal-footer';
11
+ import Popover from 'z-abs-complayer-bootstrap-client/client/popover';
12
+ import ReactComponentBase from 'z-abs-corelayer-client/client/react-component/react-component-base';
13
+ import React from 'react';
14
+
15
+
16
+ export default class ModalDialogFolderProperties extends ReactComponentBase {
17
+ constructor(props) {
18
+ super(props, {
19
+ folder: null,
20
+ folderName: '',
21
+ types: [],
22
+ valid: false,
23
+ error: false,
24
+ errorText: ''
25
+ });
26
+ this.helperModalPopover = new HelperModalPopover();
27
+ this.inputRef = React.createRef();
28
+ this.inputAnalyzer = new InputAnalyzer(this.props.capitalFirst ? true : false);
29
+ this.eventListener = new HelperEventListener('keydown', this._keyDown.bind(this), true);
30
+ }
31
+
32
+ static getDerivedStateFromProps(props, state) {
33
+ if(0 === state.types.length) {
34
+ const types = props.folder?.data.types.map((type) => {
35
+ return {
36
+ chosen: true,
37
+ name: type
38
+ }
39
+ });
40
+ return {
41
+ types: types ? types : []
42
+ };
43
+ }
44
+ else {
45
+ return null;
46
+ }
47
+ }
48
+
49
+ didMount() {
50
+ this.helperModalPopover.didMount();
51
+ }
52
+
53
+ shouldUpdate(nextProps, nextState) {
54
+ return !this.shallowCompare(this.props.name, nextProps.name)
55
+ || !this.shallowCompare(this.props.heading, nextProps.heading)
56
+ || !this.shallowCompare(this.props.folder, nextProps.folder)
57
+ || !this.shallowCompare(this.props.modalResults, nextProps.modalResults)
58
+ || !this.shallowCompare(this.state, nextState);
59
+ }
60
+
61
+ didUpdate(prevProps, prevState) {
62
+ const previousModalResult = prevProps.modalResults.get(this.props.name);
63
+ const modalResult = this.props.modalResults.get(this.props.name);
64
+ if(modalResult) {
65
+ if(!prevProps.modalResult || (prevProps.modalResult.visible !== modalResult.visible)) {
66
+ if(modalResult.visible) {
67
+ this.eventListener.init();
68
+ }
69
+ else {
70
+ this.eventListener.exit();
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ willUnmount() {
77
+ this.eventListener.exit();
78
+ }
79
+
80
+ hide() {
81
+ this.updateState({
82
+ folder: {$set: null},
83
+ folderName: {$set: ''},
84
+ types: {$set: []},
85
+ valid: {$set: false},
86
+ error: {$set: false},
87
+ errorText: {$set: ''}
88
+ });
89
+ this.props.onHide();
90
+ }
91
+
92
+ _keyDown(e) {
93
+ if(!e.ctrlKey && !e.shiftKey && 'Enter' === e.key) {
94
+ if(!this.state.error) {
95
+ e.preventDefault();
96
+ this.update();
97
+ }
98
+ }
99
+ else if(e.ctrlKey && e.shiftKey && 'C' === e.key) {
100
+ e.preventDefault();
101
+ this.hide()
102
+ ;
103
+ }
104
+ }
105
+
106
+ renderTypes() {
107
+ if(null !== this.props.folder) {
108
+ return this.props.folder.data.types.map((type, index) => {
109
+ if('actorjs' !== type) {
110
+ return (
111
+ <div key={index} className="row">
112
+ <div className="col-sm-2" style={{textAlign: 'right'}}>
113
+ <label htmlFor={`folder_properties_input_type${type}`} className="control-label">{type}</label>
114
+ </div>
115
+ <div className="col-sm-2">
116
+ <input type="checkbox" id={`folder_properties_input_type${type}`} aria-label="..." autoComplete="off" checked={this.state.types[index]?.chosen} style={{marginTop: '12px'}}
117
+ onChange={(e) => {
118
+ this.updateState({types: (types) => {
119
+ types[index].chosen = e.currentTarget.checked;
120
+ }});
121
+ }}
122
+ />
123
+ </div>
124
+ </div>
125
+ );
126
+ }
127
+ });
128
+ }
129
+ }
130
+
131
+ renderErrorMessage() {
132
+ const modalResult = this.props.modalResults.get(this.props.name);
133
+ if(this.state.error || 'error' === modalResult?.result.code) {
134
+ const msg = this.state.error ? this.state.errorText : modalResult.result.msg;
135
+ const errorDivStyle = {
136
+ float: 'left',
137
+ textAlign: 'left',
138
+ width: 420
139
+ };
140
+ const labelStyle = {
141
+ top: '2px',
142
+ position: 'relative'
143
+ };
144
+ return (
145
+ <div style={errorDivStyle}>
146
+ <p id="folder_properties_modal_error_label" className="text-danger control-label modal_body_p_as_label" style={labelStyle}>{msg}</p>
147
+ </div>
148
+ );
149
+ }
150
+ else {
151
+ return null;
152
+ }
153
+ }
154
+
155
+ render() {
156
+ const modalResult = this.props.modalResults.get(this.props.name);
157
+ const origTypes = this.props.folder?.data.types.map((type) => {
158
+ return {
159
+ chosen: true,
160
+ name: type
161
+ }
162
+ });
163
+ const show = modalResult?.visible;
164
+ this.helperModalPopover.onRender();
165
+ return (
166
+ <Modal ref={this.helperModalPopover.modalRef} id="modal_folder_properties" aria-labelledby="contained-modal-title-sm" show={show}
167
+ onShown={(e) => {
168
+ this.inputRef.current.select();
169
+ }}
170
+ onHide={(e) => {
171
+ this.hide();
172
+ }}
173
+ >
174
+ <ModalHeader closeButton>
175
+ <img className="modal_header_icon pull-left" src="/abs-images/svg/ActorJsA.svg" alt="ActorJs Icon"></img>
176
+ <h4 className="modal_header_heading modal-sm">{this.props.heading}</h4>
177
+ </ModalHeader>
178
+ <ModalBody>
179
+ <div className="form-group">
180
+ <div className="row" style={{textAlign: 'right'}}>
181
+ <div className="col-sm-2">
182
+ <label htmlFor="modal_dialog_folder_properties_name" className="control-label">Name</label>
183
+ </div>
184
+ <div className="col-sm-9">
185
+ <input ref={this.inputRef} type="text" id="modal_dialog_folder_properties_name" className="form-control input-sm" placeholder="folder name" value={this.state.folderName ? this.state.folderName : this.props.folder ? this.props.folder.title : ''}
186
+ onChange={(e) => {
187
+ const result = this.inputAnalyzer.analyze(e.target.value);
188
+ if(result.success) {
189
+ this.updateState({valid: {$set: true}});
190
+ this.updateState({error: {$set: false}});
191
+ }
192
+ else {
193
+ this.updateState({valid: {$set: false}});
194
+ this.updateState({error: {$set: true}});
195
+ if(!result.regexpValidation) {
196
+ this.updateState({errorText: {$set: `The name contains not allowed characters: '${result.noneValidCharacters}'`}});
197
+ }
198
+ else if(!result.filenameValidation) {
199
+ this.updateState({errorText: {$set: `The folder is not allowed: '${result.noneValidFilename}'`}});
200
+ }
201
+ }
202
+ this.updateState({folderName: {$set: e.target.value}});
203
+ }}
204
+ />
205
+ </div>
206
+ </div>
207
+ {this.renderTypes()}
208
+ </div>
209
+ </ModalBody>
210
+ <ModalFooter>
211
+ {this.renderErrorMessage()}
212
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Enter" style={{display:'inline-block'}} disabled={!show}>
213
+ <button id="folder_properties_change_button" type="button" className="btn btn-primary" disabled={(0 === this.state.folderName.length || this.props.folder.title === this.state.folderName)}
214
+ onClick={(e) => {
215
+ let types = this.state.types.map((type) => {
216
+ if(type.chosen) {
217
+ return type.name;
218
+ }
219
+ });
220
+ const data = this.deepCopy(this.props.folder.data);
221
+ data.types = types;
222
+ this.props.onFolderProperties(this.props.folder.projectId, this.props.folder.title, this.state.folderName, data);
223
+ }}
224
+ >Change</button>
225
+ </Popover>
226
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+C" style={{display:'inline-block',marginLeft:'5px'}} disabled={!show}>
227
+ <button id="folder_properties_close_button" type="button" className="btn btn-default" disabled={!show}
228
+ onClick={(e) => {
229
+ this.hide();
230
+ }}
231
+ >Close</button>
232
+ </Popover>
233
+ </ModalFooter>
234
+ </Modal>
235
+ );
236
+ }
237
+ }
@@ -0,0 +1,149 @@
1
+
2
+ 'use strict';
3
+
4
+ import HelperEventListener from './helper/helper-event-listener';
5
+ import HelperModalPopover from './helper/helper-modal-popover';
6
+ import Modal from 'z-abs-complayer-bootstrap-client/client/modal';
7
+ import ModalHeader from 'z-abs-complayer-bootstrap-client/client/modal-header';
8
+ import ModalBody from 'z-abs-complayer-bootstrap-client/client/modal-body';
9
+ import ModalFooter from 'z-abs-complayer-bootstrap-client/client/modal-footer';
10
+ import Popover from 'z-abs-complayer-bootstrap-client/client/popover';
11
+ import ReactComponentBase from 'z-abs-corelayer-client/client/react-component/react-component-base';
12
+ import React from 'react';
13
+
14
+
15
+ export default class ModalDialogFolderRemove extends ReactComponentBase {
16
+ constructor(props) {
17
+ super(props);
18
+ this.helperModalPopover = new HelperModalPopover();
19
+ this.eventListener = new HelperEventListener('keydown', this._keyDown.bind(this), true);
20
+ }
21
+
22
+ didMount() {
23
+ this.helperModalPopover.didMount();
24
+ }
25
+
26
+ shouldUpdate(nextProps, nextState) {
27
+ return !this.shallowCompare(this.props.heading, nextProps.heading)
28
+ || !this.shallowCompare(this.props.modalResults, nextProps.modalResults)
29
+ || !this.shallowCompare(this.state, nextState);
30
+ }
31
+
32
+ didUpdate(prevProps, prevState) {
33
+ const previousModalResult = prevProps.modalResults.get(this.props.name);
34
+ const modalResult = this.props.modalResults.get(this.props.name);
35
+ if(modalResult) {
36
+ if(!prevProps.modalResult || (prevProps.modalResult.visible !== modalResult.visible)) {
37
+ if(modalResult.visible) {
38
+ this.eventListener.init();
39
+ }
40
+ else {
41
+ this.eventListener.exit();
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ willUnmount() {
48
+ this.eventListener.exit();
49
+ }
50
+
51
+ hide() {
52
+ this.props.onHide();
53
+ }
54
+
55
+ _keyDown(e) {
56
+ if(e.ctrlKey && e.shiftKey && 'R' === e.key) {
57
+ e.preventDefault();
58
+ this._remove();
59
+ this.hide();
60
+ }
61
+ else if(e.ctrlKey && e.shiftKey && 'D' === e.key) {
62
+ e.preventDefault();
63
+ this._delete();
64
+ this.hide();
65
+ }
66
+ else if(e.ctrlKey && e.shiftKey && 'C' === e.key) {
67
+ e.preventDefault();
68
+ this.hide();
69
+ }
70
+ }
71
+
72
+ renderErrorMessage() {
73
+ const modalResult = this.props.modalResults.get(this.props.name);
74
+ if(this.state.error || 'error' === modalResult?.result.code) {
75
+ const msg = this.state.error ? this.state.errorText : modalResult.result.msg;
76
+ const errorDivStyle = {
77
+ float: 'left',
78
+ textAlign: 'left',
79
+ width: 420
80
+ };
81
+ const labelStyle = {
82
+ top: '2px',
83
+ position: 'relative'
84
+ };
85
+ return (
86
+ <div style={errorDivStyle}>
87
+ <p id="folder_remove_modal_error_label" className="text-danger control-label modal_body_p_as_label" style={labelStyle}>{msg}</p>
88
+ </div>
89
+ );
90
+ }
91
+ else {
92
+ return null;
93
+ }
94
+ }
95
+
96
+ renderText() {
97
+ if(null !== this.props.folder) {
98
+ return `Do you really want to delete or remove: '${this.props.folder.data.path}/${this.props.folder.title}'?`;
99
+ }
100
+ else {
101
+ return '';
102
+ }
103
+ }
104
+
105
+ render() {
106
+ const modalResult = this.props.modalResults.get(this.props.name);
107
+ const show = modalResult?.visible;
108
+ this.helperModalPopover.onRender();
109
+ return (
110
+ <Modal ref={this.helperModalPopover.modalRef} id="modal_folder_remove" aria-labelledby="contained-modal-title-sm" show={show}
111
+ onHide={(e) => {
112
+ this.hide();
113
+ }}
114
+ >
115
+ <ModalHeader closeButton>
116
+ <img className="modal_header_icon pull-left" src="/abs-images/svg/ActorJsA.svg" alt="ActorJs Icon"></img>
117
+ <h4 className="modal_header_heading modal-sm">{this.props.heading}</h4>
118
+ </ModalHeader>
119
+ <ModalBody>
120
+ {this.renderText()}
121
+ </ModalBody>
122
+ <ModalFooter>
123
+ {this.renderErrorMessage()}
124
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+R" style={{display:'inline-block'}} disabled={!show}>
125
+ <button id="folder_remove_remove_button" type="button" className="btn btn-warning"
126
+ onClick={(e) => {
127
+ this.props.onFolderRemove(this.props.folder.projectId, this.props.folder.title, this.props.folder.key, this.props.folder.data);
128
+ }}
129
+ >Remove</button>
130
+ </Popover>
131
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+D" style={{display:'inline-block',marginLeft:'5px'}} disabled={!show}>
132
+ <button id="folder_remove_delete_button" type="button" className="btn btn-danger"
133
+ onClick={(e) => {
134
+ this.props.onFolderDelete(this.props.folder.projectId, this.props.folder.title, this.props.folder.key, this.props.folder.data);
135
+ }}
136
+ >Delete</button>
137
+ </Popover>
138
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+C" style={{display:'inline-block',marginLeft:'5px'}} disabled={!show}>
139
+ <button id="folder_remove_close_button" type="button" className="btn btn-default" disabled={!show}
140
+ onClick={(e) => {
141
+ this.hide();
142
+ }}
143
+ >Close</button>
144
+ </Popover>
145
+ </ModalFooter>
146
+ </Modal>
147
+ );
148
+ }
149
+ }
@@ -0,0 +1,144 @@
1
+
2
+ 'use strict';
3
+
4
+ import HelperEventListener from './helper/helper-event-listener';
5
+ import HelperModalPopover from './helper/helper-modal-popover';
6
+ import Modal from 'z-abs-complayer-bootstrap-client/client/modal';
7
+ import ModalHeader from 'z-abs-complayer-bootstrap-client/client/modal-header';
8
+ import ModalBody from 'z-abs-complayer-bootstrap-client/client/modal-body';
9
+ import ModalFooter from 'z-abs-complayer-bootstrap-client/client/modal-footer';
10
+ import Popover from 'z-abs-complayer-bootstrap-client/client/popover';
11
+ import ReactComponentBase from 'z-abs-corelayer-client/client/react-component/react-component-base';
12
+ import React from 'react';
13
+
14
+
15
+ export default class ModalDialogSearch extends ReactComponentBase {
16
+ constructor(props) {
17
+ super(props, {
18
+ show: false,
19
+ search: '',
20
+ rules: ''
21
+ });
22
+ this.helperModalPopover = new HelperModalPopover();
23
+ this.inputRef = React.createRef();
24
+ this.eventListener = new HelperEventListener('keydown', this._keyDown.bind(this), true);
25
+ }
26
+
27
+ didMount() {
28
+ this.helperModalPopover.didMount();
29
+ }
30
+
31
+ shouldUpdate(nextProps, nextState) {
32
+ return !this.shallowCompare(this.props.result, nextProps.result)
33
+ || !this.shallowCompare(this.state, nextState);
34
+ }
35
+
36
+ willUnmount() {
37
+ this.eventListener.exit();
38
+ }
39
+
40
+ show() {
41
+ this.updateState({
42
+ show: {$set: true},
43
+ search: {$set: ''},
44
+ rules: {$set: ''}
45
+ });
46
+ this.eventListener.init();
47
+ }
48
+
49
+ hide() {
50
+ this.eventListener.exit();
51
+ this.updateState({
52
+ show: {$set: false}
53
+ });
54
+ }
55
+
56
+ _keyDown(e) {
57
+ if(!e.ctrlKey && !e.shiftKey && 'Enter' === e.key) {
58
+ if(!this.state.error) {
59
+ e.preventDefault();
60
+ this.props.onSearch(this.state.search, this.state.rules);
61
+ this.hide();
62
+ }
63
+ }
64
+ else if(e.ctrlKey && e.shiftKey && 'C' === e.key) {
65
+ e.preventDefault();
66
+ this.hide();
67
+ }
68
+ }
69
+
70
+ renderErrorMessage() {
71
+ /*if(this.props.result.code !== 'success') {
72
+ let errorDivStyle = {
73
+ float: 'left',
74
+ textAlign: 'left',
75
+ width: 440
76
+ }
77
+ return (
78
+ <div style={errorDivStyle}>
79
+ <p className="text-danger control-label modal_body_p_as_label">{this.props.result.msg}</p>
80
+ </div>
81
+ );
82
+ }*/
83
+ }
84
+
85
+ render() {
86
+ let nameDivLabelClassName = 'col-sm-10';
87
+ let errorShow = false;
88
+ if(undefined !== this.props.result.status && !this.props.result.status.name.status) {
89
+ nameDivLabelClassName += ' has-error';
90
+ errorShow = true;
91
+ }
92
+ this.helperModalPopover.onRender();
93
+ return (
94
+ <Modal ref={this.helperModalPopover.modalRef} id="modal_search" aria-labelledby="contained-modal-title-sm" show={this.state.show || errorShow}
95
+ onShown={(e) => {
96
+ this.inputRef.current.select();
97
+ }}
98
+ onHide={(e) => {
99
+ this.hide();
100
+ }}
101
+ >
102
+ <ModalHeader closeButton>
103
+ <img className="modal_header_icon pull-left" src="/abs-images/svg/ActorJsA.svg" alt="ActorJs Icon"></img>
104
+ <h4 className="modal_header_heading modal-sm">Search</h4>
105
+ </ModalHeader>
106
+ <ModalBody>
107
+ <div className="form-group">
108
+ <div className="row" style={{textAlign: 'right'}}>
109
+ <div className="col-sm-2">
110
+ <label htmlFor="modal_dialog_search_find_what" className="control-label">Name</label>
111
+ </div>
112
+ <div className="col-sm-9">
113
+ <input ref={this.inputRef} type="text" id="modal_dialog_search_find_what" className="form-control input-sm" placeholder="find what" value={this.state.search}
114
+ onChange={(e) => {
115
+ this.updateState({search: {$set: e.target.value}});
116
+ }}
117
+ />
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </ModalBody>
122
+ <ModalFooter>
123
+ {this.renderErrorMessage()}
124
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Enter" style={{display:'inline-block'}} disabled={!this.state.show}>
125
+ <button id="modal_dialog_search_button" type="button" className="btn btn-primary" disabled={0 === this.state.search.length}
126
+ onClick={(e) => {
127
+ this.props.onSearch(this.state.search, this.state.rules);
128
+ this.hide();
129
+ }}
130
+ >Search</button>
131
+ </Popover>
132
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+C" style={{display:'inline-block',marginLeft:'5px'}} disabled={!this.state.show}>
133
+ <button id="modal_dialog_close_button" type="button" className="btn btn-default" disabled={!this.state.show}
134
+ onClick={(e) => {
135
+ this.hide();
136
+ }}
137
+ >Close</button>
138
+ </Popover>
139
+ </ModalFooter>
140
+ </Modal>
141
+ );
142
+ }
143
+ }
144
+
@@ -0,0 +1,49 @@
1
+
2
+ 'use strict';
3
+
4
+ import ReactComponentBase from 'z-abs-corelayer-client/client/react-component/react-component-base';
5
+ import React from 'react';
6
+
7
+
8
+ export default class ModalDialogWizardList extends ReactComponentBase {
9
+ constructor(props) {
10
+ super(props, {
11
+ listName: ''
12
+ });
13
+ }
14
+
15
+ shouldUpdate(nextProps, nextState) {
16
+ return !this.shallowCompare(this.props, nextProps)
17
+ || !this.shallowCompare(this.state, nextState);
18
+ }
19
+
20
+ renderlistNameOptions() {
21
+ if(null !==this.props.listNames) {
22
+ return this.props.listNames.map((listName, index) => {
23
+ return (
24
+ <option key={index} value={listName}>{listName}</option>
25
+ );
26
+ });
27
+ }
28
+ }
29
+
30
+ render() {
31
+ return (
32
+ <div className="row" style={{textAlign: 'right'}}>
33
+ <div className="col-sm-2">
34
+ <label htmlFor={`modal_dialog_wizard_list_${this.props.listName}`} className="control-label">{this.props.listName}</label>
35
+ </div>
36
+ <div className="col-sm-9">
37
+ <select id={`modal_dialog_wizard_list_${this.props.listName}`} className="form-control input-sm" value={this.state.listName}
38
+ onChange={(e) => {
39
+ this.updateState({listName: {$set: e.target.value}});
40
+ this.props.onChosenList && this.props.onChosenList(e.target.value);
41
+ }}
42
+ >
43
+ {this.renderlistNameOptions()}
44
+ </select>
45
+ </div>
46
+ </div>
47
+ );
48
+ }
49
+ }