@singularsystems/neo-react 0.10.47 → 0.10.49
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.
- package/dist/React/AutoRunner.js +6 -3
- package/dist/ReactComponents/DropDown/AutoCompleteDropDown.js +3 -1
- package/dist/ReactComponents/DropDown/DropDownBase.js +5 -26
- package/dist/ReactComponents/DropDown/LookupHelper.d.ts +13 -0
- package/dist/ReactComponents/DropDown/LookupHelper.js +45 -0
- package/dist/ReactComponents/FileManager/FileContext.d.ts +2 -2
- package/dist/ReactComponents/FileManager/FileInput.d.ts +2 -1
- package/dist/ReactComponents/RadioList.js +5 -23
- package/dist/Routing/ViewParameter.d.ts +2 -2
- package/dist/Routing/ViewParameter.js +2 -3
- package/dist/Routing/ViewParameterList.js +3 -3
- package/dist/Views/ViewModelBase.js +11 -7
- package/package.json +2 -2
package/dist/React/AutoRunner.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import {
|
|
2
|
+
import { Misc, DebounceHelper } from '@singularsystems/neo-core';
|
|
3
3
|
import { reaction } from 'mobx';
|
|
4
4
|
import { injectable } from 'inversify';
|
|
5
5
|
var AutoRunnerFactory = /** @class */ (function () {
|
|
@@ -24,7 +24,10 @@ var AutoRunner = /** @class */ (function () {
|
|
|
24
24
|
this.disposerImmediate = reaction(function () { return _this.accessAllValues(model, false, new Map(), ""); }, function () { return _this.runCallback(model, callback, 0); });
|
|
25
25
|
}
|
|
26
26
|
AutoRunner.prototype.cancelPending = function () {
|
|
27
|
-
|
|
27
|
+
DebounceHelper.cancelPending(this);
|
|
28
|
+
};
|
|
29
|
+
AutoRunner.prototype.fireImmediate = function () {
|
|
30
|
+
DebounceHelper.executeImmediate(this);
|
|
28
31
|
};
|
|
29
32
|
AutoRunner.prototype.dispose = function () {
|
|
30
33
|
this.disposerDelayed();
|
|
@@ -33,7 +36,7 @@ var AutoRunner = /** @class */ (function () {
|
|
|
33
36
|
AutoRunner.prototype.runCallback = function (model, callback, delay) {
|
|
34
37
|
var _this = this;
|
|
35
38
|
if (!this.isPaused) {
|
|
36
|
-
|
|
39
|
+
DebounceHelper.debounce(this, function () {
|
|
37
40
|
_this.isPaused = true;
|
|
38
41
|
try {
|
|
39
42
|
callback(model);
|
|
@@ -50,8 +50,9 @@ var AutoCompleteDropDown = /** @class */ (function (_super) {
|
|
|
50
50
|
AutoCompleteDropDown.prototype.onItemSelected = function (args, action) {
|
|
51
51
|
var onItemSelected = this.props.onItemSelected;
|
|
52
52
|
if (this.props.bindItems) {
|
|
53
|
+
var itemsProperty = this.props.bindItems;
|
|
53
54
|
// Multi select
|
|
54
|
-
var itemList =
|
|
55
|
+
var itemList = itemsProperty.value;
|
|
55
56
|
var bindIdsList = this.props.bindIds;
|
|
56
57
|
if (action.action === "select-option") {
|
|
57
58
|
itemList.push({ id: action.option.value, display: action.option.label });
|
|
@@ -83,6 +84,7 @@ var AutoCompleteDropDown = /** @class */ (function (_super) {
|
|
|
83
84
|
onItemSelected(undefined);
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
itemsProperty.attachedTo.isSelfDirty = true;
|
|
86
88
|
}
|
|
87
89
|
else if (this.props.bind) {
|
|
88
90
|
// Single select
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __awaiter, __extends, __generator } from "tslib";
|
|
2
|
-
import { Data,
|
|
2
|
+
import { Data, Model } from '@singularsystems/neo-core';
|
|
3
3
|
import ComponentBase from '../ComponentBase';
|
|
4
|
+
import LookupHelper from './LookupHelper';
|
|
4
5
|
var DropDownBase = /** @class */ (function (_super) {
|
|
5
6
|
__extends(DropDownBase, _super);
|
|
6
7
|
function DropDownBase() {
|
|
@@ -12,31 +13,9 @@ var DropDownBase = /** @class */ (function (_super) {
|
|
|
12
13
|
return _this;
|
|
13
14
|
}
|
|
14
15
|
DropDownBase.prototype.findMembers = function (item) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
}
|
|
16
|
+
var members = LookupHelper.findMembers(item, this.valueMember, this.displayMember);
|
|
17
|
+
this.valueMember = members.valueMember;
|
|
18
|
+
this.displayMember = members.displayMember;
|
|
40
19
|
};
|
|
41
20
|
DropDownBase.prototype.getItems = function (itemSource) {
|
|
42
21
|
var _a;
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Components } from '@singularsystems/neo-core';
|
|
3
|
-
export interface IFileComponentProps
|
|
3
|
+
export interface IFileComponentProps {
|
|
4
4
|
/** File manager instance. Props that can be specified in file manager options will be ignored on this component. */
|
|
5
5
|
fileManager?: Components.IFileManager;
|
|
6
6
|
/** Upload endpoint. This is required when not using a file manager. */
|
|
@@ -10,6 +10,6 @@ export interface IFileContextProps {
|
|
|
10
10
|
fileManager?: Components.IFileManager;
|
|
11
11
|
}
|
|
12
12
|
export declare const FileContext: React.Context<IFileContextProps>;
|
|
13
|
-
export default class FileContextProvider extends React.Component<IFileComponentProps> {
|
|
13
|
+
export default class FileContextProvider extends React.Component<IFileComponentProps & (Partial<Components.IFileManagerOptions> | Partial<Components.IBoundFileManagerOptions>)> {
|
|
14
14
|
render(): JSX.Element;
|
|
15
15
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { Components } from '@singularsystems/neo-core';
|
|
2
3
|
import { FileContext, IFileComponentProps } from './FileContext';
|
|
3
4
|
import { IButtonOptions } from '@singularsystems/neo-core/dist/Components/ButtonOptions';
|
|
4
5
|
import ComponentBase from '../ComponentBase';
|
|
5
6
|
import { AxiosPromise } from 'axios';
|
|
6
|
-
export interface IFileEditorProps extends IFileComponentProps {
|
|
7
|
+
export interface IFileEditorProps extends IFileComponentProps, Partial<Components.IBoundFileManagerOptions> {
|
|
7
8
|
/** Browse button options */
|
|
8
9
|
browseButton?: IButtonOptions;
|
|
9
10
|
/** Set this if you want to allow the user to choose a new file. */
|
|
@@ -5,6 +5,7 @@ import { observer } from 'mobx-react';
|
|
|
5
5
|
import { BindPropsHelper } from './PropTypes';
|
|
6
6
|
import ComponentBase from './ComponentBase';
|
|
7
7
|
import { FormContext } from './FormContext';
|
|
8
|
+
import LookupHelper from './DropDown/LookupHelper';
|
|
8
9
|
var RadioList = /** @class */ (function (_super) {
|
|
9
10
|
__extends(RadioList, _super);
|
|
10
11
|
function RadioList() {
|
|
@@ -25,27 +26,7 @@ var RadioList = /** @class */ (function (_super) {
|
|
|
25
26
|
RadioList.prototype.createEnumList = function (list) {
|
|
26
27
|
var _a, _b;
|
|
27
28
|
if (list.length) {
|
|
28
|
-
var
|
|
29
|
-
var displayMember_1 = (_b = this.props.radioList.displayMember, (_b !== null && _b !== void 0 ? _b : ""));
|
|
30
|
-
if (!displayMember_1) {
|
|
31
|
-
var neoTypeInfo = list[0].constructor.neo;
|
|
32
|
-
if (neoTypeInfo && neoTypeInfo.displayMember) {
|
|
33
|
-
displayMember_1 = neoTypeInfo.displayMember.propertyName;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
for (var propName in list[0]) {
|
|
37
|
-
if (valueMember_1 && displayMember_1)
|
|
38
|
-
break;
|
|
39
|
-
var value = list[0][propName];
|
|
40
|
-
if (value !== undefined && value !== null) {
|
|
41
|
-
if (!valueMember_1 && (typeof (value) === "number" || typeof (value) === "boolean")) {
|
|
42
|
-
valueMember_1 = propName;
|
|
43
|
-
}
|
|
44
|
-
if (!displayMember_1 && typeof (value) === "string" && !propName.toLowerCase().endsWith("id") && propName !== "entityIdentifier") {
|
|
45
|
-
displayMember_1 = propName;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
29
|
+
var _c = LookupHelper.findMembers(list[0], (_a = this.props.radioList.valueMember, (_a !== null && _a !== void 0 ? _a : "")), (_b = this.props.radioList.displayMember, (_b !== null && _b !== void 0 ? _b : "")), true), valueMember_1 = _c.valueMember, displayMember_1 = _c.displayMember;
|
|
49
30
|
if (valueMember_1 && displayMember_1) {
|
|
50
31
|
this.items = list.map(function (item) { return ({ id: item[valueMember_1], name: item[displayMember_1] }); });
|
|
51
32
|
}
|
|
@@ -63,9 +44,10 @@ var RadioList = /** @class */ (function (_super) {
|
|
|
63
44
|
var bindValue = this.props.bind.value;
|
|
64
45
|
var className = Utils.joinWithSpaces("neo-radio-list", (_a = splitProps.editorDom) === null || _a === void 0 ? void 0 : _a.className);
|
|
65
46
|
return React.createElement("div", { className: className }, this.items.map(function (item) {
|
|
47
|
+
var _a, _b;
|
|
66
48
|
return React.createElement("div", { className: "custom-control custom-radio " + (_this.props.radioList.inline ? "custom-control-inline" : "custom-control"), key: item.id },
|
|
67
|
-
React.createElement("input", { type: "radio", id: splitProps.uniqueID + item.id, name: splitProps.uniqueID, checked: bindValue === item.id, disabled: domProps.disabled || domProps.readOnly, onChange: function () { return _this.props.bind.value = item.id; }, className: "custom-control-input" }),
|
|
68
|
-
React.createElement("label", { className: "custom-control-label", htmlFor: splitProps.uniqueID + item.id }, item.name));
|
|
49
|
+
React.createElement("input", { type: "radio", id: splitProps.uniqueID + (_a = item.id, (_a !== null && _a !== void 0 ? _a : "")), name: splitProps.uniqueID, checked: bindValue === item.id, disabled: domProps.disabled || domProps.readOnly, onChange: function () { return _this.props.bind.value = item.id; }, className: "custom-control-input" }),
|
|
50
|
+
React.createElement("label", { className: "custom-control-label", htmlFor: splitProps.uniqueID + (_b = item.id, (_b !== null && _b !== void 0 ? _b : "")) }, item.name));
|
|
69
51
|
}));
|
|
70
52
|
};
|
|
71
53
|
RadioList.contextType = FormContext;
|
|
@@ -49,8 +49,8 @@ export declare class ViewParameter implements IViewParameter {
|
|
|
49
49
|
description: string;
|
|
50
50
|
asNullableInt(): number | null;
|
|
51
51
|
asString(): string;
|
|
52
|
-
/**
|
|
53
|
-
|
|
52
|
+
/** Updates the current value, and returns true if the value changed. */
|
|
53
|
+
update(value: string | null): boolean;
|
|
54
54
|
getParamString(state: {
|
|
55
55
|
hasQuery: boolean;
|
|
56
56
|
}): string;
|
|
@@ -51,14 +51,13 @@ var ViewParameter = /** @class */ (function () {
|
|
|
51
51
|
ViewParameter.prototype.asString = function () {
|
|
52
52
|
return this._value || "";
|
|
53
53
|
};
|
|
54
|
-
/**
|
|
55
|
-
ViewParameter.prototype.
|
|
54
|
+
/** Updates the current value, and returns true if the value changed. */
|
|
55
|
+
ViewParameter.prototype.update = function (value) {
|
|
56
56
|
if (value)
|
|
57
57
|
value = decodeURIComponent(value);
|
|
58
58
|
if (value != this._value) {
|
|
59
59
|
this.hasPendingValue = false;
|
|
60
60
|
this.pendingValue = value;
|
|
61
|
-
this.description = "";
|
|
62
61
|
this._value = value;
|
|
63
62
|
return true;
|
|
64
63
|
}
|
|
@@ -93,7 +93,7 @@ var ViewParameterList = /** @class */ (function () {
|
|
|
93
93
|
var value = match.params[param];
|
|
94
94
|
if (value === undefined)
|
|
95
95
|
value = null;
|
|
96
|
-
if (viewParam.
|
|
96
|
+
if (viewParam.update(value))
|
|
97
97
|
hasChanged = true;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -102,7 +102,7 @@ var ViewParameterList = /** @class */ (function () {
|
|
|
102
102
|
for (var _i = 0, _a = this.params; _i < _a.length; _i++) {
|
|
103
103
|
var viewParam = _a[_i];
|
|
104
104
|
if (viewParam.routeParameter.isQuery) {
|
|
105
|
-
if (viewParam.
|
|
105
|
+
if (viewParam.update(queryParams.get(viewParam.name)))
|
|
106
106
|
hasChanged = true;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
@@ -125,7 +125,7 @@ var ViewParameterList = /** @class */ (function () {
|
|
|
125
125
|
if (typeof value === "number") {
|
|
126
126
|
value = value.toString();
|
|
127
127
|
}
|
|
128
|
-
viewParam.
|
|
128
|
+
viewParam.update(value);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
var state = { hasQuery: false };
|
|
@@ -73,14 +73,18 @@ var ViewModelBase = /** @class */ (function (_super) {
|
|
|
73
73
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
74
74
|
fns[_i] = arguments[_i];
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
throw "Cannot bind a function without a name.";
|
|
76
|
+
var prototype = this.constructor.prototype;
|
|
77
|
+
var _loop_1 = function (key) {
|
|
78
|
+
if (key !== "constructor" && prototype[key] instanceof Function && !this_1.hasOwnProperty(key)) {
|
|
79
|
+
if (fns.find(function (f) { return f === prototype[key]; })) {
|
|
80
|
+
this_1[key] = prototype[key].bind(this_1);
|
|
81
|
+
}
|
|
83
82
|
}
|
|
83
|
+
};
|
|
84
|
+
var this_1 = this;
|
|
85
|
+
for (var _a = 0, _b = Object.getOwnPropertyNames(prototype); _a < _b.length; _a++) {
|
|
86
|
+
var key = _b[_a];
|
|
87
|
+
_loop_1(key);
|
|
84
88
|
}
|
|
85
89
|
};
|
|
86
90
|
ViewModelBase.prototype.dispose = function () {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@singularsystems/neo-react",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.49",
|
|
4
4
|
"description": "React application logic and components for the Neo client library",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@types/rc-slider": "^8.6.5",
|
|
34
34
|
"@types/react-color": "^3.0.1",
|
|
35
35
|
"@types/react-select": "3.1.0",
|
|
36
|
-
"@singularsystems/neo-core": "^0.10.
|
|
36
|
+
"@singularsystems/neo-core": "^0.10.53",
|
|
37
37
|
"axios": "^0.21.1",
|
|
38
38
|
"decimal.js-light": "2.5.1",
|
|
39
39
|
"history": "4.10.1",
|