@singularsystems/neo-react 1.0.0-alpha.2 → 1.0.0-beta.0

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 (196) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +4 -0
  3. package/dist/Modules/NeoReactModule.d.ts +4 -4
  4. package/dist/Modules/NeoReactModule.js +28 -26
  5. package/dist/Modules/ReactSetup.d.ts +2 -2
  6. package/dist/Modules/ReactSetup.js +17 -17
  7. package/dist/Modules/Types.d.ts +63 -61
  8. package/dist/Modules/Types.js +13 -12
  9. package/dist/React/AutoRunner.d.ts +5 -5
  10. package/dist/React/AutoRunner.js +94 -92
  11. package/dist/React/DataView.d.ts +6 -6
  12. package/dist/React/DataView.js +11 -11
  13. package/dist/React/ReactModelCreator.d.ts +11 -11
  14. package/dist/React/ReactModelCreator.js +165 -162
  15. package/dist/ReactComponents/Button.d.ts +24 -23
  16. package/dist/ReactComponents/Button.js +131 -123
  17. package/dist/ReactComponents/Card.d.ts +24 -23
  18. package/dist/ReactComponents/Card.js +56 -54
  19. package/dist/ReactComponents/Collapsable.d.ts +23 -23
  20. package/dist/ReactComponents/Collapsable.js +38 -38
  21. package/dist/ReactComponents/CollapsableBase.d.ts +13 -13
  22. package/dist/ReactComponents/CollapsableBase.js +42 -42
  23. package/dist/ReactComponents/ColorPicker.d.ts +26 -26
  24. package/dist/ReactComponents/ColorPicker.js +67 -67
  25. package/dist/ReactComponents/ComponentBase.d.ts +17 -17
  26. package/dist/ReactComponents/ComponentBase.js +33 -33
  27. package/dist/ReactComponents/ContextMenu/ContextMenu.d.ts +25 -24
  28. package/dist/ReactComponents/ContextMenu/ContextMenu.js +91 -88
  29. package/dist/ReactComponents/ContextMenu/ContextMenuContainer.d.ts +14 -14
  30. package/dist/ReactComponents/ContextMenu/ContextMenuContainer.js +48 -48
  31. package/dist/ReactComponents/ContextMenu/ContextMenuState.d.ts +8 -7
  32. package/dist/ReactComponents/ContextMenu/ContextMenuState.js +23 -23
  33. package/dist/ReactComponents/DatePicker.d.ts +19 -19
  34. package/dist/ReactComponents/DatePicker.js +53 -53
  35. package/dist/ReactComponents/DropDown/AutoCompleteDropDown.d.ts +93 -83
  36. package/dist/ReactComponents/DropDown/AutoCompleteDropDown.js +222 -188
  37. package/dist/ReactComponents/DropDown/DropDown.d.ts +44 -44
  38. package/dist/ReactComponents/DropDown/DropDown.js +138 -134
  39. package/dist/ReactComponents/DropDown/DropDownBase.d.ts +16 -15
  40. package/dist/ReactComponents/DropDown/DropDownBase.js +86 -108
  41. package/dist/ReactComponents/DropDown/LookupHelper.d.ts +13 -0
  42. package/dist/ReactComponents/DropDown/LookupHelper.js +45 -0
  43. package/dist/ReactComponents/ErrorHandler.d.ts +9 -8
  44. package/dist/ReactComponents/ErrorHandler.js +92 -91
  45. package/dist/ReactComponents/FileManager/FileBasicInput.d.ts +20 -20
  46. package/dist/ReactComponents/FileManager/FileBasicInput.js +70 -70
  47. package/dist/ReactComponents/FileManager/FileContext.d.ts +16 -16
  48. package/dist/ReactComponents/FileManager/FileContext.js +24 -24
  49. package/dist/ReactComponents/FileManager/FileDropArea.d.ts +19 -18
  50. package/dist/ReactComponents/FileManager/FileDropArea.js +66 -64
  51. package/dist/ReactComponents/FileManager/FileInput.d.ts +44 -42
  52. package/dist/ReactComponents/FileManager/FileInput.js +191 -189
  53. package/dist/ReactComponents/FileManager/FileUploadButton.d.ts +17 -17
  54. package/dist/ReactComponents/FileManager/FileUploadButton.js +49 -49
  55. package/dist/ReactComponents/FileManager/FileUploadProgress.d.ts +14 -14
  56. package/dist/ReactComponents/FileManager/FileUploadProgress.js +35 -35
  57. package/dist/ReactComponents/Form.d.ts +19 -18
  58. package/dist/ReactComponents/Form.js +90 -90
  59. package/dist/ReactComponents/FormContext.d.ts +33 -31
  60. package/dist/ReactComponents/FormContext.js +39 -40
  61. package/dist/ReactComponents/FormGroup/FormGroup.d.ts +37 -37
  62. package/dist/ReactComponents/FormGroup/FormGroup.js +83 -84
  63. package/dist/ReactComponents/FormGroup/FormGroupFloating.d.ts +19 -19
  64. package/dist/ReactComponents/FormGroup/FormGroupFloating.js +97 -97
  65. package/dist/ReactComponents/FormGroup/FormGroupInline.d.ts +11 -11
  66. package/dist/ReactComponents/FormGroup/FormGroupInline.js +43 -43
  67. package/dist/ReactComponents/Grid/ButtonColumn.d.ts +47 -47
  68. package/dist/ReactComponents/Grid/ButtonColumn.js +81 -82
  69. package/dist/ReactComponents/Grid/Column.d.ts +47 -47
  70. package/dist/ReactComponents/Grid/Column.js +205 -205
  71. package/dist/ReactComponents/Grid/ColumnHelper.d.ts +12 -12
  72. package/dist/ReactComponents/Grid/ColumnHelper.js +19 -19
  73. package/dist/ReactComponents/Grid/Grid.d.ts +87 -90
  74. package/dist/ReactComponents/Grid/Grid.js +203 -203
  75. package/dist/ReactComponents/Grid/Row.d.ts +81 -81
  76. package/dist/ReactComponents/Grid/Row.js +200 -201
  77. package/dist/ReactComponents/Grid/_Exports.d.ts +5 -5
  78. package/dist/ReactComponents/Grid/_Exports.js +5 -5
  79. package/dist/ReactComponents/GridLayout.d.ts +20 -20
  80. package/dist/ReactComponents/GridLayout.js +38 -38
  81. package/dist/ReactComponents/Icons/FontAwesomeIconFactory.d.ts +23 -0
  82. package/dist/ReactComponents/Icons/FontAwesomeIconFactory.js +43 -0
  83. package/dist/ReactComponents/Icons/IIconFactory.d.ts +21 -0
  84. package/dist/ReactComponents/Icons/IIconFactory.js +1 -0
  85. package/dist/ReactComponents/Icons/IconFactory.d.ts +9 -0
  86. package/dist/ReactComponents/Icons/IconFactory.js +45 -0
  87. package/dist/ReactComponents/Icons/index.d.ts +3 -0
  88. package/dist/ReactComponents/Icons/index.js +2 -0
  89. package/dist/ReactComponents/Input.d.ts +45 -45
  90. package/dist/ReactComponents/Input.js +153 -152
  91. package/dist/ReactComponents/InputHelpers.d.ts +6 -5
  92. package/dist/ReactComponents/InputHelpers.js +29 -33
  93. package/dist/ReactComponents/Link.d.ts +13 -13
  94. package/dist/ReactComponents/Link.js +28 -28
  95. package/dist/ReactComponents/Loader.d.ts +18 -18
  96. package/dist/ReactComponents/Loader.js +57 -57
  97. package/dist/ReactComponents/Misc.d.ts +15 -15
  98. package/dist/ReactComponents/Misc.js +28 -28
  99. package/dist/ReactComponents/Modal/Modal.d.ts +11 -11
  100. package/dist/ReactComponents/Modal/Modal.js +129 -129
  101. package/dist/ReactComponents/Modal/ModalContainer.d.ts +17 -17
  102. package/dist/ReactComponents/Modal/ModalContainer.js +37 -37
  103. package/dist/ReactComponents/Modal/ModalPortal.d.ts +16 -15
  104. package/dist/ReactComponents/Modal/ModalPortal.js +27 -27
  105. package/dist/ReactComponents/Notifications/Alert.d.ts +7 -6
  106. package/dist/ReactComponents/Notifications/Alert.js +38 -35
  107. package/dist/ReactComponents/Notifications/Toast.d.ts +9 -8
  108. package/dist/ReactComponents/Notifications/Toast.js +47 -45
  109. package/dist/ReactComponents/Notifications/ToastContainer.d.ts +8 -8
  110. package/dist/ReactComponents/Notifications/ToastContainer.js +18 -18
  111. package/dist/ReactComponents/NumberInput.d.ts +57 -50
  112. package/dist/ReactComponents/NumberInput.js +260 -246
  113. package/dist/ReactComponents/Paging/BasicPagerControls.d.ts +26 -25
  114. package/dist/ReactComponents/Paging/BasicPagerControls.js +57 -55
  115. package/dist/ReactComponents/Paging/PageSizeControl.d.ts +11 -11
  116. package/dist/ReactComponents/Paging/PageSizeControl.js +21 -21
  117. package/dist/ReactComponents/Paging/Pager.d.ts +24 -24
  118. package/dist/ReactComponents/Paging/Pager.js +41 -41
  119. package/dist/ReactComponents/ProgressBar.d.ts +19 -19
  120. package/dist/ReactComponents/ProgressBar.js +52 -52
  121. package/dist/ReactComponents/PropTypes.d.ts +161 -161
  122. package/dist/ReactComponents/PropTypes.js +253 -236
  123. package/dist/ReactComponents/RadioList.d.ts +29 -29
  124. package/dist/ReactComponents/RadioList.js +59 -77
  125. package/dist/ReactComponents/Slider.d.ts +28 -28
  126. package/dist/ReactComponents/Slider.js +76 -76
  127. package/dist/ReactComponents/StateObserver.d.ts +15 -15
  128. package/dist/ReactComponents/StateObserver.js +35 -35
  129. package/dist/ReactComponents/Tabs/Tab.d.ts +42 -41
  130. package/dist/ReactComponents/Tabs/Tab.js +71 -72
  131. package/dist/ReactComponents/Tabs/TabContainer.d.ts +44 -44
  132. package/dist/ReactComponents/Tabs/TabContainer.js +98 -98
  133. package/dist/ReactComponents/Tabs/TabManager.d.ts +62 -62
  134. package/dist/ReactComponents/Tabs/TabManager.js +154 -154
  135. package/dist/ReactComponents/Tooltip.d.ts +20 -19
  136. package/dist/ReactComponents/Tooltip.js +51 -51
  137. package/dist/ReactComponents/TooltipHelper.d.ts +8 -8
  138. package/dist/ReactComponents/TooltipHelper.js +84 -84
  139. package/dist/ReactComponents/TooltipProvider.d.ts +30 -30
  140. package/dist/ReactComponents/TooltipProvider.js +111 -111
  141. package/dist/ReactComponents/ValidationSummary.d.ts +23 -22
  142. package/dist/ReactComponents/ValidationSummary.js +46 -43
  143. package/dist/ReactComponents/_Exports.d.ts +41 -41
  144. package/dist/ReactComponents/_Exports.js +41 -41
  145. package/dist/ReactComponents/_Managers.d.ts +4 -4
  146. package/dist/ReactComponents/_Managers.js +4 -4
  147. package/dist/Routing/BreadCrumbItem.d.ts +14 -14
  148. package/dist/Routing/BreadCrumbItem.js +12 -12
  149. package/dist/Routing/IRouteChangedProps.d.ts +31 -31
  150. package/dist/Routing/IRouteChangedProps.js +1 -1
  151. package/dist/Routing/IRouteParameter.d.ts +22 -22
  152. package/dist/Routing/IRouteParameter.js +9 -9
  153. package/dist/Routing/MenuRoute.d.ts +25 -24
  154. package/dist/Routing/MenuRoute.js +24 -24
  155. package/dist/Routing/NavigationHelper.d.ts +41 -40
  156. package/dist/Routing/NavigationHelper.js +61 -61
  157. package/dist/Routing/PageLeaveHandler.d.ts +13 -13
  158. package/dist/Routing/PageLeaveHandler.js +74 -74
  159. package/dist/Routing/RouteProvider.d.ts +31 -31
  160. package/dist/Routing/RouteProvider.js +92 -92
  161. package/dist/Routing/RouteView.d.ts +50 -50
  162. package/dist/Routing/RouteView.js +143 -144
  163. package/dist/Routing/RoutingState.d.ts +18 -15
  164. package/dist/Routing/RoutingState.js +45 -40
  165. package/dist/Routing/ViewParameter.d.ts +80 -58
  166. package/dist/Routing/ViewParameter.js +116 -95
  167. package/dist/Routing/ViewParameterList.d.ts +53 -53
  168. package/dist/Routing/ViewParameterList.js +163 -145
  169. package/dist/Routing/index.d.ts +9 -9
  170. package/dist/Routing/index.js +6 -6
  171. package/dist/Services/DisposeHelper.d.ts +15 -15
  172. package/dist/Services/DisposeHelper.js +40 -41
  173. package/dist/Services/IDisposeHelper.d.ts +12 -12
  174. package/dist/Services/IDisposeHelper.js +1 -1
  175. package/dist/Views/EmptyViewModel.d.ts +5 -5
  176. package/dist/Views/EmptyViewModel.js +14 -14
  177. package/dist/Views/IViewModel.d.ts +16 -16
  178. package/dist/Views/IViewModel.js +1 -1
  179. package/dist/Views/PersistentViewBase.d.ts +10 -10
  180. package/dist/Views/PersistentViewBase.js +21 -21
  181. package/dist/Views/ViewBase.d.ts +70 -71
  182. package/dist/Views/ViewBase.js +166 -153
  183. package/dist/Views/ViewComponentBase.d.ts +19 -13
  184. package/dist/Views/ViewComponentBase.js +24 -21
  185. package/dist/Views/ViewModelBase.d.ts +57 -56
  186. package/dist/Views/ViewModelBase.js +122 -118
  187. package/dist/Views/ViewState.d.ts +13 -13
  188. package/dist/Views/ViewState.js +9 -9
  189. package/dist/Views/index.d.ts +5 -5
  190. package/dist/Views/index.js +5 -5
  191. package/dist/index.d.ts +11 -10
  192. package/dist/index.js +10 -9
  193. package/package.json +26 -26
  194. package/styles/DatePicker.scss +2 -2
  195. package/styles/Forms.scss +5 -0
  196. package/styles/Validation.scss +0 -9
