@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,220 @@
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 ModalDialogAbstractionProperties extends ReactComponentBase {
17
+ constructor(props) {
18
+ super(props, {
19
+ show: false,
20
+ name: '',
21
+ description: '',
22
+ valid: false,
23
+ error: false,
24
+ errorText: ''
25
+ });
26
+ this.originalName = '';
27
+ this.originalDescription = '';
28
+ this.helperModalPopover = new HelperModalPopover();
29
+ this.inputRef = React.createRef();
30
+ this.inputAnalyzer = new InputAnalyzer(this.props.capitalFirst ? true : false);
31
+ this.hasEventListener = false;
32
+ this.eventListener = new HelperEventListener('keydown', this._keyDown.bind(this), true);
33
+ }
34
+
35
+ didMount() {
36
+ this.props.onLoad && this.props.onLoad();
37
+ this.helperModalPopover.didMount();
38
+ }
39
+
40
+ shouldUpdate(nextProps, nextState) {
41
+ return !this.shallowCompare(this.props.result, nextProps.result)
42
+ || !this.shallowCompare(this.props.heading, nextProps.heading)
43
+ || !this.shallowCompare(this.props.nameplaceholder, nextProps.nameplaceholder)
44
+ || !this.shallowCompare(this.props.descriptionplaceholder, nextProps.descriptionplaceholder)
45
+ || !this.shallowCompare(this.props.specialName, nextProps.specialName)
46
+ || !this.shallowCompare(this.state, nextState);
47
+ }
48
+
49
+ willUnmount() {
50
+ this.eventListener.exit();
51
+ }
52
+
53
+ show() {
54
+ this.originalName = this.props.name ? this.props.name : '';
55
+ this.originalDescription = this.props.description ? this.props.description : '';
56
+ this.updateState({show: {$set: true}});
57
+ this.updateState({name: {$set: this.originalName}});
58
+ this.updateState({description: {$set: this.originalDescription}});
59
+ this.updateState({valid: {$set: true}});
60
+ this.updateState({error: {$set: false}});
61
+ this.updateState({errorText: {$set: ''}});
62
+ this.eventListener.init();
63
+ }
64
+
65
+ hide() {
66
+ this.eventListener.exit();
67
+ this.updateState(
68
+ {show: {$set: false}
69
+ });
70
+ }
71
+
72
+ _keyDown(e) {
73
+ if(!e.ctrlKey && !e.shiftKey && 'Enter' === e.key) {
74
+ if(!this.state.error) {
75
+ e.preventDefault();
76
+ this.add();
77
+ this.hide();
78
+ }
79
+ }
80
+ else if(e.ctrlKey && e.shiftKey && 'C' === e.key) {
81
+ e.preventDefault();
82
+ this.clear();
83
+ this.hide();
84
+ }
85
+ }
86
+
87
+ add() {
88
+ this.props.onAdd && this.props.onAdd(this.state.name, this.state.description.trim());
89
+ }
90
+
91
+ clear() {
92
+ this.props.onClear && this.props.onClear();
93
+ }
94
+
95
+ renderErrorMessage() {
96
+ if(this.state.error) {
97
+ const errorDivStyle = {
98
+ float: 'left',
99
+ textAlign: 'left',
100
+ width: 420
101
+ };
102
+ const labelStyle = {
103
+ top: '6px',
104
+ position: 'relative'
105
+ };
106
+ return (
107
+ <div style={errorDivStyle}>
108
+ <p className="text-danger control-label modal_body_p_as_label" style={labelStyle}>{this.state.errorText}</p>
109
+ </div>
110
+ );
111
+ }
112
+ else if(this.props.result.code !== 'success') {
113
+ const errorDivStyle = {
114
+ float: 'left',
115
+ textAlign: 'left',
116
+ width: 420
117
+ };
118
+ const labelStyle = {
119
+ top: '6px',
120
+ position: 'relative'
121
+ };
122
+ return (
123
+ <div style={errorDivStyle}>
124
+ <p className="text-danger control-label modal_body_p_as_label" style={labelStyle}>{this.props.result.msg}</p>
125
+ </div>
126
+ );
127
+ }
128
+ }
129
+
130
+ render() {
131
+ let nameDivLabelClassName = 'col-sm-10';
132
+ let errorShow = false;
133
+ if(undefined !== this.props.result.status && !this.props.result.status.name.status) {
134
+ nameDivLabelClassName += ' has-error';
135
+ errorShow = true;
136
+ }
137
+ else if(this.state.error) {
138
+ nameDivLabelClassName += ' has-error';
139
+ }
140
+ const inputNameClass = this.state.error ? 'form-control has-error' : 'form-control';
141
+ const buttonSpecializedName = this.props.specialName ? this.props.specialName + '_' : '';
142
+ this.helperModalPopover.onRender();
143
+ return (
144
+ <Modal ref={this.helperModalPopover.modalRef} id={`modal_abstraction_${buttonSpecializedName}properties`} show={this.state.show || errorShow}
145
+ onShown={(e) => {
146
+ this.inputRef.current.focus();
147
+ }}
148
+ onHide={(e) => {
149
+ this.clear();
150
+ this.hide();
151
+ }}
152
+ >
153
+ <ModalHeader closeButton>
154
+ <img className="modal_header_icon pull-left" src="/abs-images/svg/ActorJsA.svg" alt="ActorJs Icon"></img>
155
+ <h4 className="modal_header_heading modal-sm">{this.props.heading}</h4>
156
+ </ModalHeader>
157
+ <ModalBody>
158
+ <div className="form-group">
159
+ <label htmlFor="modal_dialog_abstraction_properties_name" className="col-sm-2 control-label">Name</label>
160
+ <div className={nameDivLabelClassName}>
161
+ <input ref={this.inputRef} id="modal_dialog_abstraction_properties_name" type="text" className="form-control" value={this.state.name} placeholder={this.props.nameplaceholder}
162
+ onChange={(e) => {
163
+ const result = this.inputAnalyzer.analyze(e.target.value);
164
+ if(result.success) {
165
+ this.updateState({valid: {$set: true}});
166
+ this.updateState({error: {$set: false}});
167
+ }
168
+ else {
169
+ this.updateState({valid: {$set: false}});
170
+ this.updateState({error: {$set: true}});
171
+ if(!result.upperCaseValidation) {
172
+ this.updateState({errorText: {$set: 'The name must start with a capital letter'}});
173
+ }
174
+ else if(!result.regexpValidation) {
175
+ this.updateState({errorText: {$set: `The name contains not allowed characters: '${result.noneValidCharacters}'`}});
176
+ }
177
+ else if(!result.filenameValidation) {
178
+ this.updateState({errorText: {$set: `The filename is not allowed: '${result.noneValidFilename}'`}});
179
+ }
180
+ }
181
+ this.updateState({name: {$set: result.text}});
182
+ }}
183
+ />
184
+ </div>
185
+ </div>
186
+ <div className="form-group">
187
+ <label htmlFor="modal_dialog_abstraction_properties_description" className="col-sm-2 control-label">Description</label>
188
+ <div className="col-sm-10">
189
+ <input type="text" id="modal_dialog_abstraction_properties_description" className="form-control" value={this.state.description} placeholder={this.props.descriptionplaceholder}
190
+ onChange={(e) => {
191
+ this.updateState({description: {$set: e.target.value}});
192
+ }}
193
+ />
194
+ </div>
195
+ </div>
196
+ </ModalBody>
197
+ <ModalFooter>
198
+ {this.renderErrorMessage()}
199
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Enter" style={{display:'inline-block'}} disabled={!this.state.show}>
200
+ <button id={`abstraction_properties_${buttonSpecializedName}properties_button`} type="button" className="btn btn-primary" disabled={!this.state.valid || (this.originalName === this.state.name && this.originalDescription === this.state.description)}
201
+ onClick={(e) => {
202
+ this.add();
203
+ this.hide();
204
+ }}
205
+ >Change</button>
206
+ </Popover>
207
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+C" style={{display:'inline-block',marginLeft:'5px'}} disabled={!this.state.show}>
208
+ <button id={`abstraction_properties_${buttonSpecializedName}close_button`} type="button" className="btn btn-default" disabled={!this.state.show}
209
+ onClick={(e) => {
210
+ this.clear();
211
+ this.hide();
212
+ }}
213
+ >Close</button>
214
+ </Popover>
215
+ </ModalFooter>
216
+ </Modal>
217
+ );
218
+ }
219
+ }
220
+
@@ -0,0 +1,183 @@
1
+
2
+ 'use strict';
3
+
4
+ import HelperEventListener from './helper/helper-event-listener';
5
+ import HelperModalPopover from './helper/helper-modal-popover';
6
+ import FileIcons from 'z-abs-complayer-bootstrap-client/client/icons/file-icons';
7
+ import FolderIcons from 'z-abs-complayer-bootstrap-client/client/icons/folder-icons';
8
+ import Modal from 'z-abs-complayer-bootstrap-client/client/modal';
9
+ import ModalHeader from 'z-abs-complayer-bootstrap-client/client/modal-header';
10
+ import ModalBody from 'z-abs-complayer-bootstrap-client/client/modal-body';
11
+ import ModalFooter from 'z-abs-complayer-bootstrap-client/client/modal-footer';
12
+ import Popover from 'z-abs-complayer-bootstrap-client/client/popover';
13
+ import Tree from 'z-abs-complayer-tree-client/client/react-components/tree';
14
+ import ReactComponentBase from 'z-abs-corelayer-client/client/react-component/react-component-base';
15
+ import React from 'react';
16
+
17
+
18
+ export default class ModalDialogFileAdd extends ReactComponentBase {
19
+ constructor(props) {
20
+ super(props, {
21
+ name: ''
22
+ });
23
+ this.helperModalPopover = new HelperModalPopover();
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.name, nextProps.name)
33
+ || !this.shallowCompare(this.props.heading, nextProps.heading)
34
+ || !this.shallowCompare(this.props.folder, nextProps.folder)
35
+ || !this.shallowCompare(this.props.result, nextProps.result)
36
+ || !this.shallowCompare(this.props.project, nextProps.project)
37
+ || !this.shallowCompare(this.props.current, nextProps.current)
38
+ || !this.shallowCompare(this.props.original, nextProps.original)
39
+ || !this.shallowCompare(this.props.modalResults, nextProps.modalResults)
40
+ || !this.shallowCompare(this.state, nextState);
41
+ }
42
+
43
+ didUpdate(prevProps, prevState) {
44
+ const previousModalResult = prevProps.modalResults.get(this.props.name);
45
+ const modalResult = this.props.modalResults.get(this.props.name);
46
+ if(modalResult) {
47
+ if(!prevProps.modalResult || (prevProps.modalResult.visible !== modalResult.visible)) {
48
+ if(modalResult.visible) {
49
+ this.eventListener.init();
50
+ }
51
+ else {
52
+ this.eventListener.exit();
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ willUnmount() {
59
+ this.eventListener.exit();
60
+ }
61
+
62
+ hide() {
63
+ this.updateState({name: {$set: ''}});
64
+ this.props.onHide();
65
+ }
66
+
67
+ _keyDown(e) {
68
+ const disabled = (null === this.props.current.file) || !this.props.current.file.data.path.startsWith(`${this.props.original.folder.data.path}/${this.props.original.folder.title}`);
69
+ if(!e.ctrlKey && !e.shiftKey && 'Enter' === e.key) {
70
+ if(!disabled) {
71
+ e.preventDefault();
72
+ this.props.onAdd(this.props.folder.projectId, this.props.current.file.title, this.props.current.file.data.path, this.props.current.file.data.type);
73
+ this.hide();
74
+ }
75
+ }
76
+ else if(e.ctrlKey && e.shiftKey && 'C' === e.key) {
77
+ e.preventDefault();
78
+ this.hide();
79
+ }
80
+ else if('ArrowUp' === e.key) {
81
+
82
+ }
83
+ else if('ArrowDown' === e.key) {
84
+
85
+ }
86
+ else if('ArrowLeft' === e.key) {
87
+
88
+ }
89
+
90
+ else if('ArrowRight' === e.key) {
91
+
92
+ }
93
+ }
94
+
95
+ setName(name) {
96
+ this.updateState({name: {$set: name}});
97
+ }
98
+
99
+ setDescription(description) {
100
+ this.updateState({
101
+ description: {$set: description}
102
+ });
103
+ }
104
+
105
+ renderErrorMessage() {
106
+ const modalResult = this.props.modalResults.get(this.props.name);
107
+ if(this.state.error || 'error' === modalResult?.result.code) {
108
+ const msg = this.state.error ? this.state.errorText : modalResult.result.msg;
109
+ const errorDivStyle = {
110
+ float: 'left',
111
+ textAlign: 'left',
112
+ width: 420
113
+ };
114
+ const labelStyle = {
115
+ top: '2px',
116
+ position: 'relative'
117
+ };
118
+ return (
119
+ <div style={errorDivStyle}>
120
+ <p id="file_add_modal_error_label" className="text-danger control-label modal_body_p_as_label" style={labelStyle}>{msg}</p>
121
+ </div>
122
+ );
123
+ }
124
+ else {
125
+ return null;
126
+ }
127
+ }
128
+
129
+ renderTree() {
130
+ const activationFilter = null !== this.props.original.folder ? `${this.props.original.folder.data.path}/${this.props.original.folder.title}` : undefined;
131
+ return (
132
+ <Tree id="actor_tree_modul_dialog_file" project={this.props.project} current={this.props.current} expandCurrentFolder={true} allowExpand={false} activationFilter={activationFilter} folderIcons={FolderIcons} fileIcons={FileIcons}
133
+ onClickFile={(key, title, path, type) => {
134
+ this.props.project.select(key, true);
135
+ this.props.onChoose(`${path}/${title}`);
136
+ }}
137
+ onClickFolder={(key, title, path, types) => {}}
138
+ onToggleFolder={(key, expanded) => {}}
139
+ />
140
+ );
141
+ }
142
+
143
+ render() {
144
+ this.helperModalPopover.onRender();
145
+ const modalResult = this.props.modalResults.get(this.props.name);
146
+ const show = !!modalResult?.visible;
147
+ const disabled = (null === this.props.current.file) || !this.props.current.file.data.path.startsWith(`${this.props.original.folder.data.path}/${this.props.original.folder.title}`);
148
+ return (
149
+ <Modal ref={this.helperModalPopover.modalRef} id="modal_file_add" show={show}
150
+ onHide={(e) => {
151
+ this.hide();
152
+ }}
153
+ >
154
+ <ModalHeader closeButton>
155
+ <img className="modal_header_icon pull-left" src="/abs-images/svg/ActorJsA.svg" alt="ActorJs Icon"></img>
156
+ <h4 className="modal_header_heading modal-sm">{this.props.heading}</h4>
157
+ </ModalHeader>
158
+ <ModalBody>
159
+ {this.renderTree()}
160
+ </ModalBody>
161
+ <ModalFooter>
162
+ {this.renderErrorMessage()}
163
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Enter" style={{display:'inline-block'}} disabled={!show}>
164
+ <button id="file_add_add_button" type="button" className="btn btn-primary" disabled={disabled}
165
+ onClick={(e) => {
166
+ this.props.onAdd(this.props.folder.projectId, this.props.current.file.title, this.props.current.file.data.path, this.props.current.file.data.type);
167
+ this.hide();
168
+ }}
169
+ >Add</button>
170
+ </Popover>
171
+ <Popover ref={this.helperModalPopover.getPopoverRef()} placement="bottom" heading="" content="" shortcut="Ctrl+Shift+C" style={{display:'inline-block',marginLeft:'5px'}} disabled={!show}>
172
+ <button id="file_add_close_button" type="button" className="btn btn-default" disabled={!show}
173
+ onClick={(e) => {
174
+ this.hide();
175
+ }}
176
+ >Close</button>
177
+ </Popover>
178
+ </ModalFooter>
179
+ </Modal>
180
+ );
181
+ }
182
+ }
183
+