@zajno/common 1.2.8 → 1.3.0-beta
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/coverage/clover.xml +312 -61
- package/coverage/coverage-final.json +17 -9
- package/coverage/lcov-report/index.html +33 -18
- package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
- package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
- package/coverage/lcov-report/src/async/arrays.ts.html +5 -5
- package/coverage/lcov-report/src/async/index.html +1 -1
- package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
- package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
- package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
- package/coverage/lcov-report/src/dates/format.ts.html +1 -1
- package/coverage/lcov-report/src/dates/index.html +1 -1
- package/coverage/lcov-report/src/dates/index.ts.html +1 -1
- package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
- package/coverage/lcov-report/src/dates/period.ts.html +1 -1
- package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
- package/coverage/lcov-report/src/dates/types.ts.html +1 -1
- package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
- package/coverage/lcov-report/src/enumHelper.ts.html +11 -11
- package/coverage/lcov-report/src/event.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +39 -9
- package/coverage/lcov-report/src/lazy.light.ts.html +155 -0
- package/coverage/lcov-report/src/logger/console.ts.html +1 -1
- package/coverage/lcov-report/src/logger/index.html +1 -1
- package/coverage/lcov-report/src/logger/index.ts.html +1 -1
- package/coverage/lcov-report/src/logger/named.ts.html +1 -1
- package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
- package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/math/calc.ts.html +1 -1
- package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
- package/coverage/lcov-report/src/math/index.html +1 -1
- package/coverage/lcov-report/src/math/index.ts.html +1 -1
- package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/types.ts.html +143 -0
- package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +22 -22
- package/coverage/lcov-report/src/validation/creditCard.ts.html +4 -4
- package/coverage/lcov-report/src/validation/helpers.ts.html +6 -6
- package/coverage/lcov-report/src/validation/index.html +1 -1
- package/coverage/lcov-report/src/validation/index.ts.html +6 -6
- package/coverage/lcov-report/src/validation/types.ts.html +2 -2
- package/coverage/lcov-report/src/validation/validators.ts.html +5 -5
- package/coverage/lcov-report/src/validation/wrappers.ts.html +5 -5
- package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +209 -0
- package/coverage/lcov-report/src/viewModels/LabeledFlagModel.ts.html +146 -0
- package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +530 -0
- package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +188 -0
- package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +455 -0
- package/coverage/lcov-report/src/viewModels/SelectViewModel.ts.html +434 -0
- package/coverage/lcov-report/src/viewModels/Validatable.ts.html +329 -0
- package/coverage/lcov-report/src/viewModels/index.html +186 -0
- package/coverage/lcov-report/src/viewModels/wrappers.ts.html +239 -0
- package/coverage/lcov.info +619 -66
- package/lib/types.d.ts +5 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +14 -0
- package/lib/types.js.map +1 -1
- package/lib/viewModels/FlagModel.d.ts +19 -0
- package/lib/viewModels/FlagModel.d.ts.map +1 -0
- package/lib/viewModels/FlagModel.js +38 -0
- package/lib/viewModels/FlagModel.js.map +1 -0
- package/lib/viewModels/MultiSelectModel.d.ts +41 -0
- package/lib/viewModels/MultiSelectModel.d.ts.map +1 -0
- package/lib/viewModels/MultiSelectModel.js +150 -0
- package/lib/viewModels/MultiSelectModel.js.map +1 -0
- package/lib/viewModels/NumberModel.d.ts +16 -0
- package/lib/viewModels/NumberModel.d.ts.map +1 -0
- package/lib/viewModels/NumberModel.js +40 -0
- package/lib/viewModels/NumberModel.js.map +1 -0
- package/lib/viewModels/PromptModalViewModel.d.ts +20 -16
- package/lib/viewModels/PromptModalViewModel.d.ts.map +1 -1
- package/lib/viewModels/PromptModalViewModel.js +37 -36
- package/lib/viewModels/PromptModalViewModel.js.map +1 -1
- package/lib/viewModels/{SelectViewModel.d.ts → SelectModel.d.ts} +14 -8
- package/lib/viewModels/SelectModel.d.ts.map +1 -0
- package/lib/viewModels/SelectModel.js +109 -0
- package/lib/viewModels/SelectModel.js.map +1 -0
- package/lib/viewModels/{TextInputViewModel.d.ts → TextModel.d.ts} +10 -9
- package/lib/viewModels/TextModel.d.ts.map +1 -0
- package/lib/viewModels/{TextInputViewModel.js → TextModel.js} +8 -17
- package/lib/viewModels/TextModel.js.map +1 -0
- package/lib/viewModels/Validatable.d.ts +9 -7
- package/lib/viewModels/Validatable.d.ts.map +1 -1
- package/lib/viewModels/Validatable.js +22 -8
- package/lib/viewModels/Validatable.js.map +1 -1
- package/lib/viewModels/ValuesCollector.d.ts +28 -0
- package/lib/viewModels/ValuesCollector.d.ts.map +1 -0
- package/lib/viewModels/ValuesCollector.js +51 -0
- package/lib/viewModels/ValuesCollector.js.map +1 -0
- package/lib/viewModels/index.d.ts +7 -5
- package/lib/viewModels/index.d.ts.map +1 -1
- package/lib/viewModels/index.js +7 -5
- package/lib/viewModels/index.js.map +1 -1
- package/lib/viewModels/wrappers.d.ts +15 -0
- package/lib/viewModels/wrappers.d.ts.map +1 -0
- package/lib/viewModels/wrappers.js +43 -0
- package/lib/viewModels/wrappers.js.map +1 -0
- package/package.json +1 -1
- package/src/types.ts +16 -0
- package/src/viewModels/FlagModel.ts +43 -0
- package/src/viewModels/MultiSelectModel.ts +150 -0
- package/src/viewModels/NumberModel.ts +36 -0
- package/src/viewModels/PromptModalViewModel.ts +43 -49
- package/src/viewModels/SelectModel.ts +125 -0
- package/src/viewModels/{TextInputViewModel.ts → TextModel.ts} +22 -25
- package/src/viewModels/Validatable.ts +26 -11
- package/src/viewModels/ValuesCollector.ts +84 -0
- package/src/viewModels/__tests__/multiSelect.test.ts +23 -0
- package/src/viewModels/__tests__/select.test.ts +71 -0
- package/src/viewModels/__tests__/wrappers.test.ts +79 -0
- package/src/viewModels/index.ts +9 -5
- package/src/viewModels/wrappers.ts +53 -0
- package/lib/viewModels/RadioButtonGroupViewModel.d.ts +0 -11
- package/lib/viewModels/RadioButtonGroupViewModel.d.ts.map +0 -1
- package/lib/viewModels/RadioButtonGroupViewModel.js +0 -51
- package/lib/viewModels/RadioButtonGroupViewModel.js.map +0 -1
- package/lib/viewModels/RadioButtonViewModel.d.ts +0 -9
- package/lib/viewModels/RadioButtonViewModel.d.ts.map +0 -1
- package/lib/viewModels/RadioButtonViewModel.js +0 -32
- package/lib/viewModels/RadioButtonViewModel.js.map +0 -1
- package/lib/viewModels/SelectViewModel.d.ts.map +0 -1
- package/lib/viewModels/SelectViewModel.js +0 -88
- package/lib/viewModels/SelectViewModel.js.map +0 -1
- package/lib/viewModels/TextInputViewModel.d.ts.map +0 -1
- package/lib/viewModels/TextInputViewModel.js.map +0 -1
- package/src/viewModels/RadioButtonGroupViewModel.ts +0 -47
- package/src/viewModels/RadioButtonViewModel.ts +0 -26
- package/src/viewModels/SelectViewModel.ts +0 -88
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectString = exports.Select = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const lazy_light_1 = require("../lazy.light");
|
|
6
|
+
const mobx_1 = require("mobx");
|
|
7
|
+
const FlagModel_1 = require("./FlagModel");
|
|
8
|
+
const Validatable_1 = require("./Validatable");
|
|
9
|
+
const wrappers_1 = require("./wrappers");
|
|
10
|
+
class Select extends Validatable_1.ValidatableModel {
|
|
11
|
+
constructor(_items, _accessor, initialIndex = 0) {
|
|
12
|
+
super();
|
|
13
|
+
this._items = _items;
|
|
14
|
+
this._accessor = _accessor;
|
|
15
|
+
this._index = undefined;
|
|
16
|
+
this.opened = new FlagModel_1.FlagModel();
|
|
17
|
+
this._indexLocked = false;
|
|
18
|
+
this._initialIndex = null;
|
|
19
|
+
this._flags = lazy_light_1.createLazy(() => this.createFlags());
|
|
20
|
+
this.reset = () => {
|
|
21
|
+
super.reset();
|
|
22
|
+
this.index = this._initialIndex;
|
|
23
|
+
};
|
|
24
|
+
mobx_1.makeObservable(this);
|
|
25
|
+
this._initialIndex = initialIndex;
|
|
26
|
+
this._index = initialIndex;
|
|
27
|
+
}
|
|
28
|
+
get valueToValidate() { return this.selectedItem; }
|
|
29
|
+
get values() {
|
|
30
|
+
return this._items.map(i => this._accessor(i));
|
|
31
|
+
}
|
|
32
|
+
get flags() {
|
|
33
|
+
return this._flags.value;
|
|
34
|
+
}
|
|
35
|
+
get items() {
|
|
36
|
+
return this._items;
|
|
37
|
+
}
|
|
38
|
+
get value() { return this.selectedValue; }
|
|
39
|
+
get selectedValue() {
|
|
40
|
+
const vs = this.values;
|
|
41
|
+
return vs.length ? vs[this._index] : null;
|
|
42
|
+
}
|
|
43
|
+
set value(v) { this.selectedValue = v; }
|
|
44
|
+
set selectedValue(value) {
|
|
45
|
+
const index = this.values.indexOf(value);
|
|
46
|
+
if (index >= 0) {
|
|
47
|
+
this.index = index;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
get selectedItem() {
|
|
51
|
+
return this._items.length ? this._items[this._index] : null;
|
|
52
|
+
}
|
|
53
|
+
set selectedItem(item) {
|
|
54
|
+
const index = this._items.indexOf(item);
|
|
55
|
+
if (index >= 0) {
|
|
56
|
+
this.index = index;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
get index() {
|
|
60
|
+
return this._index;
|
|
61
|
+
}
|
|
62
|
+
set index(val) {
|
|
63
|
+
if (this._indexLocked) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this._index = val;
|
|
67
|
+
// update all flags to be properly selected
|
|
68
|
+
try {
|
|
69
|
+
this._indexLocked = true;
|
|
70
|
+
if (this._flags.hasValue) {
|
|
71
|
+
this._flags.value.forEach((f, i) => f.value = (i === this._index));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
this._indexLocked = false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
createFlags() {
|
|
79
|
+
const flags = this._items
|
|
80
|
+
.map((item, index) => {
|
|
81
|
+
const flag = wrappers_1.withLabel(new FlagModel_1.FlagModel(index === this.index), () => this._accessor(item));
|
|
82
|
+
// react on every flag is changed directly
|
|
83
|
+
mobx_1.reaction(() => flag.value, isSelected => {
|
|
84
|
+
if (isSelected) {
|
|
85
|
+
this.index = index;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return flag;
|
|
89
|
+
});
|
|
90
|
+
return flags;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
tslib_1.__decorate([
|
|
94
|
+
mobx_1.observable,
|
|
95
|
+
tslib_1.__metadata("design:type", Number)
|
|
96
|
+
], Select.prototype, "_index", void 0);
|
|
97
|
+
tslib_1.__decorate([
|
|
98
|
+
mobx_1.computed,
|
|
99
|
+
tslib_1.__metadata("design:type", Array),
|
|
100
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
101
|
+
], Select.prototype, "values", null);
|
|
102
|
+
exports.Select = Select;
|
|
103
|
+
class SelectString extends Select {
|
|
104
|
+
constructor(items, initialIndex = 0) {
|
|
105
|
+
super(items, v => v, initialIndex);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.SelectString = SelectString;
|
|
109
|
+
//# sourceMappingURL=SelectModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectModel.js","sourceRoot":"","sources":["../../src/viewModels/SelectModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { Getter } from '../types';
|
|
2
|
+
import { ValidatableModel, ValidationConfig } from './Validatable';
|
|
3
|
+
import { IValueModel } from './ValuesCollector';
|
|
3
4
|
export declare type TextInputConfig = {
|
|
4
|
-
name?:
|
|
5
|
-
title?:
|
|
6
|
-
value?:
|
|
5
|
+
name?: Getter<string>;
|
|
6
|
+
title?: Getter<string>;
|
|
7
|
+
value?: Getter<string>;
|
|
7
8
|
async?: boolean;
|
|
8
|
-
validation?: ValidationConfig
|
|
9
|
+
validation?: ValidationConfig<string>;
|
|
9
10
|
noSubscribe?: boolean;
|
|
10
11
|
};
|
|
11
12
|
export declare class Text {
|
|
12
13
|
private _value;
|
|
13
14
|
constructor(config: {
|
|
14
|
-
value:
|
|
15
|
+
value: Getter<string>;
|
|
15
16
|
async?: boolean;
|
|
16
17
|
noSubscribe?: boolean;
|
|
17
18
|
});
|
|
18
19
|
get value(): string;
|
|
19
20
|
}
|
|
20
|
-
export declare class TextInputVM extends
|
|
21
|
+
export declare class TextInputVM extends ValidatableModel implements IValueModel<string> {
|
|
21
22
|
private _value;
|
|
22
23
|
private _focused;
|
|
23
24
|
private _name;
|
|
@@ -35,4 +36,4 @@ export declare class TextInputVM extends ValidatableViewModel {
|
|
|
35
36
|
private onBlur;
|
|
36
37
|
reset(): void;
|
|
37
38
|
}
|
|
38
|
-
//# sourceMappingURL=
|
|
39
|
+
//# sourceMappingURL=TextModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/TextModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,oBAAY,eAAe,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,UAAU,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAeF,qBAAa,IAAI;IAEb,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAKrF,IAAI,KAAK,WAA0B;CACtC;AAED,qBAAa,WAAY,SAAQ,gBAAiB,YAAW,WAAW,CAAC,MAAM,CAAC;IAE5E,OAAO,CAAC,MAAM,CAAM;IAGpB,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,KAAK,CAAgB;IAG7B,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;gBAExC,MAAM,CAAC,EAAE,eAAe;IAYpC,IAAI,KAAK,WAA0B;IACnC,IAAI,IAAI,WAAyB;IACjC,IAAI,KAAK,WAA0B;IAEnC,IAAI,KAAK,CAAC,GAAG,QAAA,EAMZ;IAED,IACI,OAAO,YAEV;IAED,IAAI,OAAO,YAEV;IAED,IAAI,OAAO,CAAC,GAAG,SAAA,EAQd;IAED,SAAS,KAAK,eAAe,WAAwC;IAErE,OAAO,CAAC,MAAM;IAKd,KAAK;CAMR"}
|
|
@@ -3,24 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TextInputVM = exports.Text = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const mobx_1 = require("mobx");
|
|
6
|
+
const types_1 = require("../types");
|
|
6
7
|
const logger_1 = tslib_1.__importDefault(require("../logger"));
|
|
7
8
|
const Validatable_1 = require("./Validatable");
|
|
8
9
|
function FromGetter(getter, setter, autorunDelay = null, noAutorun = null) {
|
|
9
|
-
if (typeof getter
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
mobx_1.autorun(() => {
|
|
15
|
-
setter(getter());
|
|
16
|
-
}, { delay: autorunDelay });
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
else if (typeof getter === 'string') {
|
|
21
|
-
setter(getter);
|
|
10
|
+
if (noAutorun || typeof getter !== 'function') {
|
|
11
|
+
setter(types_1.Getter.getValue(getter));
|
|
12
|
+
return null;
|
|
22
13
|
}
|
|
23
|
-
return
|
|
14
|
+
return mobx_1.reaction(() => types_1.Getter.getValue(getter), setter, { delay: autorunDelay, fireImmediately: true });
|
|
24
15
|
}
|
|
25
16
|
class Text {
|
|
26
17
|
constructor(config) {
|
|
@@ -35,7 +26,7 @@ tslib_1.__decorate([
|
|
|
35
26
|
tslib_1.__metadata("design:type", String)
|
|
36
27
|
], Text.prototype, "_value", void 0);
|
|
37
28
|
exports.Text = Text;
|
|
38
|
-
class TextInputVM extends Validatable_1.
|
|
29
|
+
class TextInputVM extends Validatable_1.ValidatableModel {
|
|
39
30
|
constructor(config) {
|
|
40
31
|
super(config && config.validation);
|
|
41
32
|
this._value = '';
|
|
@@ -75,7 +66,7 @@ class TextInputVM extends Validatable_1.ValidatableViewModel {
|
|
|
75
66
|
}
|
|
76
67
|
super.reset();
|
|
77
68
|
}
|
|
78
|
-
get valueToValidate() { return this.value; }
|
|
69
|
+
get valueToValidate() { var _a; return ((_a = this.value) !== null && _a !== void 0 ? _a : '').trim(); }
|
|
79
70
|
onBlur() {
|
|
80
71
|
this.validate();
|
|
81
72
|
}
|
|
@@ -113,4 +104,4 @@ tslib_1.__decorate([
|
|
|
113
104
|
tslib_1.__metadata("design:returntype", void 0)
|
|
114
105
|
], TextInputVM.prototype, "reset", null);
|
|
115
106
|
exports.TextInputVM = TextInputVM;
|
|
116
|
-
//# sourceMappingURL=
|
|
107
|
+
//# sourceMappingURL=TextModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextModel.js","sourceRoot":"","sources":["../../src/viewModels/TextModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
import { ValidatorFunction, ValidatorFunctionAsync } from '../validation';
|
|
2
|
-
export declare type ValueValidator = ValidatorFunction | ValidatorFunctionAsync
|
|
2
|
+
export declare type ValueValidator<T> = ValidatorFunction<T> | ValidatorFunctionAsync<T>;
|
|
3
3
|
export declare type ValidationErrorsStrings = {
|
|
4
4
|
[code: number]: string;
|
|
5
5
|
};
|
|
6
|
-
export declare type ValidationConfig = {
|
|
7
|
-
validator: ValueValidator
|
|
6
|
+
export declare type ValidationConfig<T> = {
|
|
7
|
+
validator: ValueValidator<Readonly<T>>;
|
|
8
8
|
errors: ValidationErrorsStrings;
|
|
9
9
|
};
|
|
10
|
-
export declare abstract class
|
|
10
|
+
export declare abstract class ValidatableModel<T = string> {
|
|
11
11
|
private _validator;
|
|
12
12
|
private _strings;
|
|
13
13
|
private _error;
|
|
14
14
|
private _validationError;
|
|
15
|
-
constructor(config?: ValidationConfig);
|
|
16
|
-
protected abstract get valueToValidate():
|
|
15
|
+
constructor(config?: ValidationConfig<T>);
|
|
16
|
+
protected abstract get valueToValidate(): Readonly<T>;
|
|
17
17
|
get isValid(): boolean;
|
|
18
18
|
get error(): string;
|
|
19
|
+
setValidationConfig(config?: ValidationConfig<T>): this;
|
|
19
20
|
validate(): Promise<boolean>;
|
|
21
|
+
getIsInvalid(): Promise<boolean>;
|
|
20
22
|
reset(): void;
|
|
21
|
-
static IsSomeInvalid(validatables:
|
|
23
|
+
static IsSomeInvalid(validatables: ReadonlyArray<Readonly<ValidatableModel>>, stopOnFail?: boolean): Promise<boolean>;
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=Validatable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validatable.d.ts","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAqC,MAAM,eAAe,CAAC;AAG7G,oBAAY,cAAc,
|
|
1
|
+
{"version":3,"file":"Validatable.d.ts","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAqC,MAAM,eAAe,CAAC;AAG7G,oBAAY,cAAc,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AACjF,oBAAY,uBAAuB,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEjE,oBAAY,gBAAgB,CAAC,CAAC,IAAI;IAC9B,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC;CACnC,CAAC;AAGF,8BAAsB,gBAAgB,CAAC,CAAC,GAAG,MAAM;IAE7C,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,QAAQ,CAAiC;IAGjD,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,gBAAgB,CAAyB;gBAErC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAKxC,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,YAA2B;IAEtC,IAAI,KAAK,WAA0B;IAE5B,mBAAmB,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAMjD,QAAQ;IAuBR,YAAY;IAMlB,KAAK;WAKQ,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,UAAO;CAQxG"}
|
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ValidatableModel = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const mobx_1 = require("mobx");
|
|
6
6
|
const validation_1 = require("../validation");
|
|
7
7
|
const arrays_1 = require("../async/arrays");
|
|
8
|
-
|
|
8
|
+
const EmptyValidator = () => validation_1.ValidationErrors.None;
|
|
9
|
+
class ValidatableModel {
|
|
9
10
|
constructor(config) {
|
|
10
11
|
this._validator = null;
|
|
11
12
|
this._strings = null;
|
|
12
13
|
this._error = null;
|
|
13
14
|
this._validationError = null;
|
|
14
15
|
mobx_1.makeObservable(this);
|
|
15
|
-
this.
|
|
16
|
-
this._strings = config && config.errors;
|
|
16
|
+
this.setValidationConfig(config);
|
|
17
17
|
}
|
|
18
18
|
get isValid() { return !this._error; }
|
|
19
19
|
get error() { return this._error; }
|
|
20
|
+
setValidationConfig(config) {
|
|
21
|
+
this._validator = (config === null || config === void 0 ? void 0 : config.validator) || EmptyValidator;
|
|
22
|
+
this._strings = config === null || config === void 0 ? void 0 : config.errors;
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
20
25
|
async validate() {
|
|
21
|
-
var _a;
|
|
22
26
|
if (!this._validator) {
|
|
23
27
|
return true;
|
|
24
28
|
}
|
|
25
29
|
try {
|
|
26
|
-
const valid = await this._validator(
|
|
30
|
+
const valid = await this._validator(this.valueToValidate);
|
|
27
31
|
this._validationError = valid === validation_1.ValidationErrors.None
|
|
28
32
|
? null
|
|
29
33
|
: new validation_1.ValidationError('Unknown error', valid);
|
|
@@ -40,6 +44,10 @@ class ValidatableViewModel {
|
|
|
40
44
|
}
|
|
41
45
|
return this._validationError == null;
|
|
42
46
|
}
|
|
47
|
+
async getIsInvalid() {
|
|
48
|
+
const valid = await this.validate();
|
|
49
|
+
return !valid;
|
|
50
|
+
}
|
|
43
51
|
reset() {
|
|
44
52
|
this._validationError = null;
|
|
45
53
|
this._error = null;
|
|
@@ -55,6 +63,12 @@ class ValidatableViewModel {
|
|
|
55
63
|
tslib_1.__decorate([
|
|
56
64
|
mobx_1.observable,
|
|
57
65
|
tslib_1.__metadata("design:type", String)
|
|
58
|
-
],
|
|
59
|
-
|
|
66
|
+
], ValidatableModel.prototype, "_error", void 0);
|
|
67
|
+
tslib_1.__decorate([
|
|
68
|
+
mobx_1.action,
|
|
69
|
+
tslib_1.__metadata("design:type", Function),
|
|
70
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
71
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
72
|
+
], ValidatableModel.prototype, "reset", null);
|
|
73
|
+
exports.ValidatableModel = ValidatableModel;
|
|
60
74
|
//# sourceMappingURL=Validatable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validatable.js","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":";;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"Validatable.js","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAC1D,8CAA6G;AAC7G,4CAA4C;AAU5C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,6BAAgB,CAAC,IAAI,CAAC;AACnD,MAAsB,gBAAgB;IAUlC,YAAY,MAA4B;QARhC,eAAU,GAAgC,IAAI,CAAC;QAC/C,aAAQ,GAA4B,IAAI,CAAC;QAGzC,WAAM,GAAW,IAAI,CAAC;QAEtB,qBAAgB,GAAoB,IAAI,CAAC;QAG7C,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAID,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5B,mBAAmB,CAAC,MAA4B;QACnD,IAAI,CAAC,UAAU,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,cAAc,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,IAAI;YACA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1D,IAAI,CAAC,gBAAgB,GAAG,KAAK,KAAK,6BAAgB,CAAC,IAAI;gBACnD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,4BAAe,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;SACrD;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,gBAAgB,GAAG,GAAsB,CAAC;SAClD;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;aAAM;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACtD;QACD,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC;IAGD,KAAK;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAuD,EAAE,UAAU,GAAG,IAAI;QACjG,IAAI,UAAU,EAAE;YACZ,OAAO,kBAAS,CAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;CACJ;AA/DG;IADC,iBAAU;;gDACmB;AAkD9B;IADC,aAAM;;;;6CAIN;AA3DL,4CAqEC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface IValueModel<TValue> {
|
|
2
|
+
value: TValue;
|
|
3
|
+
}
|
|
4
|
+
export interface IValueCollector<TSource, TValue> {
|
|
5
|
+
getValue(source: TSource): TValue;
|
|
6
|
+
setValue(source: TSource, value: TValue): void;
|
|
7
|
+
}
|
|
8
|
+
declare type SimpleCollector<T> = {
|
|
9
|
+
get: () => T;
|
|
10
|
+
set: (t: T) => void;
|
|
11
|
+
};
|
|
12
|
+
export declare type ModelCollectorsMap<T> = {
|
|
13
|
+
[P in keyof T]?: IValueModel<T[P]>;
|
|
14
|
+
};
|
|
15
|
+
export declare type CollectorsMap<T> = {
|
|
16
|
+
[P in keyof T]?: SimpleCollector<T[P]>;
|
|
17
|
+
};
|
|
18
|
+
export declare class ModelCollector<T extends Object> {
|
|
19
|
+
private readonly _collectors;
|
|
20
|
+
addModels(models: ModelCollectorsMap<T>): this;
|
|
21
|
+
addModel<TKey extends keyof T, TSource extends IValueModel<T[TKey]>>(key: TKey, source: TSource): this;
|
|
22
|
+
addCollector<TKey extends keyof T, TModel, TCollector extends IValueCollector<TModel, T[TKey]>>(key: TKey, model: TModel, collector: TCollector): this;
|
|
23
|
+
remove(key: keyof T): this;
|
|
24
|
+
collect(): T;
|
|
25
|
+
populate(data: T): void;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=ValuesCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValuesCollector.d.ts","sourceRoot":"","sources":["../../src/viewModels/ValuesCollector.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW,CAAC,MAAM;IAC/B,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,EAAE,MAAM;IAC5C,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD;AAED,aAAK,eAAe,CAAC,CAAC,IAAI;IACtB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CACvB,CAAC;AAMF,oBAAY,kBAAkB,CAAC,CAAC,IAAI;KAC/B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACrC,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAEpD,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAKvC,QAAQ,CAAC,IAAI,SAAS,MAAM,CAAC,EAAE,OAAO,SAAS,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;IAS/F,YAAY,CAAC,IAAI,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,SAAS,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;IAS/I,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAMnB,OAAO,IAAI,CAAC;IAYZ,QAAQ,CAAC,IAAI,EAAE,CAAC;CAW1B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelCollector = void 0;
|
|
4
|
+
class ModelCollector {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._collectors = {};
|
|
7
|
+
}
|
|
8
|
+
addModels(models) {
|
|
9
|
+
Object.entries(models).forEach(pair => this.addModel(pair[0], pair[1]));
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
addModel(key, source) {
|
|
13
|
+
this._collectors[key] = {
|
|
14
|
+
get: () => source.value,
|
|
15
|
+
set: v => { source.value = v; },
|
|
16
|
+
};
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
addCollector(key, model, collector) {
|
|
20
|
+
this._collectors[key] = {
|
|
21
|
+
get: () => collector.getValue(model),
|
|
22
|
+
set: v => collector.setValue(model, v),
|
|
23
|
+
};
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
remove(key) {
|
|
27
|
+
delete this._collectors[key];
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
collect() {
|
|
31
|
+
const res = {};
|
|
32
|
+
Object.entries(this._collectors).forEach(pair => {
|
|
33
|
+
const key = pair[0];
|
|
34
|
+
const collector = pair[1];
|
|
35
|
+
res[key] = collector.get();
|
|
36
|
+
});
|
|
37
|
+
return res;
|
|
38
|
+
}
|
|
39
|
+
populate(data) {
|
|
40
|
+
Object.entries(data).forEach(pair => {
|
|
41
|
+
const key = pair[0];
|
|
42
|
+
const value = pair[1];
|
|
43
|
+
const collector = this._collectors[key];
|
|
44
|
+
if (collector) {
|
|
45
|
+
collector.set(value);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.ModelCollector = ModelCollector;
|
|
51
|
+
//# sourceMappingURL=ValuesCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValuesCollector.js","sourceRoot":"","sources":["../../src/viewModels/ValuesCollector.ts"],"names":[],"mappings":";;;AA2BA,MAAa,cAAc;IAA3B;QAEqB,gBAAW,GAA2B,EAAG,CAAC;IAsD/D,CAAC;IApDU,SAAS,CAAC,MAA6B;QAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,QAAQ,CAA6D,GAAS,EAAE,MAAe;QAClG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;YACpB,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;YACvB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;SAClC,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAoF,GAAS,EAAE,KAAa,EAAE,SAAqB;QAClJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;YACpB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACzC,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,GAAY;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAE7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO;QACV,MAAM,GAAG,GAAG,EAAQ,CAAC;QAErB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAgC,CAAC;YACzD,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,IAAO;QACnB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAe,CAAC;YAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,SAAS,EAAE;gBACX,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACxB;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAxDD,wCAwDC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export * from './PromptModalViewModel';
|
|
2
|
-
export * from './RadioButtonGroupViewModel';
|
|
3
|
-
export * from './RadioButtonViewModel';
|
|
4
|
-
export * from './SelectViewModel';
|
|
5
|
-
export * from './TextInputViewModel';
|
|
6
1
|
export * from './Validatable';
|
|
2
|
+
export * from './TextModel';
|
|
3
|
+
export * from './FlagModel';
|
|
4
|
+
export * from './NumberModel';
|
|
5
|
+
export * from './wrappers';
|
|
6
|
+
export * from './SelectModel';
|
|
7
|
+
export * from './MultiSelectModel';
|
|
8
|
+
export * from './PromptModalViewModel';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAE3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AAEnC,cAAc,wBAAwB,CAAC"}
|
package/lib/viewModels/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./PromptModalViewModel"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./RadioButtonGroupViewModel"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./RadioButtonViewModel"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./SelectViewModel"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./TextInputViewModel"), exports);
|
|
9
4
|
tslib_1.__exportStar(require("./Validatable"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./TextModel"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./FlagModel"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./NumberModel"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./wrappers"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./SelectModel"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./MultiSelectModel"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./PromptModalViewModel"), exports);
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/viewModels/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,sDAA4B;AAC5B,sDAA4B;AAC5B,wDAA8B;AAC9B,qDAA2B;AAE3B,wDAA8B;AAC9B,6DAAmC;AAEnC,iEAAuC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Getter } from '../types';
|
|
2
|
+
import { IValueModel } from './ValuesCollector';
|
|
3
|
+
export interface ILabel<T> {
|
|
4
|
+
readonly label: T;
|
|
5
|
+
}
|
|
6
|
+
export declare function withLabel<T, TModel extends IValueModel<T>, TLabel = string>(model: TModel, label: Getter<TLabel>): TModel & ILabel<TLabel>;
|
|
7
|
+
export declare function inject<T, TModel extends IValueModel<T>>(model: TModel, source: IValueModel<T>): TModel;
|
|
8
|
+
export declare function wrap<T, TModel extends IValueModel<T>, TRes>(model: TModel, getter: (m: TModel) => TRes, setter: (v: TRes, model: TModel) => void): IValueModel<TRes>;
|
|
9
|
+
declare type LabeledModel<T, TModel extends IValueModel<T>, TLabel = string> = TModel & ILabel<TLabel>;
|
|
10
|
+
interface LabeledModelCtor<T, TModel extends IValueModel<T>, TLabel = string> {
|
|
11
|
+
new (label?: Getter<TLabel>, initial?: T): LabeledModel<T, TModel, TLabel>;
|
|
12
|
+
}
|
|
13
|
+
export declare function mixinLabel<T, TModel extends IValueModel<T>, TLabel = string>(Superclass: new (initial?: T) => TModel): LabeledModelCtor<T, TModel, TLabel>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=wrappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/viewModels/wrappers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,2BAShH;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,UAS7F;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAKpK;AAED,aAAK,YAAY,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE/F,UAAU,gBAAgB,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IACxE,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9E;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAU1J"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mixinLabel = exports.wrap = exports.inject = exports.withLabel = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
function withLabel(model, label) {
|
|
6
|
+
const _label = label;
|
|
7
|
+
Object.defineProperty(model, 'label', {
|
|
8
|
+
configurable: true,
|
|
9
|
+
enumerable: false,
|
|
10
|
+
get() { return types_1.Getter.getValue(_label); },
|
|
11
|
+
});
|
|
12
|
+
return model;
|
|
13
|
+
}
|
|
14
|
+
exports.withLabel = withLabel;
|
|
15
|
+
function inject(model, source) {
|
|
16
|
+
Object.defineProperty(model, 'value', {
|
|
17
|
+
configurable: true,
|
|
18
|
+
enumerable: false,
|
|
19
|
+
get() { return source.value; },
|
|
20
|
+
set(v) { source.value = v; },
|
|
21
|
+
});
|
|
22
|
+
return model;
|
|
23
|
+
}
|
|
24
|
+
exports.inject = inject;
|
|
25
|
+
function wrap(model, getter, setter) {
|
|
26
|
+
return {
|
|
27
|
+
get value() { return getter(model); },
|
|
28
|
+
set value(v) { setter(v, model); },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
exports.wrap = wrap;
|
|
32
|
+
function mixinLabel(Superclass) {
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
class Sub extends Superclass {
|
|
35
|
+
constructor(label, initial) {
|
|
36
|
+
super(initial);
|
|
37
|
+
withLabel(this, label);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Sub;
|
|
41
|
+
}
|
|
42
|
+
exports.mixinLabel = mixinLabel;
|
|
43
|
+
//# sourceMappingURL=wrappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrappers.js","sourceRoot":"","sources":["../../src/viewModels/wrappers.ts"],"names":[],"mappings":";;;AAAA,oCAAkC;AAOlC,SAAgB,SAAS,CAAoD,KAAa,EAAE,KAAqB;IAC7G,MAAM,MAAM,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;QAClC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,GAAG,KAAK,OAAO,cAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC5C,CAAC,CAAC;IAEH,OAAO,KAAgC,CAAC;AAC5C,CAAC;AATD,8BASC;AAED,SAAgB,MAAM,CAAmC,KAAa,EAAE,MAAsB;IAC1F,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;QAClC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,GAAG,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,GAAG,CAAC,CAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;KAClC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AATD,wBASC;AAED,SAAgB,IAAI,CAAyC,KAAa,EAAE,MAA2B,EAAE,MAAwC;IAC7I,OAAO;QACH,IAAI,KAAK,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,CAAO,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;KAC3C,CAAC;AACN,CAAC;AALD,oBAKC;AAQD,SAAgB,UAAU,CAAoD,UAAuC;IACjH,aAAa;IACb,MAAM,GAAI,SAAQ,UAAU;QACxB,YAAY,KAAqB,EAAE,OAAW;YAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;YACf,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;KACJ;IAED,OAAO,GAAU,CAAC;AACtB,CAAC;AAVD,gCAUC"}
|
package/package.json
CHANGED
package/src/types.ts
CHANGED
|
@@ -3,3 +3,19 @@ export { DeepPartial } from './deepPartial';
|
|
|
3
3
|
export type DeepReadonly<T> = {
|
|
4
4
|
readonly [P in keyof T]: DeepReadonly<T[P]>;
|
|
5
5
|
};
|
|
6
|
+
|
|
7
|
+
export type Getter<T> = (() => T) | T | null;
|
|
8
|
+
|
|
9
|
+
export namespace Getter {
|
|
10
|
+
export function getValue<T>(getter: Getter<T>): T {
|
|
11
|
+
if (getter == null) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
if (typeof getter === 'function') {
|
|
15
|
+
return (getter as () => T)();
|
|
16
|
+
}
|
|
17
|
+
return getter;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type Predicate<T> = (value: T) => boolean;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { action, makeObservable, observable } from 'mobx';
|
|
2
|
+
import { ILabel } from './wrappers';
|
|
3
|
+
import { IValueModel } from './ValuesCollector';
|
|
4
|
+
|
|
5
|
+
export interface IFlagModel extends IValueModel<boolean> {
|
|
6
|
+
toggle(): void;
|
|
7
|
+
reset(): void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type IFlagModelReadonly = {
|
|
11
|
+
readonly value: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type ILabeledFlagModel = IFlagModel & ILabel<string>;
|
|
15
|
+
|
|
16
|
+
export class FlagModel implements IFlagModel, IFlagModelReadonly {
|
|
17
|
+
|
|
18
|
+
@observable
|
|
19
|
+
private _value: boolean = false;
|
|
20
|
+
|
|
21
|
+
constructor(initial = false) {
|
|
22
|
+
makeObservable(this);
|
|
23
|
+
this._value = initial;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get value() {
|
|
27
|
+
return this._value;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
set value(value: boolean) {
|
|
31
|
+
this._value = value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@action
|
|
35
|
+
toggle = () => {
|
|
36
|
+
this._value = !this._value;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
@action
|
|
40
|
+
reset = () => {
|
|
41
|
+
this._value = false;
|
|
42
|
+
};
|
|
43
|
+
}
|