@@ -1,134 +1,138 @@
1
- import { __assign, __decorate, __extends, __metadata } from "tslib";
2
- import * as React from 'react';
3
- import { BindPropsHelper } from '../PropTypes';
4
- import { Utils } from '@singularsystems/neo-core';
5
- import { observer } from 'mobx-react';
6
- import { InputHelpers } from '../InputHelpers';
7
- import { DropDownBase } from './DropDownBase';
8
- import { FormContext } from '../FormContext';
9
- var DropDown = /** @class */ (function (_super) {
10
- __extends(DropDown, _super);
11
- function DropDown(props) {
12
- var _this = _super.call(this, props) || this;
13
- _this.listIndexSymbol = Symbol("ValueIndex");
14
- _this.onItemSelected = _this.onItemSelected.bind(_this);
15
- return _this;
16
- }
17
- Object.defineProperty(DropDown.prototype, "items", {
18
- get: function () {
19
- var _this = this;
20
- var _a;
21
- var items = this.getItems((_a = this.props.select.items) !== null && _a !== void 0 ? _a : this.props.select.itemSource);
22
- if (items && items.length > 0) {
23
- var item = items[0];
24
- this.findMembers(item);
25
- }
26
- if (this.props.select.filterPredicate !== undefined) {
27
- return items.filter(function (item) { return _this.props.bind.value === item[_this.valueMember] || _this.props.select.filterPredicate(item); });
28
- }
29
- else {
30
- return items;
31
- }
32
- },
33
- enumerable: false,
34
- configurable: true
35
- });
36
- DropDown.prototype.createLookupIndex = function (list) {
37
- var _this = this;
38
- list[this.listIndexSymbol] = {};
39
- var index = list[this.listIndexSymbol];
40
- list.forEach(function (item) { return index[item[_this.valueMember]] = item; });
41
- };
42
- DropDown.prototype.getSelectedOption = function (value) {
43
- this.props.bind.propertyInfo.hasSortValue = true;
44
- if (!this.selectedItem || this.selectedItem[this.valueMember] != value) {
45
- var list = this.items;
46
- var indexJustCreated = false;
47
- if (!list[this.listIndexSymbol]) {
48
- this.createLookupIndex(list);
49
- indexJustCreated = true;
50
- }
51
- this.selectedItem = list[this.listIndexSymbol][value];
52
- if (value && !this.selectedItem && !indexJustCreated) {
53
- // Index may be out of date.
54
- this.createLookupIndex(list);
55
- this.selectedItem = list[this.listIndexSymbol][value];
56
- }
57
- if (!this.selectedItem) {
58
- // create default item.
59
- this.selectedItem = {};
60
- this.selectedItem[this.displayMember] = "";
61
- this.selectedItem[this.valueMember] = null;
62
- }
63
- this.setFieldInfo(this.props.bind, this.selectedItem[this.displayMember]);
64
- }
65
- return this.selectedItem;
66
- };
67
- DropDown.prototype.onItemSelected = function (e) {
68
- this.selectedItem = null;
69
- var boundItem = this.getSelectedOption(e.target.value);
70
- if (boundItem && boundItem[this.valueMember] !== undefined) {
71
- // Use the bound item to get the correct data type of the value member;
72
- this.props.bind.value = boundItem[this.valueMember];
73
- }
74
- else {
75
- this.props.bind.value = e.target.value;
76
- }
77
- if (this.props.select.onItemSelected !== undefined) {
78
- this.props.select.onItemSelected((boundItem[this.valueMember] === undefined ? undefined : boundItem));
79
- }
80
- };
81
- DropDown.prototype.render = function () {
82
- var _this = this;
83
- var _a, _b, _c, _d, _e, _f;
84
- var splitProps = BindPropsHelper.normaliseEditorProps(this, this.props);
85
- var domProps = BindPropsHelper.autoSetDomProperties(splitProps, this.context);
86
- domProps.className = Utils.joinWithSpaces(domProps.className, splitProps.isBootstrap ? "form-control" : "neo-forms-editor");
87
- if (splitProps.select) {
88
- if (splitProps.select.valueMember)
89
- this.valueMember = splitProps.select.valueMember;
90
- if (splitProps.select.displayMember)
91
- this.displayMember = splitProps.select.displayMember;
92
- }
93
- var displayInfo = this.props.bind.validator.getDisplayState(this.context.validationDisplayMode);
94
- displayInfo.applyToDom(domProps, !splitProps.inGroup);
95
- var items = this.items;
96
- var selectedItem = this.getSelectedOption(this.props.bind.value); // This sets the sort value to allow sorting of drop downs in grids.
97
- var value = this.props.bind.value;
98
- var addBlankItem = ((_b = (_a = splitProps.select) === null || _a === void 0 ? void 0 : _a.allowNulls) !== null && _b !== void 0 ? _b : this.props.bind.propertyInfo.allowNulls) || !value;
99
- if (addBlankItem && items.find(function (item) { return item[_this.valueMember] === null || item[_this.valueMember] === ""; })) {
100
- // If there is an item with a null value, don't add a blank drop down item.
101
- addBlankItem = false;
102
- }
103
- var control;
104
- if (this.isLoading) {
105
- control = React.createElement("div", { className: "form-control form-control-loading" },
106
- React.createElement("div", { className: "spinner-border" }));
107
- }
108
- else if ((_c = splitProps.select) === null || _c === void 0 ? void 0 : _c.renderAsText) {
109
- control = React.createElement("span", null, selectedItem ? selectedItem[this.displayMember] : "");
110
- }
111
- else if (splitProps.editor.isReadOnly) {
112
- control = React.createElement("input", __assign({ type: "text", value: selectedItem ? selectedItem[this.displayMember] : "", ref: splitProps.editor.inputElement }, domProps));
113
- }
114
- else {
115
- if (domProps.readOnly) {
116
- domProps.disabled = true;
117
- }
118
- var valueIsBlank = value === undefined || value === null;
119
- var nullText = (valueIsBlank || ((_d = splitProps.select) === null || _d === void 0 ? void 0 : _d.deSelectText) === undefined) ? (_e = splitProps.select) === null || _e === void 0 ? void 0 : _e.nullText : (_f = splitProps.select) === null || _f === void 0 ? void 0 : _f.deSelectText;
120
- control =
121
- React.createElement("select", __assign({ value: valueIsBlank ? "" : value, onChange: this.onItemSelected, ref: splitProps.editor.inputElement }, domProps),
122
- addBlankItem && React.createElement("option", null, nullText),
123
- items.map(function (item) { return (React.createElement("option", { value: item[_this.valueMember], key: item[_this.valueMember] }, item[_this.displayMember])); }));
124
- }
125
- return (InputHelpers.surroundWithInputGroup(control, splitProps.editor));
126
- };
127
- DropDown.contextType = FormContext;
128
- DropDown = __decorate([
129
- observer,
130
- __metadata("design:paramtypes", [Object])
131
- ], DropDown);
132
- return DropDown;
133
- }(DropDownBase));
134
- export default DropDown;
1
+ import { __assign, __decorate, __extends, __metadata } from "tslib";
2
+ import * as React from 'react';
3
+ import { BindPropsHelper } from '../PropTypes';
4
+ import { Model, Utils } from '@singularsystems/neo-core';
5
+ import { observer } from 'mobx-react';
6
+ import { InputHelpers } from '../InputHelpers';
7
+ import { DropDownBase } from './DropDownBase';
8
+ import { FormContext } from '../FormContext';
9
+ var DropDown = /** @class */ (function (_super) {
10
+ __extends(DropDown, _super);
11
+ function DropDown(props) {
12
+ var _this = _super.call(this, props) || this;
13
+ _this.listIndexSymbol = Symbol("ValueIndex");
14
+ _this.onItemSelected = _this.onItemSelected.bind(_this);
15
+ _this.fieldInfoContainer = Model.ModelFieldInfo.asModelFieldInfoContainer(_this.props.bind.attachedTo);
16
+ return _this;
17
+ }
18
+ Object.defineProperty(DropDown.prototype, "items", {
19
+ get: function () {
20
+ var _this = this;
21
+ var _a;
22
+ var items = this.getItems((_a = this.props.select.items) !== null && _a !== void 0 ? _a : this.props.select.itemSource);
23
+ if (items && items.length > 0) {
24
+ var item = items[0];
25
+ this.findMembers(item);
26
+ }
27
+ if (this.props.select.filterPredicate !== undefined) {
28
+ return items.filter(function (item) { return _this.props.bind.value === item[_this.valueMember] || _this.props.select.filterPredicate(item); });
29
+ }
30
+ else {
31
+ return items;
32
+ }
33
+ },
34
+ enumerable: false,
35
+ configurable: true
36
+ });
37
+ DropDown.prototype.createLookupIndex = function (list) {
38
+ var _this = this;
39
+ list[this.listIndexSymbol] = {};
40
+ var index = list[this.listIndexSymbol];
41
+ list.forEach(function (item) { return index[item[_this.valueMember]] = item; });
42
+ };
43
+ DropDown.prototype.getSelectedOption = function (value) {
44
+ this.props.bind.propertyInfo.hasSortValue = true;
45
+ if (!this.selectedItem || this.selectedItem[this.valueMember] != value) {
46
+ var list = this.items;
47
+ var indexJustCreated = false;
48
+ if (!list[this.listIndexSymbol]) {
49
+ this.createLookupIndex(list);
50
+ indexJustCreated = true;
51
+ }
52
+ this.selectedItem = list[this.listIndexSymbol][value];
53
+ if (value && !this.selectedItem && !indexJustCreated) {
54
+ // Index may be out of date.
55
+ this.createLookupIndex(list);
56
+ this.selectedItem = list[this.listIndexSymbol][value];
57
+ }
58
+ if (!this.selectedItem) {
59
+ // create default item.
60
+ this.selectedItem = {};
61
+ this.selectedItem[this.displayMember] = "";
62
+ this.selectedItem[this.valueMember] = null;
63
+ }
64
+ this.setFieldInfo(this.props.bind, this.selectedItem[this.displayMember]);
65
+ }
66
+ return this.selectedItem;
67
+ };
68
+ DropDown.prototype.onItemSelected = function (e) {
69
+ this.selectedItem = null;
70
+ var boundItem = this.getSelectedOption(e.target.value);
71
+ if (boundItem && boundItem[this.valueMember] !== undefined) {
72
+ // Use the bound item to get the correct data type of the value member;
73
+ this.props.bind.value = boundItem[this.valueMember];
74
+ }
75
+ else {
76
+ this.props.bind.value = e.target.value;
77
+ }
78
+ if (this.props.select.onItemSelected !== undefined) {
79
+ this.props.select.onItemSelected((boundItem[this.valueMember] === undefined ? undefined : boundItem));
80
+ }
81
+ };
82
+ DropDown.prototype.render = function () {
83
+ var _this = this;
84
+ var _a, _b, _c, _d, _e, _f;
85
+ var splitProps = BindPropsHelper.normaliseEditorProps(this, this.props);
86
+ var domProps = BindPropsHelper.autoSetDomProperties(splitProps, this.context);
87
+ domProps.className = Utils.joinWithSpaces(domProps.className, splitProps.isBootstrap ? "form-control" : "neo-forms-editor");
88
+ if (splitProps.select) {
89
+ if (splitProps.select.valueMember)
90
+ this.valueMember = splitProps.select.valueMember;
91
+ if (splitProps.select.displayMember)
92
+ this.displayMember = splitProps.select.displayMember;
93
+ }
94
+ var displayInfo = this.props.bind.validator.getDisplayState(this.context.validationDisplayMode);
95
+ displayInfo.applyToDom(domProps, !splitProps.inGroup);
96
+ var items = this.items;
97
+ var selectedItem = this.getSelectedOption(this.props.bind.value); // This sets the sort value to allow sorting of drop downs in grids.
98
+ var value = this.props.bind.value;
99
+ var addBlankItem = ((_b = (_a = splitProps.select) === null || _a === void 0 ? void 0 : _a.allowNulls) !== null && _b !== void 0 ? _b : this.props.bind.propertyInfo.allowNulls) || !value;
100
+ if (addBlankItem && items.find(function (item) { return item[_this.valueMember] === null || item[_this.valueMember] === ""; })) {
101
+ // If there is an item with a null value, don't add a blank drop down item.
102
+ addBlankItem = false;
103
+ }
104
+ var control;
105
+ if (this.isLoading) {
106
+ control = React.createElement("div", { className: "form-control form-control-loading" },
107
+ React.createElement("div", { className: "spinner-border" }));
108
+ }
109
+ else if ((_c = splitProps.select) === null || _c === void 0 ? void 0 : _c.renderAsText) {
110
+ control = React.createElement("span", null, selectedItem ? selectedItem[this.displayMember] : "");
111
+ }
112
+ else if (splitProps.editor.isReadOnly) {
113
+ control = React.createElement("input", __assign({ type: "text", value: selectedItem ? selectedItem[this.displayMember] : "", ref: splitProps.editor.inputElement }, domProps));
114
+ }
115
+ else {
116
+ if (domProps.readOnly) {
117
+ domProps.disabled = true;
118
+ }
119
+ var valueIsBlank = value === undefined || value === null;
120
+ var nullText = (valueIsBlank || ((_d = splitProps.select) === null || _d === void 0 ? void 0 : _d.deSelectText) === undefined) ? (_e = splitProps.select) === null || _e === void 0 ? void 0 : _e.nullText : (_f = splitProps.select) === null || _f === void 0 ? void 0 : _f.deSelectText;
121
+ if (valueIsBlank) {
122
+ domProps.className = Utils.joinWithSpaces(domProps.className, "select-no-value");
123
+ }
124
+ control =
125
+ React.createElement("select", __assign({ value: valueIsBlank ? "" : value, onChange: this.onItemSelected, ref: splitProps.editor.inputElement }, domProps),
126
+ addBlankItem && React.createElement("option", { className: "option-default" }, nullText),
127
+ items.map(function (item) { return (React.createElement("option", { value: item[_this.valueMember], key: item[_this.valueMember] }, item[_this.displayMember])); }));
128
+ }
129
+ return (InputHelpers.surroundWithInputGroup(control, splitProps.editor));
130
+ };
131
+ DropDown.contextType = FormContext;
132
+ DropDown = __decorate([
133
+ observer,
134
+ __metadata("design:paramtypes", [Object])
135
+ ], DropDown);
136
+ return DropDown;
137
+ }(DropDownBase));
138
+ export default DropDown;
@@ -1,15 +1,16 @@
1
- import { Data, Model } from '@singularsystems/neo-core';
2
- import ComponentBase from '../ComponentBase';
3
- export declare type ItemSource<T> = T[] | Promise<T[]> | Data.IAsyncDataSource<T[]> | Data.IArrayCacheEntry<T>;
4
- export declare abstract class DropDownBase<T, TProps> extends ComponentBase<TProps> {
5
- protected valueMember: string;
6
- protected displayMember: string;
7
- protected findMembers(item: any): void;
8
- protected isLoading: boolean;
9
- protected dataSource: Data.IAsyncDataSource<T[]> | null;
10
- protected cachedDataSource: Data.IDataCacheEntry | null;
11
- protected getItems(itemSource: ItemSource<T>): T[];
12
- afterRender(): Promise<void>;
13
- private fieldDisplayInfo;
14
- protected setFieldInfo(bindProperty: Model.IPropertyInstance, displayValue: string): void;
15
- }
1
+ import { Data, Model } from '@singularsystems/neo-core';
2
+ import ComponentBase from '../ComponentBase';
3
+ export type ItemSource<T> = T[] | Promise<T[]> | Data.IAsyncDataSource<T[]> | Data.IArrayCacheEntry<T>;
4
+ export declare abstract class DropDownBase<T, TProps> extends ComponentBase<TProps> {
5
+ protected valueMember: string;
6
+ protected displayMember: string;
7
+ protected findMembers(item: any): void;
8
+ protected isLoading: boolean;
9
+ protected dataSource: Data.IAsyncDataSource<T[]> | null;
10
+ protected cachedDataSource: Data.IDataCacheEntry | null;
11
+ protected fieldInfoContainer: Model.IModelFieldInfoContainer | null;
12
+ protected getItems(itemSource: ItemSource<T>): T[];
13
+ afterRender(): Promise<void>;
14
+ private fieldDisplayInfo;
15
+ protected setFieldInfo(bindProperty: Model.IPropertyInstance, displayValue: string, readableName?: string): void;
16
+ }
@@ -1,108 +1,86 @@
1
- import { __awaiter, __extends, __generator } from "tslib";
2
- import { Data, EnumHelper, Model } from '@singularsystems/neo-core';
3
- import ComponentBase from '../ComponentBase';
4
- var DropDownBase = /** @class */ (function (_super) {
5
- __extends(DropDownBase, _super);
6
- function DropDownBase() {
7
- var _this = _super !== null && _super.apply(this, arguments) || this;
8
- _this.isLoading = false;
9
- _this.dataSource = null;
10
- _this.cachedDataSource = null;
11
- _this.fieldDisplayInfo = null;
12
- return _this;
13
- }
14
- DropDownBase.prototype.findMembers = function (item) {
15
- if (!this.valueMember || !this.displayMember) {
16
- if (EnumHelper.isEnumItem(item)) {
17
- this.valueMember = "id";
18
- this.displayMember = "name";
19
- }
20
- if (!this.displayMember) {
21
- var neoTypeInfo = item.constructor.neo;
22
- if (neoTypeInfo && neoTypeInfo.displayMember) {
23
- this.displayMember = neoTypeInfo.displayMember.propertyName;
24
- }
25
- }
26
- for (var propName in item) {
27
- if (this.valueMember && this.displayMember)
28
- break;
29
- var value = item[propName];
30
- if (value !== undefined && value !== null) {
31
- if (typeof (value) === "number" && !this.valueMember) {
32
- this.valueMember = propName;
33
- }
34
- if (typeof (value) === "string" && !this.displayMember && !propName.toLowerCase().endsWith("id") && propName !== "entityIdentifier") {
35
- this.displayMember = propName;
36
- }
37
- }
38
- }
39
- }
40
- };
41
- DropDownBase.prototype.getItems = function (itemSource) {
42
- var _a;
43
- var items = [];
44
- if (itemSource instanceof Array) {
45
- items = itemSource;
46
- }
47
- else {
48
- if (itemSource instanceof Promise) {
49
- if (((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.promise) !== itemSource) {
50
- this.dataSource = new Data.CallbackDataSource(function () { return itemSource; }, []);
51
- }
52
- }
53
- else if (itemSource.get !== undefined) {
54
- this.cachedDataSource = itemSource;
55
- if (this.cachedDataSource.willLoad) {
56
- this.isLoading = true;
57
- }
58
- else {
59
- this.dataSource = this.cachedDataSource.get();
60
- }
61
- }
62
- else if (itemSource.fetchInitial !== undefined) {
63
- this.dataSource = itemSource;
64
- }
65
- else {
66
- throw Error("Unknown drop down data source.");
67
- }
68
- if (this.dataSource) {
69
- this.isLoading = this.dataSource.willLoad;
70
- items = this.dataSource.data;
71
- }
72
- }
73
- return items;
74
- };
75
- DropDownBase.prototype.afterRender = function () {
76
- return __awaiter(this, void 0, void 0, function () {
77
- var _a, bindProperty, displayValue, fieldInfo;
78
- return __generator(this, function (_b) {
79
- if (this.cachedDataSource) {
80
- this.dataSource = this.cachedDataSource.get();
81
- }
82
- else if (this.dataSource) {
83
- this.dataSource.fetchInitial();
84
- }
85
- if (this.fieldDisplayInfo) {
86
- _a = this.fieldDisplayInfo, bindProperty = _a.bindProperty, displayValue = _a.displayValue;
87
- this.fieldDisplayInfo = null;
88
- if (bindProperty.attachedTo instanceof Model.CriteriaBase) {
89
- fieldInfo = bindProperty.attachedTo.fieldInfo[bindProperty.propertyInfo.propertyName];
90
- if (!fieldInfo) {
91
- fieldInfo = new Model.ModelFieldInfo(bindProperty.propertyInfo.readableName, displayValue);
92
- bindProperty.attachedTo.fieldInfo[bindProperty.propertyInfo.propertyName] = fieldInfo;
93
- }
94
- else {
95
- fieldInfo.valueString = displayValue;
96
- }
97
- }
98
- }
99
- return [2 /*return*/];
100
- });
101
- });
102
- };
103
- DropDownBase.prototype.setFieldInfo = function (bindProperty, displayValue) {
104
- this.fieldDisplayInfo = { bindProperty: bindProperty, displayValue: displayValue };
105
- };
106
- return DropDownBase;
107
- }(ComponentBase));
108
- export { DropDownBase };
1
+ import { __awaiter, __extends, __generator } from "tslib";
2
+ import { Data } from '@singularsystems/neo-core';
3
+ import ComponentBase from '../ComponentBase';
4
+ import LookupHelper from './LookupHelper';
5
+ var DropDownBase = /** @class */ (function (_super) {
6
+ __extends(DropDownBase, _super);
7
+ function DropDownBase() {
8
+ var _this = _super !== null && _super.apply(this, arguments) || this;
9
+ _this.isLoading = false;
10
+ _this.dataSource = null;
11
+ _this.cachedDataSource = null;
12
+ _this.fieldInfoContainer = null;
13
+ _this.fieldDisplayInfo = null;
14
+ return _this;
15
+ }
16
+ DropDownBase.prototype.findMembers = function (item) {
17
+ var members = LookupHelper.findMembers(item, this.valueMember, this.displayMember);
18
+ this.valueMember = members.valueMember;
19
+ this.displayMember = members.displayMember;
20
+ };
21
+ DropDownBase.prototype.getItems = function (itemSource) {
22
+ var _a;
23
+ var items = [];
24
+ if (itemSource instanceof Array) {
25
+ items = itemSource;
26
+ }
27
+ else {
28
+ if (itemSource instanceof Promise) {
29
+ if (((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.promise) !== itemSource) {
30
+ this.dataSource = new Data.CallbackDataSource(function () { return itemSource; }, []);
31
+ }
32
+ }
33
+ else if (itemSource.get !== undefined) {
34
+ this.cachedDataSource = itemSource;
35
+ if (this.cachedDataSource.willLoad) {
36
+ this.isLoading = true;
37
+ }
38
+ else {
39
+ this.dataSource = this.cachedDataSource.get();
40
+ }
41
+ }
42
+ else if (itemSource.fetchInitial !== undefined) {
43
+ this.dataSource = itemSource;
44
+ }
45
+ else {
46
+ throw Error("Unknown drop down data source.");
47
+ }
48
+ if (this.dataSource) {
49
+ this.isLoading = this.dataSource.willLoad;
50
+ items = this.dataSource.data;
51
+ }
52
+ }
53
+ return items;
54
+ };
55
+ DropDownBase.prototype.afterRender = function () {
56
+ return __awaiter(this, void 0, void 0, function () {
57
+ var _a, bindProperty, displayValue, readableName, fieldInfo;
58
+ return __generator(this, function (_b) {
59
+ if (this.cachedDataSource) {
60
+ this.dataSource = this.cachedDataSource.get();
61
+ }
62
+ else if (this.dataSource) {
63
+ this.dataSource.fetchInitial();
64
+ }
65
+ if (this.fieldDisplayInfo) {
66
+ _a = this.fieldDisplayInfo, bindProperty = _a.bindProperty, displayValue = _a.displayValue, readableName = _a.readableName;
67
+ this.fieldDisplayInfo = null;
68
+ if (this.fieldInfoContainer) {
69
+ fieldInfo = this.fieldInfoContainer.setModelFieldInfo(bindProperty.propertyInfo, displayValue);
70
+ if (readableName) {
71
+ fieldInfo.displayName = readableName;
72
+ }
73
+ }
74
+ }
75
+ return [2 /*return*/];
76
+ });
77
+ });
78
+ };
79
+ DropDownBase.prototype.setFieldInfo = function (bindProperty, displayValue, readableName) {
80
+ if (this.fieldInfoContainer) {
81
+ this.fieldDisplayInfo = { bindProperty: bindProperty, displayValue: displayValue, readableName: readableName };
82
+ }
83
+ };
84
+ return DropDownBase;
85
+ }(ComponentBase));
86
+ export { DropDownBase };
@@ -0,0 +1,13 @@
1
+ export interface ILookupMembers {
2
+ valueMember: string;
3
+ displayMember: string;
4
+ }
5
+ export default class LookupHelper {
6
+ /**
7
+ * Finds the value and display member of a class by convention.
8
+ * Also uses the displayMember attribute if defined on any of the properties.
9
+ * @param item An object instance
10
+ * @param booleanValuesAllowed True if boolean values are allowed in the value member.
11
+ */
12
+ static findMembers(item: any, valueMember: string, displayMember: string, booleanValuesAllowed?: boolean): ILookupMembers;
13
+ }
@@ -0,0 +1,45 @@
1
+ import { EnumHelper } from "@singularsystems/neo-core";
2
+ var LookupHelper = /** @class */ (function () {
3
+ function LookupHelper() {
4
+ }
5
+ /**
6
+ * Finds the value and display member of a class by convention.
7
+ * Also uses the displayMember attribute if defined on any of the properties.
8
+ * @param item An object instance
9
+ * @param booleanValuesAllowed True if boolean values are allowed in the value member.
10
+ */
11
+ LookupHelper.findMembers = function (item, valueMember, displayMember, booleanValuesAllowed) {
12
+ if (booleanValuesAllowed === void 0) { booleanValuesAllowed = false; }
13
+ if (!displayMember || !valueMember) {
14
+ if (EnumHelper.isEnumItem(item)) {
15
+ valueMember = "id";
16
+ displayMember = "name";
17
+ }
18
+ if (!displayMember) {
19
+ var neoTypeInfo = item.constructor.neo;
20
+ if (neoTypeInfo && neoTypeInfo.displayMember) {
21
+ displayMember = neoTypeInfo.displayMember.propertyName;
22
+ }
23
+ }
24
+ for (var propName in item) {
25
+ if (valueMember && displayMember)
26
+ break;
27
+ var value = item[propName];
28
+ if (value !== undefined && value !== null) {
29
+ if ((typeof (value) === "number" || (booleanValuesAllowed && typeof (value) === "boolean")) && !valueMember) {
30
+ valueMember = propName;
31
+ }
32
+ if (typeof (value) === "string" && !displayMember && !propName.toLowerCase().endsWith("id") && propName !== "entityIdentifier") {
33
+ displayMember = propName;
34
+ }
35
+ }
36
+ }
37
+ if (!valueMember || !displayMember) {
38
+ console.error("Could not find value and display member. Try specifying them explicitly.", item);
39
+ }
40
+ }
41
+ return { valueMember: valueMember, displayMember: displayMember };
42
+ };
43
+ return LookupHelper;
44
+ }());
45
+ export default LookupHelper;
@@ -1,8 +1,9 @@
1
- import { Components } from '@singularsystems/neo-core';
2
- export declare class ErrorHandler extends Components.ErrorHandler {
3
- private errorList;
4
- private hidingErrorList;
5
- protected displayError(displayType: Components.ErrorDisplayType, error: any, errorDisplay: Components.IErrorDisplay): void;
6
- protected displayModal(error: any, errorDisplay: Components.IErrorDisplay): void;
7
- private getIcon;
8
- }
1
+ import { Components } from '@singularsystems/neo-core';
2
+ export declare class ErrorHandler extends Components.ErrorHandler {
3
+ private errorList;
4
+ private hidingErrorList;
5
+ constructor(notifications: Components.INotificationHelper);
6
+ protected displayError(displayType: Components.ErrorDisplayType, error: any, errorDisplay: Components.IErrorDisplay): void;
7
+ protected displayModal(error: any, errorDisplay: Components.IErrorDisplay): void;
8
+ private getIcon;
9
+ }