@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,188 +1,222 @@
1
- import { __assign, __decorate, __extends, __metadata, __rest } from "tslib";
2
- import React from 'react';
3
- import { EnumHelper, Misc, Utils } from '@singularsystems/neo-core';
4
- import { observer } from 'mobx-react';
5
- import { DropDownBase } from './DropDownBase';
6
- import { BindPropsHelper } from '../PropTypes';
7
- import { InputHelpers } from '../InputHelpers';
8
- import { EditorParentType, FormContext } from '../FormContext';
9
- import { Tooltip } from '../_Exports';
10
- import { NeoReactTypes } from '../../Modules/Types';
11
- var AutoCompleteDropDown = /** @class */ (function (_super) {
12
- __extends(AutoCompleteDropDown, _super);
13
- function AutoCompleteDropDown(props) {
14
- var _this = _super.call(this, props) || this;
15
- _this.asyncSelectImplementation = Misc.Globals.appService.get(NeoReactTypes.Components.AsyncSelect);
16
- _this.selectImplementation = Misc.Globals.appService.get(NeoReactTypes.Components.ReactSelect);
17
- _this.onKeyPress = _this.onKeyPress.bind(_this);
18
- _this.onItemSelected = _this.onItemSelected.bind(_this);
19
- return _this;
20
- }
21
- AutoCompleteDropDown.prototype.onKeyPress = function (searchValue, dataReceived) {
22
- var _this = this;
23
- var _a, _b;
24
- if (searchValue && searchValue.length >= ((_a = this.props.minCharacters) !== null && _a !== void 0 ? _a : 1)) {
25
- Utils.debounce(this, function () {
26
- _this.props.itemSource(searchValue).then(function (list) {
27
- var items;
28
- if (list.data) {
29
- items = list.data;
30
- }
31
- else {
32
- items = list;
33
- }
34
- dataReceived(_this.mapTArrayToOptions(items));
35
- });
36
- }, (_b = this.props.delayMs) !== null && _b !== void 0 ? _b : 500);
37
- }
38
- else {
39
- dataReceived([]);
40
- Utils.clearDebounce(this);
41
- }
42
- };
43
- AutoCompleteDropDown.prototype.mapTArrayToOptions = function (items) {
44
- var _this = this;
45
- if (items.length) {
46
- this.findMembers(items[0]);
47
- }
48
- return items.map(function (item) { return (__assign(__assign({}, item), { value: item[_this.valueMember], label: item[_this.displayMember] })); });
49
- };
50
- AutoCompleteDropDown.prototype.onItemSelected = function (args, action) {
51
- var onItemSelected = this.props.onItemSelected;
52
- if (this.props.bindItems) {
53
- // Multi select
54
- var itemList = this.props.bindItems.value;
55
- var bindIdsList = this.props.bindIds;
56
- if (action.action === "select-option") {
57
- itemList.push({ id: action.option.value, display: action.option.label });
58
- if (bindIdsList) {
59
- bindIdsList.push(action.option.value);
60
- }
61
- if (onItemSelected) {
62
- onItemSelected(action.option);
63
- }
64
- }
65
- else if (action.action === "remove-value") {
66
- var removeItem = itemList.find(function (c) { return c.id === action.removedValue.value; });
67
- if (removeItem) {
68
- itemList.remove(removeItem);
69
- if (bindIdsList) {
70
- bindIdsList.remove(removeItem.id);
71
- }
72
- }
73
- if (onItemSelected) {
74
- onItemSelected(undefined, removeItem);
75
- }
76
- }
77
- else if (action.action === "clear") {
78
- itemList.length = 0;
79
- if (bindIdsList) {
80
- bindIdsList.length = 0;
81
- }
82
- if (onItemSelected) {
83
- onItemSelected(undefined);
84
- }
85
- }
86
- }
87
- else if (this.props.bind) {
88
- // Single select
89
- this.props.bind.value = args ? args.value : null;
90
- if (this.props.bindDisplay) {
91
- this.props.bindDisplay.value = args ? args.label : "";
92
- }
93
- if (onItemSelected) {
94
- onItemSelected(args);
95
- }
96
- }
97
- };
98
- AutoCompleteDropDown.prototype.render = function () {
99
- var _this = this;
100
- var _a, _b, _c, _d, _e, _f, _g, _h;
101
- var _j = this.props, bind = _j.bind, bindDisplay = _j.bindDisplay, bindItems = _j.bindItems, bindIds = _j.bindIds, itemSource = _j.itemSource, items = _j.items, displayMember = _j.displayMember, valueMember = _j.valueMember, descriptionMember = _j.descriptionMember, option = _j.option, noRecordsPrompt = _j.noRecordsPrompt, typeToSearchPrompt = _j.typeToSearchPrompt, delayMs = _j.delayMs, minCharacters = _j.minCharacters, onItemSelected = _j.onItemSelected, otherProps = __rest(_j, ["bind", "bindDisplay", "bindItems", "bindIds", "itemSource", "items", "displayMember", "valueMember", "descriptionMember", "option", "noRecordsPrompt", "typeToSearchPrompt", "delayMs", "minCharacters", "onItemSelected"]);
102
- var splitProps = BindPropsHelper.splitCommonEditorProps(otherProps);
103
- var nativeProps = splitProps.rest;
104
- var bindItemsProperty = bindItems;
105
- var itemList = bindItemsProperty === null || bindItemsProperty === void 0 ? void 0 : bindItemsProperty.value;
106
- var bindValue = bind;
107
- var bindDisplayProperty = bindDisplay;
108
- var bindProperty = bindItemsProperty !== null && bindItemsProperty !== void 0 ? bindItemsProperty : bindValue;
109
- var displayInfo = bindProperty.validator.getDisplayState(this.context.validationDisplayMode);
110
- displayInfo.applyToDom(nativeProps, this.context.parentType !== EditorParentType.FormGroup);
111
- this.displayMember = (_a = this.props.displayMember) !== null && _a !== void 0 ? _a : "";
112
- this.valueMember = (_b = this.props.valueMember) !== null && _b !== void 0 ? _b : "";
113
- var defaultItems = undefined;
114
- if (this.props.items) {
115
- var items_1 = this.getItems(this.props.items);
116
- defaultItems = this.mapTArrayToOptions(items_1);
117
- if (descriptionMember === undefined && items_1.length > 0) {
118
- if (EnumHelper.isEnumItem(items_1[0])) {
119
- descriptionMember = "description";
120
- }
121
- }
122
- }
123
- var value = null;
124
- if (bindItems) {
125
- value = itemList.map(function (c) { return ({ value: c.id, label: c.display }); });
126
- }
127
- else {
128
- if (bindValue.value !== null) {
129
- var displayValue = bindDisplayProperty === null || bindDisplayProperty === void 0 ? void 0 : bindDisplayProperty.value;
130
- if (!bindDisplayProperty) {
131
- if (defaultItems) {
132
- displayValue = (_d = (_c = defaultItems.find(function (c) { return c.value === bindValue.value; })) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : "";
133
- }
134
- else {
135
- throw "bindDisplay is required when the items prop is not set.";
136
- }
137
- }
138
- value = { value: bindValue.value, label: displayValue };
139
- }
140
- this.setFieldInfo(bindValue, (_e = value === null || value === void 0 ? void 0 : value.label) !== null && _e !== void 0 ? _e : "");
141
- }
142
- var components = (_f = nativeProps.components) !== null && _f !== void 0 ? _f : {};
143
- if (this.props.option) {
144
- components.Option = this.getOption(this.props.option);
145
- }
146
- else if (components.Option) {
147
- components.Option = this.getOption(components.Option);
148
- }
149
- else if (descriptionMember) {
150
- components.Option = this.getOption(function (item) { return React.createElement(React.Fragment, null,
151
- React.createElement("div", { className: "react-select-name" }, item[_this.displayMember]),
152
- React.createElement("div", { className: "react-select-description" }, item[descriptionMember])); }, "with-description");
153
- }
154
- if (nativeProps.isClearable === undefined) {
155
- nativeProps.isClearable = true;
156
- }
157
- if (splitProps.editor.isDisabled || splitProps.editor.isReadOnly) {
158
- nativeProps.isDisabled = true;
159
- }
160
- nativeProps.className = Utils.joinWithSpaces("react-select-bs", nativeProps.className);
161
- if (this.context.uniqueId) {
162
- nativeProps.inputId = this.context.uniqueId;
163
- }
164
- var userOnBlur = nativeProps.onBlur;
165
- nativeProps.onBlur = function (e) {
166
- bindProperty.validator.hasBlurred = true;
167
- if (userOnBlur !== undefined) {
168
- userOnBlur(e);
169
- }
170
- };
171
- if (this.props.itemSource !== undefined) {
172
- return Tooltip.fromDataAttributes(InputHelpers.surroundWithInputGroup(React.createElement(this.asyncSelectImplementation, __assign({}, nativeProps, { placeholder: (_g = this.props.placeholder) !== null && _g !== void 0 ? _g : "", classNamePrefix: "react-select-bs", defaultOptions: defaultItems, loadOptions: this.onKeyPress, isMulti: bindItems !== undefined, noOptionsMessage: function (c) { var _a, _b; return c.inputValue && c.inputValue.length >= (minCharacters !== null && minCharacters !== void 0 ? minCharacters : 1) ? ((_a = _this.props.noRecordsPrompt) !== null && _a !== void 0 ? _a : "No records found") : ((_b = _this.props.typeToSearchPrompt) !== null && _b !== void 0 ? _b : "Type to search..."); }, value: value, onChange: this.onItemSelected, components: components })), splitProps.editor), nativeProps);
173
- }
174
- else {
175
- return Tooltip.fromDataAttributes(InputHelpers.surroundWithInputGroup(React.createElement(this.selectImplementation, __assign({}, nativeProps, { placeholder: (_h = this.props.placeholder) !== null && _h !== void 0 ? _h : "", classNamePrefix: "react-select-bs", options: defaultItems, isLoading: this.isLoading, isMulti: bindItems !== undefined, noOptionsMessage: function (c) { var _a; return (_a = _this.props.noRecordsPrompt) !== null && _a !== void 0 ? _a : "No records found"; }, value: value, onChange: this.onItemSelected, components: components })), splitProps.editor), nativeProps);
176
- }
177
- };
178
- AutoCompleteDropDown.prototype.getOption = function (content, additionalClass) {
179
- return function (item) { return (React.createElement("div", __assign({ ref: item.innerRef }, item.innerProps, { className: Utils.joinWithSpaces("react-select-row", additionalClass, item.isFocused ? "focused" : undefined, item.isSelected ? "selected" : undefined) }), content(item.data))); };
180
- };
181
- AutoCompleteDropDown.contextType = FormContext;
182
- AutoCompleteDropDown = __decorate([
183
- observer,
184
- __metadata("design:paramtypes", [Object])
185
- ], AutoCompleteDropDown);
186
- return AutoCompleteDropDown;
187
- }(DropDownBase));
188
- export default AutoCompleteDropDown;
1
+ import { __assign, __decorate, __extends, __metadata, __rest } from "tslib";
2
+ import React from 'react';
3
+ import { EnumHelper, Misc, Model, Utils } from '@singularsystems/neo-core';
4
+ import { observer } from 'mobx-react';
5
+ import { DropDownBase } from './DropDownBase';
6
+ import { BindPropsHelper } from '../PropTypes';
7
+ import { InputHelpers } from '../InputHelpers';
8
+ import { EditorParentType, FormContext } from '../FormContext';
9
+ import { Tooltip } from '../_Exports';
10
+ import { NeoReactTypes } from '../../Modules/Types';
11
+ var AutoCompleteDropDown = /** @class */ (function (_super) {
12
+ __extends(AutoCompleteDropDown, _super);
13
+ function AutoCompleteDropDown(props) {
14
+ var _this = this;
15
+ var _a;
16
+ _this = _super.call(this, props) || this;
17
+ _this.asyncSelectImplementation = Misc.Globals.appService.get(NeoReactTypes.Components.AsyncSelect);
18
+ _this.selectImplementation = Misc.Globals.appService.get(NeoReactTypes.Components.ReactSelect);
19
+ _this.onKeyPress = _this.onKeyPress.bind(_this);
20
+ _this.onItemSelected = _this.onItemSelected.bind(_this);
21
+ var singleProps = _this.props, multiProps = _this.props;
22
+ _this.bindProperty = (_a = singleProps.bind) !== null && _a !== void 0 ? _a : multiProps.bindItems;
23
+ _this.fieldInfoContainer = Model.ModelFieldInfo.asModelFieldInfoContainer(_this.bindProperty.attachedTo);
24
+ if (multiProps.bindIds) {
25
+ if (multiProps.bindIds.propertyInfo) {
26
+ var bindIdsProperty = multiProps.bindIds;
27
+ _this.bindIdsProperty = bindIdsProperty;
28
+ _this.bindIdsList = bindIdsProperty.value;
29
+ }
30
+ else {
31
+ _this.bindIdsList = multiProps.bindIds;
32
+ if (_this.fieldInfoContainer) {
33
+ console.error("Warning: Pass a property instance as 'bindIds', otherwise the display values will not be captured.");
34
+ _this.fieldInfoContainer = null;
35
+ }
36
+ }
37
+ }
38
+ return _this;
39
+ }
40
+ AutoCompleteDropDown.getBindProp = function (props) {
41
+ var _a;
42
+ return (_a = props.bind) !== null && _a !== void 0 ? _a : props.bindItems;
43
+ };
44
+ AutoCompleteDropDown.prototype.onKeyPress = function (searchValue, dataReceived) {
45
+ var _this = this;
46
+ var _a, _b;
47
+ if (searchValue && searchValue.length >= ((_a = this.props.minCharacters) !== null && _a !== void 0 ? _a : 1)) {
48
+ Utils.debounce(this, function () {
49
+ _this.props.itemSource(searchValue).then(function (list) {
50
+ var items;
51
+ if (list.data) {
52
+ items = list.data;
53
+ }
54
+ else {
55
+ items = list;
56
+ }
57
+ dataReceived(_this.mapTArrayToOptions(items));
58
+ });
59
+ }, (_b = this.props.delayMs) !== null && _b !== void 0 ? _b : 500);
60
+ }
61
+ else {
62
+ dataReceived([]);
63
+ Utils.clearDebounce(this);
64
+ }
65
+ };
66
+ AutoCompleteDropDown.prototype.mapTArrayToOptions = function (items) {
67
+ var _this = this;
68
+ if (items.length) {
69
+ this.findMembers(items[0]);
70
+ }
71
+ return items.map(function (item) { return (__assign(__assign({}, item), { item: item, value: item[_this.valueMember], label: item[_this.displayMember] })); });
72
+ };
73
+ AutoCompleteDropDown.prototype.onItemSelected = function (args, action) {
74
+ var _a;
75
+ var onItemSelected = this.props.onItemSelected, singleProps = this.props, multiProps = this.props;
76
+ if (multiProps.bindItems) {
77
+ var itemsProperty = multiProps.bindItems;
78
+ // Multi select
79
+ var itemList = itemsProperty.value;
80
+ if (action.action === "select-option") {
81
+ itemList.push({ id: action.option.value, display: action.option.label });
82
+ if (this.bindIdsList) {
83
+ this.bindIdsList.push(action.option.value);
84
+ }
85
+ if (onItemSelected) {
86
+ onItemSelected((_a = action.option) === null || _a === void 0 ? void 0 : _a.item);
87
+ }
88
+ }
89
+ else if (action.action === "remove-value") {
90
+ var removeItem = itemList.find(function (c) { return c.id === action.removedValue.value; });
91
+ if (removeItem) {
92
+ itemList.remove(removeItem);
93
+ if (this.bindIdsList) {
94
+ this.bindIdsList.remove(removeItem.id);
95
+ }
96
+ }
97
+ if (onItemSelected) {
98
+ onItemSelected(undefined, removeItem);
99
+ }
100
+ }
101
+ else if (action.action === "clear") {
102
+ itemList.length = 0;
103
+ if (this.bindIdsList) {
104
+ this.bindIdsList.length = 0;
105
+ }
106
+ if (onItemSelected) {
107
+ onItemSelected(undefined);
108
+ }
109
+ }
110
+ itemsProperty.attachedTo.isSelfDirty = true;
111
+ }
112
+ else if (singleProps.bind) {
113
+ // Single select
114
+ singleProps.bind.value = args ? args.value : null;
115
+ if (singleProps.bindDisplay) {
116
+ singleProps.bindDisplay.value = args ? args.label : "";
117
+ }
118
+ if (onItemSelected) {
119
+ onItemSelected(args === null || args === void 0 ? void 0 : args.item);
120
+ }
121
+ }
122
+ };
123
+ AutoCompleteDropDown.prototype.render = function () {
124
+ var _this = this;
125
+ var _a, _b, _c, _d, _e, _f, _g, _h;
126
+ var _j = this.props, bind = _j.bind, bindDisplay = _j.bindDisplay, bindItems = _j.bindItems, bindIds = _j.bindIds, itemSource = _j.itemSource, items = _j.items, displayMember = _j.displayMember, valueMember = _j.valueMember, descriptionMember = _j.descriptionMember, option = _j.option, noRecordsPrompt = _j.noRecordsPrompt, typeToSearchPrompt = _j.typeToSearchPrompt, delayMs = _j.delayMs, minCharacters = _j.minCharacters, onItemSelected = _j.onItemSelected, fieldInfoLimit = _j.fieldInfoLimit, otherProps = __rest(_j, ["bind", "bindDisplay", "bindItems", "bindIds", "itemSource", "items", "displayMember", "valueMember", "descriptionMember", "option", "noRecordsPrompt", "typeToSearchPrompt", "delayMs", "minCharacters", "onItemSelected", "fieldInfoLimit"]);
127
+ var splitProps = BindPropsHelper.splitCommonEditorProps(otherProps);
128
+ var nativeProps = splitProps.rest;
129
+ var bindItemsProperty = bindItems;
130
+ var itemList = bindItemsProperty === null || bindItemsProperty === void 0 ? void 0 : bindItemsProperty.value;
131
+ var bindValue = bind;
132
+ var bindDisplayProperty = bindDisplay;
133
+ var displayInfo = this.bindProperty.validator.getDisplayState(this.context.validationDisplayMode);
134
+ displayInfo.applyToDom(nativeProps, this.context.parentType !== EditorParentType.FormGroup);
135
+ this.displayMember = (_a = this.props.displayMember) !== null && _a !== void 0 ? _a : "";
136
+ this.valueMember = (_b = this.props.valueMember) !== null && _b !== void 0 ? _b : "";
137
+ var defaultItems = undefined;
138
+ if (this.props.items) {
139
+ var items_1 = this.getItems(this.props.items);
140
+ defaultItems = this.mapTArrayToOptions(items_1);
141
+ if (descriptionMember === undefined && items_1.length > 0) {
142
+ if (EnumHelper.isEnumItem(items_1[0])) {
143
+ descriptionMember = "description";
144
+ }
145
+ }
146
+ }
147
+ var value = null;
148
+ if (bindItems) {
149
+ value = itemList.map(function (c) { return ({ value: c.id, label: c.display }); });
150
+ if (this.fieldInfoContainer && this.bindIdsProperty) {
151
+ var itemListString = "";
152
+ if (value.length > (fieldInfoLimit !== null && fieldInfoLimit !== void 0 ? fieldInfoLimit : 5)) {
153
+ itemListString = "".concat(value.length, " items selected");
154
+ }
155
+ else if (value.length > 0) {
156
+ itemListString = value.map(function (c) { return c.label; }).join(", ");
157
+ }
158
+ this.setFieldInfo(this.bindIdsProperty, itemListString, bindItemsProperty.propertyInfo.readableName);
159
+ }
160
+ }
161
+ else {
162
+ if (bindValue.value !== null) {
163
+ var displayValue = bindDisplayProperty === null || bindDisplayProperty === void 0 ? void 0 : bindDisplayProperty.value;
164
+ if (!bindDisplayProperty) {
165
+ if (defaultItems) {
166
+ displayValue = (_d = (_c = defaultItems.find(function (c) { return c.value === bindValue.value; })) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : "";
167
+ }
168
+ else {
169
+ throw "bindDisplay is required when the items prop is not set.";
170
+ }
171
+ }
172
+ value = { value: bindValue.value, label: displayValue };
173
+ }
174
+ this.setFieldInfo(bindValue, (_e = value === null || value === void 0 ? void 0 : value.label) !== null && _e !== void 0 ? _e : "");
175
+ }
176
+ var components = (_f = nativeProps.components) !== null && _f !== void 0 ? _f : {};
177
+ if (this.props.option) {
178
+ components.Option = this.getOption(this.props.option);
179
+ }
180
+ else if (components.Option) {
181
+ components.Option = this.getOption(components.Option);
182
+ }
183
+ else if (descriptionMember) {
184
+ components.Option = this.getOption(function (item) { return React.createElement(React.Fragment, null,
185
+ React.createElement("div", { className: "react-select-name" }, item[_this.displayMember]),
186
+ React.createElement("div", { className: "react-select-description" }, item[descriptionMember])); }, "with-description");
187
+ }
188
+ if (nativeProps.isClearable === undefined) {
189
+ nativeProps.isClearable = true;
190
+ }
191
+ if (splitProps.editor.isDisabled || splitProps.editor.isReadOnly) {
192
+ nativeProps.isDisabled = true;
193
+ }
194
+ nativeProps.className = Utils.joinWithSpaces("react-select-bs", nativeProps.className);
195
+ if (this.context.uniqueId) {
196
+ nativeProps.inputId = this.context.uniqueId;
197
+ }
198
+ var userOnBlur = nativeProps.onBlur;
199
+ nativeProps.onBlur = function (e) {
200
+ _this.bindProperty.validator.hasBlurred = true;
201
+ if (userOnBlur !== undefined) {
202
+ userOnBlur(e);
203
+ }
204
+ };
205
+ if (this.props.itemSource !== undefined) {
206
+ return Tooltip.fromDataAttributes(InputHelpers.surroundWithInputGroup(React.createElement(this.asyncSelectImplementation, __assign({}, nativeProps, { placeholder: (_g = this.props.placeholder) !== null && _g !== void 0 ? _g : "", classNamePrefix: "react-select-bs", defaultOptions: defaultItems, loadOptions: this.onKeyPress, isMulti: bindItems !== undefined, noOptionsMessage: function (c) { var _a, _b; return c.inputValue && c.inputValue.length >= (minCharacters !== null && minCharacters !== void 0 ? minCharacters : 1) ? ((_a = _this.props.noRecordsPrompt) !== null && _a !== void 0 ? _a : "No records found") : ((_b = _this.props.typeToSearchPrompt) !== null && _b !== void 0 ? _b : "Type to search..."); }, value: value, onChange: this.onItemSelected, components: components })), splitProps.editor), nativeProps);
207
+ }
208
+ else {
209
+ return Tooltip.fromDataAttributes(InputHelpers.surroundWithInputGroup(React.createElement(this.selectImplementation, __assign({}, nativeProps, { placeholder: (_h = this.props.placeholder) !== null && _h !== void 0 ? _h : "", classNamePrefix: "react-select-bs", options: defaultItems, isLoading: this.isLoading, isMulti: bindItems !== undefined, noOptionsMessage: function (c) { var _a; return (_a = _this.props.noRecordsPrompt) !== null && _a !== void 0 ? _a : "No records found"; }, value: value, onChange: this.onItemSelected, components: components })), splitProps.editor), nativeProps);
210
+ }
211
+ };
212
+ AutoCompleteDropDown.prototype.getOption = function (content, additionalClass) {
213
+ return function (item) { return (React.createElement("div", __assign({ ref: item.innerRef }, item.innerProps, { className: Utils.joinWithSpaces("react-select-row", additionalClass, item.isFocused ? "focused" : undefined, item.isSelected ? "selected" : undefined) }), content(item.data))); };
214
+ };
215
+ AutoCompleteDropDown.contextType = FormContext;
216
+ AutoCompleteDropDown = __decorate([
217
+ observer,
218
+ __metadata("design:paramtypes", [Object])
219
+ ], AutoCompleteDropDown);
220
+ return AutoCompleteDropDown;
221
+ }(DropDownBase));
222
+ export default AutoCompleteDropDown;
@@ -1,44 +1,44 @@
1
- import * as React from 'react';
2
- import { IBindableEditorProps } from '../PropTypes';
3
- import { Data } from '@singularsystems/neo-core';
4
- import { DropDownBase } from './DropDownBase';
5
- import { FormContext } from '../FormContext';
6
- export interface IDropDownSpecificProps<T> {
7
- items?: T[] | Promise<T[]>;
8
- itemSource?: Data.IAsyncDataSource<T[]> | Data.IArrayCacheEntry<T>;
9
- valueMember?: keyof T;
10
- displayMember?: keyof T;
11
- /**
12
- * Set to true if your bind property is nullable, and you need to show a blank item in the list.
13
- * If your property value is null, a blank item will automatically be shown.
14
- */
15
- allowNulls?: boolean;
16
- /** Function used to filter items out of the datasource. */
17
- filterPredicate?: (item: T) => boolean;
18
- /** Callback which fires when an item is selected. */
19
- onItemSelected?: (item?: T) => void;
20
- /**
21
- * True if the display member of the selected item should display as plain text.
22
- * Use this if you need a readonly display, and don't want a form control rendered.
23
- */
24
- renderAsText?: boolean;
25
- /** Text to display when the bound value is null, and there is no item with null as it's value member. */
26
- nullText?: string;
27
- /** Text to display as the first item in the drop down list when the user is allowed to select a blank item. */
28
- deSelectText?: string;
29
- }
30
- export interface IDropDownProps<T> extends IBindableEditorProps<HTMLSelectElement> {
31
- select: IDropDownSpecificProps<T>;
32
- }
33
- export default class DropDown<T> extends DropDownBase<T, IDropDownProps<T>> {
34
- static contextType: React.Context<import("../FormContext").FormContextParams>;
35
- context: React.ContextType<typeof FormContext>;
36
- private selectedItem;
37
- private listIndexSymbol;
38
- constructor(props: IDropDownProps<T>);
39
- private get items();
40
- private createLookupIndex;
41
- private getSelectedOption;
42
- private onItemSelected;
43
- render(): JSX.Element;
44
- }
1
+ import * as React from 'react';
2
+ import { IBindableEditorProps } from '../PropTypes';
3
+ import { Data } from '@singularsystems/neo-core';
4
+ import { DropDownBase } from './DropDownBase';
5
+ import { FormContext } from '../FormContext';
6
+ export interface IDropDownSpecificProps<T> {
7
+ items?: T[] | Promise<T[]>;
8
+ itemSource?: Data.IAsyncDataSource<T[]> | Data.IArrayCacheEntry<T>;
9
+ valueMember?: keyof T;
10
+ displayMember?: keyof T;
11
+ /**
12
+ * Set to true if your bind property is nullable, and you need to show a blank item in the list.
13
+ * If your property value is null, a blank item will automatically be shown.
14
+ */
15
+ allowNulls?: boolean;
16
+ /** Function used to filter items out of the datasource. */
17
+ filterPredicate?: (item: T) => boolean;
18
+ /** Callback which fires when an item is selected. */
19
+ onItemSelected?: (item?: T) => void;
20
+ /**
21
+ * True if the display member of the selected item should display as plain text.
22
+ * Use this if you need a readonly display, and don't want a form control rendered.
23
+ */
24
+ renderAsText?: boolean;
25
+ /** Text to display when the bound value is null, and there is no item with null as it's value member. */
26
+ nullText?: string;
27
+ /** Text to display as the first item in the drop down list when the user is allowed to select a blank item. */
28
+ deSelectText?: string;
29
+ }
30
+ export interface IDropDownProps<T> extends IBindableEditorProps<HTMLSelectElement> {
31
+ select: IDropDownSpecificProps<T>;
32
+ }
33
+ export default class DropDown<T> extends DropDownBase<T, IDropDownProps<T>> {
34
+ static contextType: React.Context<import("../FormContext").FormContextParams>;
35
+ context: React.ContextType<typeof FormContext>;
36
+ private selectedItem;
37
+ private listIndexSymbol;
38
+ constructor(props: IDropDownProps<T>);
39
+ private get items();
40
+ private createLookupIndex;
41
+ private getSelectedOption;
42
+ private onItemSelected;
43
+ render(): JSX.Element;
44
+ }