@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,236 +1,253 @@
1
- import { __assign, __rest } from "tslib";
2
- import { Misc, AppServices } from '@singularsystems/neo-core';
3
- import DropDown from './DropDown/DropDown';
4
- import NumberInput from './NumberInput';
5
- import DatePicker from './DatePicker';
6
- import Input from './Input';
7
- import RadioList from './RadioList';
8
- import * as React from 'react';
9
- import { DataType } from '@singularsystems/neo-core/dist/Model/Misc';
10
- import FileInput from './FileManager/FileInput';
11
- export var ControlType;
12
- (function (ControlType) {
13
- ControlType[ControlType["Date"] = 0] = "Date";
14
- ControlType[ControlType["Number"] = 1] = "Number";
15
- ControlType[ControlType["DropDown"] = 2] = "DropDown";
16
- ControlType[ControlType["Text"] = 3] = "Text";
17
- ControlType[ControlType["File"] = 4] = "File";
18
- ControlType[ControlType["RadioList"] = 5] = "RadioList";
19
- })(ControlType || (ControlType = {}));
20
- export var CheckboxType;
21
- (function (CheckboxType) {
22
- CheckboxType[CheckboxType["None"] = 0] = "None";
23
- CheckboxType[CheckboxType["Checkbox"] = 1] = "Checkbox";
24
- CheckboxType[CheckboxType["Switch"] = 2] = "Switch";
25
- })(CheckboxType || (CheckboxType = {}));
26
- var BindPropsHelper = /** @class */ (function () {
27
- function BindPropsHelper() {
28
- }
29
- Object.defineProperty(BindPropsHelper, "config", {
30
- get: function () {
31
- if (!this._config) {
32
- this._config = Misc.Globals.appService.get(AppServices.NeoTypes.Config.ConfigModel);
33
- }
34
- return this._config;
35
- },
36
- enumerable: false,
37
- configurable: true
38
- });
39
- /**
40
- * Gets the correct input control type based on the props. E.g. Input / DatePicker / Select
41
- * @param props Props passed to a multi type input container. E.g. FormGroup / Column
42
- */
43
- BindPropsHelper.getFormControl = function (props) {
44
- switch (BindPropsHelper.getControlType(props)) {
45
- case ControlType.Date:
46
- return React.createElement(DatePicker, props);
47
- case ControlType.Number:
48
- return React.createElement(NumberInput, props);
49
- case ControlType.DropDown:
50
- return React.createElement(DropDown, props);
51
- case ControlType.File:
52
- return React.createElement(FileInput, props);
53
- case ControlType.Text:
54
- return React.createElement(Input, props);
55
- case ControlType.RadioList:
56
- return React.createElement(RadioList, props);
57
- }
58
- };
59
- BindPropsHelper.getControlType = function (props) {
60
- var propertyInfo = props.bind.propertyInfo;
61
- if (props.dateProps || propertyInfo.propertyType === DataType.Date) {
62
- return ControlType.Date;
63
- }
64
- else if (props.select) {
65
- return ControlType.DropDown;
66
- }
67
- else if (props.numProps || propertyInfo.propertyType === Misc.DataType.Float || propertyInfo.propertyType === Misc.DataType.Int || propertyInfo.propertyType === Misc.DataType.Decimal) {
68
- return ControlType.Number;
69
- }
70
- else if (props.fileProps) {
71
- return ControlType.File;
72
- }
73
- else if (props.radioList) {
74
- return ControlType.RadioList;
75
- }
76
- else {
77
- return ControlType.Text;
78
- }
79
- };
80
- BindPropsHelper.getCheckBoxType = function (props, instance) {
81
- if (props.input && props.input.type) {
82
- if (props.input.type === "checkbox")
83
- return CheckboxType.Checkbox;
84
- if (props.input.type === "switch")
85
- return CheckboxType.Switch;
86
- }
87
- if (props.bind && !props.radioList) {
88
- if (props.bind.propertyInfo.propertyType === Misc.DataType.NullableBoolean)
89
- return CheckboxType.Checkbox;
90
- if (props.bind.attachedTo && typeof props.bind.peek === "boolean")
91
- return CheckboxType.Checkbox;
92
- if (instance && typeof instance[props.bind.propertyInfo.propertyName] === "boolean")
93
- return CheckboxType.Checkbox;
94
- }
95
- return CheckboxType.None;
96
- };
97
- /**
98
- * Get the main bind property from a props object
99
- */
100
- BindPropsHelper.getBindProperty = function (allProps) {
101
- return (allProps.bind || allProps.display || allProps.bindContext);
102
- };
103
- BindPropsHelper.splitCommonEditorProps = function (props) {
104
- var isReadOnly = props.isReadOnly, readOnly = props.readOnly, isDisabled = props.isDisabled, disabled = props.disabled, prependText = props.prependText, prepend = props.prepend, appendText = props.appendText, append = props.append, inputElement = props.inputElement, rest = __rest(props, ["isReadOnly", "readOnly", "isDisabled", "disabled", "prependText", "prepend", "appendText", "append", "inputElement"]);
105
- return {
106
- editor: {
107
- isReadOnly: (isReadOnly !== null && isReadOnly !== void 0 ? isReadOnly : readOnly), isDisabled: (isDisabled !== null && isDisabled !== void 0 ? isDisabled : disabled),
108
- prependText: prependText,
109
- prepend: prepend,
110
- appendText: appendText,
111
- append: append,
112
- inputElement: inputElement,
113
- requiresGroup: prependText !== undefined || prepend !== undefined || appendText !== undefined || append !== undefined
114
- },
115
- rest: rest
116
- };
117
- };
118
- BindPropsHelper.normaliseContainerProps = function (component, props, inGroup, isBootstrap) {
119
- // Split flattened props into components.
120
- if (isBootstrap === void 0) { isBootstrap = true; }
121
- var splitProps = this.splitCommonEditorProps(props);
122
- var _a = splitProps.rest,
123
- // Bindable editor props
124
- bind = _a.bind, display = _a.display, placeholder = _a.placeholder,
125
- // Editor selector props
126
- select = _a.select, input = _a.input, dateProps = _a.dateProps, numProps = _a.numProps, fileProps = _a.fileProps, radioList = _a.radioList,
127
- // Common container props
128
- label = _a.label, editorProps = _a.editorProps, editorTooltip = _a.editorTooltip, editorClassName = _a.editorClassName, editorStyle = _a.editorStyle, suppressDefaultContent = _a.suppressDefaultContent, bindContext = _a.bindContext,
129
- // Container dom
130
- containerDom = __rest(_a, ["bind", "display", "placeholder", "select", "input", "dateProps", "numProps", "fileProps", "radioList", "label", "editorProps", "editorTooltip", "editorClassName", "editorStyle", "suppressDefaultContent", "bindContext"]);
131
- var bindOrDisplay = BindPropsHelper.getBindProperty(props);
132
- if (bindOrDisplay && bindOrDisplay.propertyInfo.isReadOnly)
133
- splitProps.editor.isReadOnly = true;
134
- if (!props.bind && props.display)
135
- splitProps.editor.isReadOnly = true;
136
- if (!editorProps)
137
- editorProps = {};
138
- if (editorTooltip) {
139
- editorProps["data-tip"] = editorTooltip;
140
- }
141
- if (editorClassName) {
142
- editorProps.className = editorClassName;
143
- }
144
- if (editorStyle) {
145
- editorProps.style = editorStyle;
146
- }
147
- if (bindContext && suppressDefaultContent === undefined) {
148
- suppressDefaultContent = true;
149
- }
150
- return {
151
- bind: bindOrDisplay,
152
- editor: __assign({ bind: bindOrDisplay, placeholder: this.getPlaceholderText(placeholder, bindOrDisplay === null || bindOrDisplay === void 0 ? void 0 : bindOrDisplay.propertyInfo) }, splitProps.editor),
153
- editorDom: editorProps,
154
- container: { label: label, editorTooltip: editorTooltip, editorClassName: editorClassName, editorStyle: editorStyle, bindContext: bindContext, suppressDefaultContent: suppressDefaultContent },
155
- select: select,
156
- input: input,
157
- numProps: numProps,
158
- dateProps: dateProps,
159
- fileProps: fileProps,
160
- radioList: radioList,
161
- inGroup: inGroup,
162
- uniqueID: (bindOrDisplay === null || bindOrDisplay === void 0 ? void 0 : bindOrDisplay.uniqueID) + "!" + component.uniqueId,
163
- containerDom: containerDom,
164
- isBootstrap: isBootstrap
165
- };
166
- };
167
- BindPropsHelper.normaliseEditorProps = function (component, props) {
168
- var nProps = props;
169
- if (!nProps.editor) {
170
- // Stand alone editor, normalise the props.
171
- nProps = BindPropsHelper.normaliseContainerProps(component, props, false);
172
- nProps.editorDom = nProps.containerDom;
173
- }
174
- return nProps;
175
- };
176
- BindPropsHelper.getPlaceholderText = function (placeholder, property) {
177
- if (placeholder === true) {
178
- return property.readableName;
179
- }
180
- else if (placeholder !== false) {
181
- return placeholder;
182
- }
183
- return undefined;
184
- };
185
- BindPropsHelper.autoSetDomProperties = function (props, formContext, componentBlurFn, componentFocusFn) {
186
- var _a;
187
- var domProps = __assign({}, props.editorDom);
188
- if (props.uniqueID) {
189
- domProps.id = (_a = formContext.uniqueId) !== null && _a !== void 0 ? _a : props.uniqueID;
190
- }
191
- if (this.config.isTestOrDevelopment) {
192
- domProps[BindPropsHelper.DataFieldName] = props.bind.propertyInfo.propertyName;
193
- }
194
- if (props.editor.isReadOnly || (formContext.allReadOnly && props.editor.isReadOnly === undefined)) {
195
- domProps.readOnly = true;
196
- if (!domProps.tabIndex)
197
- domProps.tabIndex = -1;
198
- }
199
- if (props.editor.isDisabled || (formContext.allDisabled && props.editor.isDisabled === undefined)) {
200
- domProps.disabled = true;
201
- }
202
- if (props.editor.placeholder) {
203
- domProps.placeholder = props.editor.placeholder;
204
- }
205
- if (componentFocusFn) {
206
- var parentFocusFn_1 = domProps.onFocus;
207
- domProps.onFocus = function (e) {
208
- if (parentFocusFn_1)
209
- parentFocusFn_1(e);
210
- componentFocusFn(e);
211
- };
212
- }
213
- domProps.onBlur = BindPropsHelper.blurIntercept(props.editor, domProps.onBlur, componentBlurFn);
214
- return domProps;
215
- };
216
- /**
217
- * Intercept the user specified blur event, and run the validation onBlur logic first.
218
- * @param props Props specified on component.
219
- * @param blurFn Blur function used internally by component.
220
- */
221
- BindPropsHelper.blurIntercept = function (props, domPropsBlur, blurFn) {
222
- return function (e) {
223
- if (props.bind)
224
- props.bind.validator.hasBlurred = true;
225
- if (blurFn)
226
- blurFn(e);
227
- if (props.onBlur)
228
- props.onBlur(e);
229
- if (domPropsBlur)
230
- domPropsBlur(e);
231
- };
232
- };
233
- BindPropsHelper.DataFieldName = "data-field-name";
234
- return BindPropsHelper;
235
- }());
236
- export { BindPropsHelper };
1
+ import { __assign, __rest } from "tslib";
2
+ import { Misc, AppServices } from '@singularsystems/neo-core';
3
+ import DropDown from './DropDown/DropDown';
4
+ import NumberInput from './NumberInput';
5
+ import DatePicker from './DatePicker';
6
+ import Input from './Input';
7
+ import RadioList from './RadioList';
8
+ import * as React from 'react';
9
+ import { DataType } from '@singularsystems/neo-core/dist/Model/Misc';
10
+ import FileInput from './FileManager/FileInput';
11
+ import Tooltip from './Tooltip';
12
+ export var ControlType;
13
+ (function (ControlType) {
14
+ ControlType[ControlType["Date"] = 0] = "Date";
15
+ ControlType[ControlType["Number"] = 1] = "Number";
16
+ ControlType[ControlType["DropDown"] = 2] = "DropDown";
17
+ ControlType[ControlType["Text"] = 3] = "Text";
18
+ ControlType[ControlType["File"] = 4] = "File";
19
+ ControlType[ControlType["RadioList"] = 5] = "RadioList";
20
+ })(ControlType || (ControlType = {}));
21
+ export var CheckboxType;
22
+ (function (CheckboxType) {
23
+ CheckboxType[CheckboxType["None"] = 0] = "None";
24
+ CheckboxType[CheckboxType["Checkbox"] = 1] = "Checkbox";
25
+ CheckboxType[CheckboxType["Switch"] = 2] = "Switch";
26
+ })(CheckboxType || (CheckboxType = {}));
27
+ export var BindPropsHelper = /** @class */ (function () {
28
+ function BindPropsHelper() {
29
+ }
30
+ Object.defineProperty(BindPropsHelper, "config", {
31
+ get: function () {
32
+ if (!this._config) {
33
+ this._config = Misc.Globals.appService.get(AppServices.NeoTypes.Config.ConfigModel);
34
+ }
35
+ return this._config;
36
+ },
37
+ enumerable: false,
38
+ configurable: true
39
+ });
40
+ /**
41
+ * Gets the correct input control type based on the props. E.g. Input / DatePicker / Select
42
+ * @param props Props passed to a multi type input container. E.g. FormGroup / Column
43
+ */
44
+ BindPropsHelper.getFormControl = function (props) {
45
+ switch (BindPropsHelper.getControlType(props)) {
46
+ case ControlType.Date:
47
+ return React.createElement(DatePicker, props);
48
+ case ControlType.Number:
49
+ return React.createElement(NumberInput, props);
50
+ case ControlType.DropDown:
51
+ return React.createElement(DropDown, props);
52
+ case ControlType.File:
53
+ return React.createElement(FileInput, props);
54
+ case ControlType.Text:
55
+ return React.createElement(Input, props);
56
+ case ControlType.RadioList:
57
+ return React.createElement(RadioList, props);
58
+ }
59
+ };
60
+ BindPropsHelper.getControlType = function (props) {
61
+ var propertyInfo = props.bind.propertyInfo;
62
+ if (props.dateProps || propertyInfo.propertyType === DataType.Date) {
63
+ return ControlType.Date;
64
+ }
65
+ else if (props.select) {
66
+ return ControlType.DropDown;
67
+ }
68
+ else if (props.numProps || propertyInfo.propertyType === Misc.DataType.Float || propertyInfo.propertyType === Misc.DataType.Int || propertyInfo.propertyType === Misc.DataType.Decimal) {
69
+ return ControlType.Number;
70
+ }
71
+ else if (props.fileProps) {
72
+ return ControlType.File;
73
+ }
74
+ else if (props.radioList) {
75
+ return ControlType.RadioList;
76
+ }
77
+ else {
78
+ return ControlType.Text;
79
+ }
80
+ };
81
+ BindPropsHelper.getCheckBoxType = function (props, instance) {
82
+ if (props.input && props.input.type) {
83
+ if (props.input.type === "checkbox")
84
+ return CheckboxType.Checkbox;
85
+ if (props.input.type === "switch")
86
+ return CheckboxType.Switch;
87
+ }
88
+ if (props.bind && !props.radioList) {
89
+ if (props.bind.propertyInfo.propertyType === Misc.DataType.NullableBoolean)
90
+ return CheckboxType.Checkbox;
91
+ if (props.bind.attachedTo && typeof props.bind.peek === "boolean")
92
+ return CheckboxType.Checkbox;
93
+ if (instance && typeof instance[props.bind.propertyInfo.propertyName] === "boolean")
94
+ return CheckboxType.Checkbox;
95
+ }
96
+ return CheckboxType.None;
97
+ };
98
+ /**
99
+ * Get the main bind property from a props object
100
+ */
101
+ BindPropsHelper.getBindProperty = function (allProps) {
102
+ return (allProps.bind || allProps.display || allProps.bindContext);
103
+ };
104
+ BindPropsHelper.splitCommonEditorProps = function (props) {
105
+ var isReadOnly = props.isReadOnly, readOnly = props.readOnly, isDisabled = props.isDisabled, disabled = props.disabled, prependText = props.prependText, prepend = props.prepend, appendText = props.appendText, append = props.append, inputElement = props.inputElement, rest = __rest(props, ["isReadOnly", "readOnly", "isDisabled", "disabled", "prependText", "prepend", "appendText", "append", "inputElement"]);
106
+ return {
107
+ editor: {
108
+ isReadOnly: (isReadOnly !== null && isReadOnly !== void 0 ? isReadOnly : readOnly), isDisabled: (isDisabled !== null && isDisabled !== void 0 ? isDisabled : disabled),
109
+ prependText: prependText,
110
+ prepend: prepend,
111
+ appendText: appendText,
112
+ append: append,
113
+ inputElement: inputElement,
114
+ requiresGroup: prependText !== undefined || prepend !== undefined || appendText !== undefined || append !== undefined
115
+ },
116
+ rest: rest
117
+ };
118
+ };
119
+ BindPropsHelper.normaliseContainerProps = function (component, props, inGroup, isBootstrap) {
120
+ // Split flattened props into components.
121
+ var _a, _b, _c;
122
+ if (isBootstrap === void 0) { isBootstrap = true; }
123
+ var splitProps = this.splitCommonEditorProps(props);
124
+ var _d = splitProps.rest,
125
+ // Bindable editor props
126
+ bind = _d.bind, display = _d.display, placeholder = _d.placeholder,
127
+ // Editor selector props
128
+ select = _d.select, input = _d.input, dateProps = _d.dateProps, numProps = _d.numProps, fileProps = _d.fileProps, radioList = _d.radioList,
129
+ // Common container props
130
+ label = _d.label, editorProps = _d.editorProps, editorTooltip = _d.editorTooltip, editorClassName = _d.editorClassName, editorStyle = _d.editorStyle, suppressDefaultContent = _d.suppressDefaultContent, bindContext = _d.bindContext,
131
+ // Container dom
132
+ containerDom = __rest(_d, ["bind", "display", "placeholder", "select", "input", "dateProps", "numProps", "fileProps", "radioList", "label", "editorProps", "editorTooltip", "editorClassName", "editorStyle", "suppressDefaultContent", "bindContext"]);
133
+ var bindOrDisplay = BindPropsHelper.getBindProperty(props);
134
+ if (!bindOrDisplay) {
135
+ var child = containerDom.children;
136
+ var childBind = void 0;
137
+ if (child) {
138
+ if ((_a = child.type) === null || _a === void 0 ? void 0 : _a.getBindProp) {
139
+ childBind = (_b = child.type) === null || _b === void 0 ? void 0 : _b.getBindProp(child.props);
140
+ }
141
+ else {
142
+ childBind = (_c = child.props) === null || _c === void 0 ? void 0 : _c.bind;
143
+ }
144
+ if (childBind) {
145
+ bindOrDisplay = childBind;
146
+ bindContext = bindOrDisplay;
147
+ }
148
+ }
149
+ }
150
+ if (bindOrDisplay && bindOrDisplay.propertyInfo.isReadOnly)
151
+ splitProps.editor.isReadOnly = true;
152
+ if (!props.bind && props.display)
153
+ splitProps.editor.isReadOnly = true;
154
+ if (!editorProps)
155
+ editorProps = {};
156
+ if (editorTooltip) {
157
+ Tooltip.setDomProperties(editorProps, editorTooltip);
158
+ }
159
+ if (editorClassName) {
160
+ editorProps.className = editorClassName;
161
+ }
162
+ if (editorStyle) {
163
+ editorProps.style = editorStyle;
164
+ }
165
+ if (bindContext && suppressDefaultContent === undefined) {
166
+ suppressDefaultContent = true;
167
+ }
168
+ return {
169
+ bind: bindOrDisplay,
170
+ editor: __assign({ bind: bindOrDisplay, placeholder: this.getPlaceholderText(placeholder, bindOrDisplay === null || bindOrDisplay === void 0 ? void 0 : bindOrDisplay.propertyInfo) }, splitProps.editor),
171
+ editorDom: editorProps,
172
+ container: { label: label, editorTooltip: editorTooltip, editorClassName: editorClassName, editorStyle: editorStyle, bindContext: bindContext, suppressDefaultContent: suppressDefaultContent },
173
+ select: select,
174
+ input: input,
175
+ numProps: numProps,
176
+ dateProps: dateProps,
177
+ fileProps: fileProps,
178
+ radioList: radioList,
179
+ inGroup: inGroup,
180
+ uniqueID: (bindOrDisplay === null || bindOrDisplay === void 0 ? void 0 : bindOrDisplay.uniqueID) + "!" + component.uniqueId,
181
+ containerDom: containerDom,
182
+ isBootstrap: isBootstrap
183
+ };
184
+ };
185
+ BindPropsHelper.normaliseEditorProps = function (component, props) {
186
+ var nProps = props;
187
+ if (!nProps.editor) {
188
+ // Stand alone editor, normalise the props.
189
+ nProps = BindPropsHelper.normaliseContainerProps(component, props, false);
190
+ nProps.editorDom = nProps.containerDom;
191
+ }
192
+ return nProps;
193
+ };
194
+ BindPropsHelper.getPlaceholderText = function (placeholder, property) {
195
+ if (placeholder === true) {
196
+ return property.readableName;
197
+ }
198
+ else if (placeholder !== false) {
199
+ return placeholder;
200
+ }
201
+ return undefined;
202
+ };
203
+ BindPropsHelper.autoSetDomProperties = function (props, formContext, componentBlurFn, componentFocusFn) {
204
+ var _a;
205
+ var domProps = __assign({}, props.editorDom);
206
+ if (props.uniqueID) {
207
+ domProps.id = (_a = formContext.uniqueId) !== null && _a !== void 0 ? _a : props.uniqueID;
208
+ }
209
+ if (this.config.isTestOrDevelopment) {
210
+ domProps[BindPropsHelper.DataFieldName] = props.bind.propertyInfo.propertyName;
211
+ }
212
+ if (props.editor.isReadOnly || (formContext.allReadOnly && props.editor.isReadOnly === undefined)) {
213
+ domProps.readOnly = true;
214
+ if (!domProps.tabIndex)
215
+ domProps.tabIndex = -1;
216
+ }
217
+ if (props.editor.isDisabled || (formContext.allDisabled && props.editor.isDisabled === undefined)) {
218
+ domProps.disabled = true;
219
+ }
220
+ if (props.editor.placeholder) {
221
+ domProps.placeholder = props.editor.placeholder;
222
+ }
223
+ if (componentFocusFn) {
224
+ var parentFocusFn_1 = domProps.onFocus;
225
+ domProps.onFocus = function (e) {
226
+ if (parentFocusFn_1)
227
+ parentFocusFn_1(e);
228
+ componentFocusFn(e);
229
+ };
230
+ }
231
+ domProps.onBlur = BindPropsHelper.blurIntercept(props.editor, domProps.onBlur, componentBlurFn);
232
+ return domProps;
233
+ };
234
+ /**
235
+ * Intercept the user specified blur event, and run the validation onBlur logic first.
236
+ * @param props Props specified on component.
237
+ * @param blurFn Blur function used internally by component.
238
+ */
239
+ BindPropsHelper.blurIntercept = function (props, domPropsBlur, blurFn) {
240
+ return function (e) {
241
+ if (props.bind)
242
+ props.bind.validator.hasBlurred = true;
243
+ if (blurFn)
244
+ blurFn(e);
245
+ if (props.onBlur)
246
+ props.onBlur(e);
247
+ if (domPropsBlur)
248
+ domPropsBlur(e);
249
+ };
250
+ };
251
+ BindPropsHelper.DataFieldName = "data-field-name";
252
+ return BindPropsHelper;
253
+ }());
@@ -1,29 +1,29 @@
1
- import React from 'react';
2
- import { IBindableEditorProps } from './PropTypes';
3
- import ComponentBase from './ComponentBase';
4
- import { FormContext } from './FormContext';
5
- export interface IRadioListSpecificProps {
6
- /** List of items to show. */
7
- items?: any[];
8
- /** Enum to show as a radio button list. */
9
- enumType?: any;
10
- /** True if the radio buttons should be displayed inline (horizontally). */
11
- inline?: boolean;
12
- /** Property name to use for the id. Only applies when using items. */
13
- valueMember?: string | undefined;
14
- /** Property name to use for the radio button text. Only applies when using items. */
15
- displayMember?: string | undefined;
16
- }
17
- export interface IRadioListProps extends IBindableEditorProps<HTMLSelectElement> {
18
- radioList: IRadioListSpecificProps;
19
- }
20
- export default class RadioList extends ComponentBase<IRadioListProps> {
21
- static contextType: React.Context<import("./FormContext").FormContextParams>;
22
- context: React.ContextType<typeof FormContext>;
23
- private previousList?;
24
- private previousEnumType?;
25
- private items;
26
- private preRender;
27
- private createEnumList;
28
- render(): JSX.Element;
29
- }
1
+ import React from 'react';
2
+ import { IBindableEditorProps } from './PropTypes';
3
+ import ComponentBase from './ComponentBase';
4
+ import { FormContext } from './FormContext';
5
+ export interface IRadioListSpecificProps<T> {
6
+ /** List of items to show. */
7
+ items?: T[];
8
+ /** Enum to show as a radio button list. */
9
+ enumType?: any;
10
+ /** True if the radio buttons should be displayed inline (horizontally). */
11
+ inline?: boolean;
12
+ /** Property name to use for the id. Only applies when using items. */
13
+ valueMember?: keyof T;
14
+ /** Property name to use for the radio button text. Only applies when using items. */
15
+ displayMember?: keyof T;
16
+ }
17
+ export interface IRadioListProps<T> extends IBindableEditorProps<HTMLSelectElement> {
18
+ radioList: IRadioListSpecificProps<T>;
19
+ }
20
+ export default class RadioList<T> extends ComponentBase<IRadioListProps<T>> {
21
+ static contextType: React.Context<import("./FormContext").FormContextParams>;
22
+ context: React.ContextType<typeof FormContext>;
23
+ private previousList?;
24
+ private previousEnumType?;
25
+ private items;
26
+ private preRender;
27
+ private createEnumList;
28
+ render(): JSX.Element;
29
+ }