@zajno/common 1.3.3 → 1.3.7

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 (88) hide show
  1. package/coverage/clover.xml +80 -25
  2. package/coverage/coverage-final.json +3 -2
  3. package/coverage/lcov-report/index.html +35 -20
  4. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  5. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  6. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  7. package/coverage/lcov-report/src/async/index.html +1 -1
  8. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  9. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  10. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  11. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  12. package/coverage/lcov-report/src/dates/index.html +1 -1
  13. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  14. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  15. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  17. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  19. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  20. package/coverage/lcov-report/src/event.ts.html +1 -1
  21. package/coverage/lcov-report/src/fields/index.html +111 -0
  22. package/coverage/lcov-report/src/{viewModels/SelectViewModel.ts.html → fields/update.ts.html} +118 -178
  23. package/coverage/lcov-report/src/index.html +1 -1
  24. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  25. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  26. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  27. package/coverage/lcov-report/src/logger/index.html +1 -1
  28. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  29. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  30. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  31. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  32. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  33. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  34. package/coverage/lcov-report/src/math/index.html +1 -1
  35. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  36. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  37. package/coverage/lcov-report/src/types.ts.html +1 -1
  38. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  39. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  40. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  41. package/coverage/lcov-report/src/validation/index.html +1 -1
  42. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  43. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  44. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  45. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  46. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +51 -9
  47. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  48. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  49. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  50. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +34 -10
  51. package/coverage/lcov-report/src/viewModels/index.html +29 -29
  52. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  53. package/coverage/lcov-report/update.ts.html +374 -0
  54. package/coverage/lcov.info +189 -51
  55. package/lib/fields/update.d.ts +17 -6
  56. package/lib/fields/update.d.ts.map +1 -1
  57. package/lib/fields/update.js +29 -13
  58. package/lib/fields/update.js.map +1 -1
  59. package/lib/ident.d.ts +6 -0
  60. package/lib/ident.d.ts.map +1 -0
  61. package/lib/ident.js +3 -0
  62. package/lib/ident.js.map +1 -0
  63. package/lib/unsubscriber.d.ts +4 -0
  64. package/lib/unsubscriber.d.ts.map +1 -1
  65. package/lib/unsubscriber.js +8 -1
  66. package/lib/unsubscriber.js.map +1 -1
  67. package/lib/viewModels/FlagModel.d.ts +2 -0
  68. package/lib/viewModels/FlagModel.d.ts.map +1 -1
  69. package/lib/viewModels/FlagModel.js +18 -0
  70. package/lib/viewModels/FlagModel.js.map +1 -1
  71. package/lib/viewModels/PromptModal.d.ts.map +1 -1
  72. package/lib/viewModels/PromptModal.js +1 -1
  73. package/lib/viewModels/PromptModal.js.map +1 -1
  74. package/lib/viewModels/Validatable.d.ts +2 -1
  75. package/lib/viewModels/Validatable.d.ts.map +1 -1
  76. package/lib/viewModels/Validatable.js +7 -0
  77. package/lib/viewModels/Validatable.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/fields/__tests__/fields.update.test.ts +73 -0
  80. package/src/fields/update.ts +54 -20
  81. package/src/ident.ts +8 -0
  82. package/src/unsubscriber.ts +7 -0
  83. package/src/viewModels/FlagModel.ts +14 -0
  84. package/src/viewModels/PromptModal.ts +1 -1
  85. package/src/viewModels/Validatable.ts +8 -0
  86. package/coverage/lcov-report/src/viewModels/LabeledFlagModel.ts.html +0 -146
  87. package/coverage/lcov-report/transitionObserver.ts.html +0 -572
  88. package/yarn-error.log +0 -3709
@@ -1,9 +1,20 @@
1
- export declare type Getter<T> = (obj: Partial<T>) => T[keyof T];
2
- export declare type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
3
- export declare type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
4
- export declare function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged?: Comparer<T>): boolean;
5
- export declare function updateFieldExtended<T>(target: T, source: Partial<T>, diff: Partial<T>, get: Getter<T>, set: Setter<T>, hasChanged?: Comparer<T>): boolean;
6
- export declare function updateArray<T extends string>(current: T[] | null, updated: T[]): {
1
+ import { Comparator } from '../types';
2
+ export declare namespace Fields {
3
+ type Getter<T> = (obj: Partial<T>) => T[keyof T];
4
+ type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
5
+ type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
6
+ type Updater<T> = (target: T, source: T) => T;
7
+ }
8
+ export declare function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged?: Fields.Comparer<T>): boolean;
9
+ export declare function updateFieldExtended<T>(target: T, source: Partial<T>, diff: Partial<T>, get: Fields.Getter<T>, set: Fields.Setter<T>, hasChanged?: Fields.Comparer<T>): boolean;
10
+ export declare type UpdateArrayOptions<T> = {
11
+ additive?: boolean;
12
+ clone?: boolean;
13
+ comparator?: Comparator<T>;
14
+ updater?: Fields.Updater<T>;
15
+ sorter?: Comparator<T, number> | null | undefined;
16
+ };
17
+ export declare function updateArray<T>(target: T[] | null, source: T[], options?: UpdateArrayOptions<T>): {
7
18
  changed: number;
8
19
  result: T[];
9
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":"AACA,oBAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,oBAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;AACnE,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAE9E,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAE,QAAQ,CAAC,CAAC,CAAQ,GAAG,OAAO,CAErI;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EACd,UAAU,GAAE,QAAQ,CAAC,CAAC,CAAQ,GAC/B,OAAO,CAcT;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAA;CAAE,CA+BjH"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,yBAAiB,MAAM,CAAC;IACpB,KAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,KAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,KAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC9E,KAAY,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;CACxD;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAQ,GAAG,OAAO,CAE5I;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACrB,UAAU,GAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAQ,GACtC,OAAO,CAcT;AAKD,oBAAY,kBAAkB,CAAC,CAAC,IAAI;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAClB,MAAM,EAAE,CAAC,EAAE,EACX,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAChC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAA;CAAE,CA6ClC"}
@@ -16,28 +16,44 @@ function updateFieldExtended(target, source, diff, get, set, hasChanged = null)
16
16
  return changed;
17
17
  }
18
18
  exports.updateFieldExtended = updateFieldExtended;
19
- function updateArray(current, updated) {
20
- if (!updated) {
21
- return { changed: 0, result: current };
19
+ const DefaultComparator = (v1, v2) => v1 === v2;
20
+ const DefaultUpdater = (v1, v2) => Object.assign(v1, v2);
21
+ function updateArray(target, source, options) {
22
+ if (!source) {
23
+ return { changed: 0, result: target };
22
24
  }
23
25
  let changed = 0;
24
- const result = current || [];
26
+ const result = Array.isArray(target)
27
+ ? ((options === null || options === void 0 ? void 0 : options.clone) ? target.slice() : target)
28
+ : [];
29
+ const comparator = (options === null || options === void 0 ? void 0 : options.comparator) || DefaultComparator;
30
+ const updater = (options === null || options === void 0 ? void 0 : options.updater) || DefaultUpdater;
25
31
  // remove all missing elements
26
- for (let i = 0; i < result.length; ++i) {
27
- if (!updated.includes(result[i])) {
28
- result.splice(i, 1);
29
- ++changed;
30
- --i;
32
+ if (!(options === null || options === void 0 ? void 0 : options.additive)) {
33
+ for (let i = 0; i < result.length; ++i) {
34
+ if (source.find(item => comparator(item, result[i])) == null) {
35
+ result.splice(i, 1);
36
+ ++changed;
37
+ --i;
38
+ }
31
39
  }
32
40
  }
33
- // add all new elements
34
- updated.forEach(i => {
35
- if (!result.includes(i)) {
41
+ // add all new elements and update existing
42
+ source.forEach(i => {
43
+ const existingIndex = result.findIndex(item => comparator(i, item));
44
+ const existingItem = result[existingIndex];
45
+ if (existingIndex < 0) {
36
46
  result.push(i);
37
47
  ++changed;
38
48
  }
49
+ else if (typeof existingItem === 'object') {
50
+ result[existingIndex] = updater(existingItem, i);
51
+ }
39
52
  });
40
- result.sort();
53
+ const sorter = options === null || options === void 0 ? void 0 : options.sorter;
54
+ if (sorter !== null) {
55
+ result.sort(sorter || undefined);
56
+ }
41
57
  return {
42
58
  result,
43
59
  changed,
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":";;;AAKA,SAAgB,WAAW,CAAI,MAAS,EAAE,MAAkB,EAAE,IAAgB,EAAE,GAAY,EAAE,aAA0B,IAAI;IACxH,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AACpG,CAAC;AAFD,kCAEC;AAED,SAAgB,mBAAmB,CAC/B,MAAS,EACT,MAAkB,EAClB,IAAgB,EAChB,GAAc,EACd,GAAc,EACd,aAA0B,IAAI;IAG9B,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC,EAAK,EAAE,EAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErE,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACzD,OAAO,GAAG,IAAI,CAAC;QACf,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;KAC5B;IAED,OAAO,OAAO,CAAC;AAEnB,CAAC;AArBD,kDAqBC;AAED,SAAgB,WAAW,CAAmB,OAAmB,EAAE,OAAY;IAC3E,IAAI,CAAC,OAAO,EAAE;QACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;KAC1C;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,OAAO,IAAI,EAAE,CAAC;IAE7B,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,EAAE,OAAO,CAAC;YACV,EAAE,CAAC,CAAC;SACP;KACJ;IAED,uBAAuB;IACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,EAAE,OAAO,CAAC;SACb;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,EAAE,CAAC;IAEd,OAAO;QACH,MAAM;QACN,OAAO;KACV,CAAC;AACN,CAAC;AA/BD,kCA+BC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":"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"}
package/lib/ident.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare type Ident<T, K extends keyof any = string> = T & {
2
+ id: K;
3
+ };
4
+ export declare type IdentAny = Ident<{}>;
5
+ export default Ident;
6
+ //# sourceMappingURL=ident.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ident.d.ts","sourceRoot":"","sources":["../src/ident.ts"],"names":[],"mappings":"AACA,oBAAY,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG;IACrD,EAAE,EAAE,CAAC,CAAC;CACT,CAAC;AAEF,oBAAY,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAEjC,eAAe,KAAK,CAAC"}
package/lib/ident.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ident.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ident.js","sourceRoot":"","sources":["../src/ident.ts"],"names":[],"mappings":""}
@@ -14,4 +14,8 @@ export declare class Unsubscriber {
14
14
  dispose(log?: boolean): void;
15
15
  }
16
16
  export declare function combineDisposers(...items: Disposer[]): Disposer;
17
+ export declare class Disposable implements IDisposable {
18
+ protected readonly disposer: Unsubscriber;
19
+ dispose: () => void;
20
+ }
17
21
  //# sourceMappingURL=unsubscriber.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscriber.d.ts","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IACxB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,IAAI,CAAC;CACZ;AAED,qBAAa,YAAY;IAKT,QAAQ,CAAC,OAAO,EAAE,MAAM;IAHpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;gBAE/B,OAAO,GAAE,MAAa;IAE3C,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM;IAqB1C,OAAO,CAAC,EAAE,EAAE,MAAM;IAelB,OAAO,CAAC,GAAG,UAAQ;CAYtB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAE/D"}
1
+ {"version":3,"file":"unsubscriber.d.ts","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IACxB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,IAAI,CAAC;CACZ;AAED,qBAAa,YAAY;IAKT,QAAQ,CAAC,OAAO,EAAE,MAAM;IAHpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;gBAE/B,OAAO,GAAE,MAAa;IAE3C,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM;IAqB1C,OAAO,CAAC,EAAE,EAAE,MAAM;IAelB,OAAO,CAAC,GAAG,UAAQ;CAYtB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAE/D;AAED,qBAAa,UAAW,YAAW,WAAW;IAE1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,eAAsB;IAE1C,OAAO,aAAiC;CAClD"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.combineDisposers = exports.Unsubscriber = void 0;
3
+ exports.Disposable = exports.combineDisposers = exports.Unsubscriber = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const logger_1 = tslib_1.__importDefault(require("./logger"));
6
6
  class Unsubscriber {
@@ -51,4 +51,11 @@ function combineDisposers(...items) {
51
51
  return () => items.forEach(i => i());
52
52
  }
53
53
  exports.combineDisposers = combineDisposers;
54
+ class Disposable {
55
+ constructor() {
56
+ this.disposer = new Unsubscriber();
57
+ this.dispose = () => this.disposer.dispose();
58
+ }
59
+ }
60
+ exports.Disposable = Disposable;
54
61
  //# sourceMappingURL=unsubscriber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscriber.js","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":";;;;AAAA,8DAA8B;AAU9B,MAAa,YAAY;IAKrB,YAAqB,UAAkB,IAAI;QAAtB,YAAO,GAAP,OAAO,CAAe;QAH1B,eAAU,GAAe,EAAE,CAAC;QAC5B,SAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEL,CAAC;IAEhD,GAAG,CAAC,CAAyB,EAAE,EAAW;QACtC,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,MAAM,EAAE,GAAa,OAAO,CAAC,KAAK,UAAU;YACxC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,CAAC,CAAC,CAAC,CAAC;QAER,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzB,IAAI,EAAE,EAAE;YACJ,uCAAuC;YACvC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACzB;IACL,CAAC;IAED,OAAO,CAAC,EAAU;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE;YACR,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAChC;QAED,CAAC,EAAE,CAAC;IACR,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,KAAK;QACf,IAAI,GAAG,EAAE;YACL,gBAAM,CAAC,GAAG,CACN,aAAa,IAAI,CAAC,OAAO,IAAI,WAAW,eAAe,IAAI,CAAC,UAAU,CAAC,MAAM,8BAA8B,EAC3G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;SACL;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACJ;AAvDD,oCAuDC;AAED,SAAgB,gBAAgB,CAAC,GAAG,KAAiB;IACjD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAFD,4CAEC"}
1
+ {"version":3,"file":"unsubscriber.js","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":";;;;AAAA,8DAA8B;AAU9B,MAAa,YAAY;IAKrB,YAAqB,UAAkB,IAAI;QAAtB,YAAO,GAAP,OAAO,CAAe;QAH1B,eAAU,GAAe,EAAE,CAAC;QAC5B,SAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEL,CAAC;IAEhD,GAAG,CAAC,CAAyB,EAAE,EAAW;QACtC,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,MAAM,EAAE,GAAa,OAAO,CAAC,KAAK,UAAU;YACxC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,CAAC,CAAC,CAAC,CAAC;QAER,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzB,IAAI,EAAE,EAAE;YACJ,uCAAuC;YACvC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACzB;IACL,CAAC;IAED,OAAO,CAAC,EAAU;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE;YACR,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAChC;QAED,CAAC,EAAE,CAAC;IACR,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,KAAK;QACf,IAAI,GAAG,EAAE;YACL,gBAAM,CAAC,GAAG,CACN,aAAa,IAAI,CAAC,OAAO,IAAI,WAAW,eAAe,IAAI,CAAC,UAAU,CAAC,MAAM,8BAA8B,EAC3G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;SACL;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACJ;AAvDD,oCAuDC;AAED,SAAgB,gBAAgB,CAAC,GAAG,KAAiB;IACjD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAFD,4CAEC;AAED,MAAa,UAAU;IAAvB;QAEuB,aAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAE1C,YAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;CAAA;AALD,gCAKC"}
@@ -13,6 +13,8 @@ export declare class FlagModel implements IFlagModel, IFlagModelReadonly {
13
13
  get value(): boolean;
14
14
  set value(value: boolean);
15
15
  get isDefault(): boolean;
16
+ setTrue: () => boolean;
17
+ setFalse: () => boolean;
16
18
  toggle: () => void;
17
19
  reset: () => void;
18
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FlagModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IACrE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED,oBAAY,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5D,qBAAa,SAAU,YAAW,UAAU,EAAE,kBAAkB;IAG5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,OAAO,UAAQ;IAK3B,IAAI,KAAK,IAIQ,OAAO,CAFvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED,IAAI,SAAS,YAAoC;IAGjD,MAAM,aAEJ;IAGF,KAAK,aAEH;CACL"}
1
+ {"version":3,"file":"FlagModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IACrE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED,oBAAY,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5D,qBAAa,SAAU,YAAW,UAAU,EAAE,kBAAkB;IAG5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,OAAO,UAAQ;IAK3B,IAAI,KAAK,IAIQ,OAAO,CAFvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED,IAAI,SAAS,YAAoC;IAGjD,OAAO,gBAIL;IAGF,QAAQ,gBAIN;IAGF,MAAM,aAEJ;IAGF,KAAK,aAEH;CACL"}
@@ -6,6 +6,16 @@ const mobx_1 = require("mobx");
6
6
  class FlagModel {
7
7
  constructor(initial = false) {
8
8
  this._value = false;
9
+ this.setTrue = () => {
10
+ const v = this.value;
11
+ this.value = true;
12
+ return !v;
13
+ };
14
+ this.setFalse = () => {
15
+ const v = this.value;
16
+ this.value = false;
17
+ return v;
18
+ };
9
19
  this.toggle = () => {
10
20
  this._value = !this._value;
11
21
  };
@@ -27,6 +37,14 @@ tslib_1.__decorate([
27
37
  mobx_1.observable,
28
38
  tslib_1.__metadata("design:type", Boolean)
29
39
  ], FlagModel.prototype, "_value", void 0);
40
+ tslib_1.__decorate([
41
+ mobx_1.action,
42
+ tslib_1.__metadata("design:type", Object)
43
+ ], FlagModel.prototype, "setTrue", void 0);
44
+ tslib_1.__decorate([
45
+ mobx_1.action,
46
+ tslib_1.__metadata("design:type", Object)
47
+ ], FlagModel.prototype, "setFalse", void 0);
30
48
  tslib_1.__decorate([
31
49
  mobx_1.action,
32
50
  tslib_1.__metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"FlagModel.js","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAc1D,MAAa,SAAS;IAKlB,YAAY,OAAO,GAAG,KAAK;QAFnB,WAAM,GAAY,KAAK,CAAC;QAkBhC,WAAM,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC;QAGF,UAAK,GAAG,GAAG,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC;QAtBE,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;CAWpD;AA1BG;IADC,iBAAU;;yCACqB;AAkBhC;IADC,aAAM;;yCAGL;AAGF;IADC,aAAM;;wCAGL;AA5BN,8BA6BC"}
1
+ {"version":3,"file":"FlagModel.js","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAc1D,MAAa,SAAS;IAKlB,YAAY,OAAO,GAAG,KAAK;QAFnB,WAAM,GAAY,KAAK,CAAC;QAkBhC,YAAO,GAAG,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC,CAAC;QAGF,aAAQ,GAAG,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;QAGF,WAAM,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC;QAGF,UAAK,GAAG,GAAG,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC;QApCE,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;CAyBpD;AAxCG;IADC,iBAAU;;yCACqB;AAkBhC;IADC,aAAM;;0CAKL;AAGF;IADC,aAAM;;2CAKL;AAGF;IADC,aAAM;;yCAGL;AAGF;IADC,aAAM;;wCAGL;AA1CN,8BA2CC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PromptModal.d.ts","sourceRoot":"","sources":["../../src/viewModels/PromptModal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,oBAAY,eAAe,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACrE,SAAgB,QAAQ,YAAmB;IAG3C,OAAO,CAAC,cAAc,CAAW;;IAMjC,IAAI,aAAa,MAAkC;IAG5C,SAAS,WAAY,CAAC,UAG3B;IAGK,UAAU,aAGf;IAEF,SAAS,CAAC,SAAS,OAAc,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,2DAWzD;CACL;AAED,oBAAY,iBAAiB,GAAG,eAAe,GAAG;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAC;IACzE,IAAI,YAAY,WAA8C;IAE9D,IAAI,WAAW,WAA6C;IAE5D,SAAS,sBAA6F;IACtG,QAAQ,sBAA6F;CACxG"}
1
+ {"version":3,"file":"PromptModal.d.ts","sourceRoot":"","sources":["../../src/viewModels/PromptModal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,oBAAY,eAAe,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACrE,SAAgB,QAAQ,YAAmB;IAG3C,OAAO,CAAC,cAAc,CAAW;;IAMjC,IAAI,aAAa,MAAkC;IAG5C,SAAS,WAAY,CAAC,UAG3B;IAGK,UAAU,aAGf;IAEF,SAAS,CAAC,SAAS,OAAc,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,2DAWzD;CACL;AAED,oBAAY,iBAAiB,GAAG,eAAe,GAAG;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAC;IACzE,IAAI,YAAY,WAA8C;IAE9D,IAAI,WAAW,WAA6C;IAE5D,SAAS,sBAA6F;IACtG,QAAQ,sBAA4F;CACvG"}
@@ -48,7 +48,7 @@ class PromptModalViewModel extends ModalActionModel {
48
48
  constructor() {
49
49
  super(...arguments);
50
50
  this.onConfirm = () => this.runAction(this.currentAction.onConfirm, true, this.currentAction.awaitActions);
51
- this.onReject = () => this.runAction(this.currentAction.onConfirm, true, this.currentAction.awaitActions);
51
+ this.onReject = () => this.runAction(this.currentAction.onReject, true, this.currentAction.awaitActions);
52
52
  }
53
53
  get confirmColor() { return this.currentAction.confirmColor; }
54
54
  get rejectColor() { return this.currentAction.rejectColor; }
@@ -1 +1 @@
1
- {"version":3,"file":"PromptModal.js","sourceRoot":"","sources":["../../src/viewModels/PromptModal.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAC1D,2CAAwC;AAOxC,MAAa,gBAAgB;IAMzB;QALgB,aAAQ,GAAG,IAAI,qBAAS,EAAE,CAAC;QAGnC,mBAAc,GAAM,IAAI,CAAC;QAS1B,cAAS,GAAG,CAAC,MAAS,EAAE,EAAE;YAC7B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QAGK,eAAU,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QAEQ,cAAS,GAAG,KAAK,EAAE,EAA8B,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE,EAAE;YAC9F,IAAI,EAAE,EAAE;gBACJ,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC;gBACrB,IAAI,WAAW,EAAE;oBACb,MAAM,OAAO,CAAC;iBACjB;aACJ;YAED,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;QACL,CAAC,CAAC;QA5BE,qBAAc,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;CA0BtD;AAhCG;IADC,iBAAU,CAAC,GAAG;;wDACkB;AASjC;IADC,aAAM;;mDAIL;AAGF;IADC,aAAM;;oDAIL;AAtBN,4CAoCC;AAaD,MAAa,oBAAqB,SAAQ,gBAAmC;IAA7E;;QAKI,cAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACtG,aAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACzG,CAAC;IANG,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9D,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;CAI/D;AAPD,oDAOC"}
1
+ {"version":3,"file":"PromptModal.js","sourceRoot":"","sources":["../../src/viewModels/PromptModal.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAC1D,2CAAwC;AAOxC,MAAa,gBAAgB;IAMzB;QALgB,aAAQ,GAAG,IAAI,qBAAS,EAAE,CAAC;QAGnC,mBAAc,GAAM,IAAI,CAAC;QAS1B,cAAS,GAAG,CAAC,MAAS,EAAE,EAAE;YAC7B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QAGK,eAAU,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QAEQ,cAAS,GAAG,KAAK,EAAE,EAA8B,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE,EAAE;YAC9F,IAAI,EAAE,EAAE;gBACJ,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC;gBACrB,IAAI,WAAW,EAAE;oBACb,MAAM,OAAO,CAAC;iBACjB;aACJ;YAED,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;QACL,CAAC,CAAC;QA5BE,qBAAc,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;CA0BtD;AAhCG;IADC,iBAAU,CAAC,GAAG;;wDACkB;AASjC;IADC,aAAM;;mDAIL;AAGF;IADC,aAAM;;oDAIL;AAtBN,4CAoCC;AAaD,MAAa,oBAAqB,SAAQ,gBAAmC;IAA7E;;QAKI,cAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACtG,aAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACxG,CAAC;IANG,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9D,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;CAI/D;AAPD,oDAOC"}
@@ -1,4 +1,4 @@
1
- import { ValidatorFunction, ValidatorFunctionAsync } from '../validation';
1
+ import { ValidatorFunction, ValidatorFunctionAsync, ValidationErrors } from '../validation';
2
2
  export declare type ValueValidator<T> = ValidatorFunction<T> | ValidatorFunctionAsync<T>;
3
3
  export declare type ValidationErrorsStrings = {
4
4
  [code: number]: string;
@@ -17,6 +17,7 @@ export declare abstract class ValidatableModel<T = string> {
17
17
  get isValid(): boolean;
18
18
  get error(): string;
19
19
  setValidationConfig(config?: ValidationConfig<T>): this;
20
+ testValidate(value: T): Promise<ValidationErrors>;
20
21
  validate(): Promise<boolean>;
21
22
  getIsInvalid(): Promise<boolean>;
22
23
  reset(): void;
@@ -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,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
+ {"version":3,"file":"Validatable.d.ts","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAmB,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;IAM1C,YAAY,CAAC,KAAK,EAAE,CAAC;IAQ5B,QAAQ;IAuBR,YAAY;IAMlB,KAAK;WAKQ,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,UAAO;CAQxG"}
@@ -22,6 +22,13 @@ class ValidatableModel {
22
22
  this._strings = config === null || config === void 0 ? void 0 : config.errors;
23
23
  return this;
24
24
  }
25
+ async testValidate(value) {
26
+ if (this._validator) {
27
+ const res = await this._validator(value);
28
+ return res;
29
+ }
30
+ return null;
31
+ }
25
32
  async validate() {
26
33
  if (!this._validator) {
27
34
  return true;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"Validatable.js","sourceRoot":"","sources":["../../src/viewModels/Validatable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "1.3.3",
3
+ "version": "1.3.7",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,73 @@
1
+ import { updateArray } from '../update';
2
+
3
+ describe('fields/update', () => {
4
+ it('empty input', () => {
5
+ expect(updateArray(null, null)).toStrictEqual({ changed: 0, result: null });
6
+ });
7
+
8
+ it('updates primitives | numbers', () => {
9
+ const target = [1, 5, 3];
10
+ const source = [4, 3, 2];
11
+
12
+ const results1 = updateArray(target, source, { clone: true });
13
+ expect(results1.changed).toBe(4);
14
+ expect(results1.result).toStrictEqual([2, 3, 4]);
15
+
16
+ const results2 = updateArray(target, source, { sorter: null });
17
+ expect(results2.changed).toBe(4);
18
+ expect(results2.result).toStrictEqual([3, 4, 2]);
19
+ });
20
+
21
+ it('updates primitives | strings', () => {
22
+ const target = ['a', 'b', 'c'];
23
+ const source = ['b', 'c', 'd'];
24
+
25
+ const results = updateArray(target, source);
26
+
27
+ expect(results.changed).toBe(2);
28
+ expect(results.result).toStrictEqual(source);
29
+ });
30
+
31
+ describe('updates objects', () => {
32
+ it('no options', () => {
33
+ const res = updateArray([
34
+ { id: 1, v: 'a' },
35
+ { id: 5, v: 'e' },
36
+ { id: 3, v: 'c' },
37
+ ], [
38
+ { id: 2, v: 'b' },
39
+ ]);
40
+
41
+ expect(res.changed).toBe(4);
42
+ expect(res.result).toStrictEqual([
43
+ { id: 2, v: 'b' },
44
+ ]);
45
+ });
46
+
47
+ // eslint-disable-next-line jest/expect-expect
48
+ it('full options', () => {
49
+ const res = updateArray([
50
+ { id: 1, v: 'a' },
51
+ { id: 5, v: 'e' },
52
+ { id: 3, v: 'c' },
53
+ ], [
54
+ { id: 2, v: 'b' },
55
+ { id: 1, v: '1K' },
56
+ ], {
57
+ clone: true,
58
+ comparator: (v1, v2) => v1.id === v2.id,
59
+ updater: (t, s) => {
60
+ t.v = s.v + '_' + t.id;
61
+ return t;
62
+ },
63
+ sorter: (v1, v2) => v1.id - v2.id,
64
+ });
65
+
66
+ expect(res.changed).toBe(3);
67
+ expect(res.result).toStrictEqual([
68
+ { id: 1, v: '1K_1' },
69
+ { id: 2, v: 'b' },
70
+ ]);
71
+ });
72
+ });
73
+ });
@@ -1,9 +1,14 @@
1
+ import { Comparator } from '../types';
2
+
3
+ export namespace Fields {
4
+ export type Getter<T> = (obj: Partial<T>) => T[keyof T];
5
+ export type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
6
+ export type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
7
+ export type Updater<T> = (target: T, source: T) => T;
8
+ }
1
9
 
2
- export type Getter<T> = (obj: Partial<T>) => T[keyof T];
3
- export type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
4
- export type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
5
10
 
6
- export function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged: Comparer<T> = null): boolean {
11
+ export function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged: Fields.Comparer<T> = null): boolean {
7
12
  return updateFieldExtended(target, source, diff, t => t[key], (t, v) => t[key] = v, hasChanged);
8
13
  }
9
14
 
@@ -11,9 +16,9 @@ export function updateFieldExtended<T>(
11
16
  target: T,
12
17
  source: Partial<T>,
13
18
  diff: Partial<T>,
14
- get: Getter<T>,
15
- set: Setter<T>,
16
- hasChanged: Comparer<T> = null,
19
+ get: Fields.Getter<T>,
20
+ set: Fields.Setter<T>,
21
+ hasChanged: Fields.Comparer<T> = null,
17
22
  ): boolean {
18
23
 
19
24
  hasChanged = hasChanged || ((v1: T, v2: T) => (get(v1) !== get(v2)));
@@ -30,32 +35,61 @@ export function updateFieldExtended<T>(
30
35
 
31
36
  }
32
37
 
33
- export function updateArray<T extends string>(current: T[] | null, updated: T[]): { changed: number, result: T[] } {
34
- if (!updated) {
35
- return { changed: 0, result: current };
38
+ const DefaultComparator: Comparator<any> = (v1, v2) => v1 === v2;
39
+ const DefaultUpdater: Fields.Updater<any> = (v1, v2) => Object.assign(v1, v2);
40
+
41
+ export type UpdateArrayOptions<T> = {
42
+ additive?: boolean,
43
+ clone?: boolean,
44
+ comparator?: Comparator<T>,
45
+ updater?: Fields.Updater<T>,
46
+ sorter?: Comparator<T, number> | null | undefined,
47
+ };
48
+
49
+ export function updateArray<T>(
50
+ target: T[] | null,
51
+ source: T[],
52
+ options?: UpdateArrayOptions<T>,
53
+ ): { changed: number, result: T[] } {
54
+ if (!source) {
55
+ return { changed: 0, result: target };
36
56
  }
37
57
 
38
58
  let changed = 0;
39
- const result = current || [];
59
+ const result = Array.isArray(target)
60
+ ? (options?.clone ? target.slice() : target)
61
+ : [];
62
+
63
+ const comparator = options?.comparator || DefaultComparator;
64
+ const updater = options?.updater || DefaultUpdater;
40
65
 
41
66
  // remove all missing elements
42
- for (let i = 0; i < result.length; ++i) {
43
- if (!updated.includes(result[i])) {
44
- result.splice(i, 1);
45
- ++changed;
46
- --i;
67
+ if (!options?.additive) {
68
+ for (let i = 0; i < result.length; ++i) {
69
+ if (source.find(item => comparator(item, result[i])) == null) {
70
+ result.splice(i, 1);
71
+ ++changed;
72
+ --i;
73
+ }
47
74
  }
48
75
  }
49
76
 
50
- // add all new elements
51
- updated.forEach(i => {
52
- if (!result.includes(i)) {
77
+ // add all new elements and update existing
78
+ source.forEach(i => {
79
+ const existingIndex = result.findIndex(item => comparator(i, item));
80
+ const existingItem = result[existingIndex];
81
+ if (existingIndex < 0) {
53
82
  result.push(i);
54
83
  ++changed;
84
+ } else if (typeof existingItem === 'object') {
85
+ result[existingIndex] = updater(existingItem, i);
55
86
  }
56
87
  });
57
88
 
58
- result.sort();
89
+ const sorter = options?.sorter;
90
+ if (sorter !== null) {
91
+ result.sort(sorter || undefined);
92
+ }
59
93
 
60
94
  return {
61
95
  result,
package/src/ident.ts ADDED
@@ -0,0 +1,8 @@
1
+
2
+ export type Ident<T, K extends keyof any = string> = T & {
3
+ id: K;
4
+ };
5
+
6
+ export type IdentAny = Ident<{}>;
7
+
8
+ export default Ident;
@@ -68,3 +68,10 @@ export class Unsubscriber {
68
68
  export function combineDisposers(...items: Disposer[]): Disposer {
69
69
  return () => items.forEach(i => i());
70
70
  }
71
+
72
+ export class Disposable implements IDisposable {
73
+
74
+ protected readonly disposer = new Unsubscriber();
75
+
76
+ public dispose = () => this.disposer.dispose();
77
+ }
@@ -32,6 +32,20 @@ export class FlagModel implements IFlagModel, IFlagModelReadonly {
32
32
 
33
33
  get isDefault() { return this._value === false; }
34
34
 
35
+ @action
36
+ setTrue = () => {
37
+ const v = this.value;
38
+ this.value = true;
39
+ return !v;
40
+ };
41
+
42
+ @action
43
+ setFalse = () => {
44
+ const v = this.value;
45
+ this.value = false;
46
+ return v;
47
+ };
48
+
35
49
  @action
36
50
  toggle = () => {
37
51
  this._value = !this._value;
@@ -61,5 +61,5 @@ export class PromptModalViewModel extends ModalActionModel<PromptModalAction> {
61
61
  get rejectColor() { return this.currentAction.rejectColor; }
62
62
 
63
63
  onConfirm = () => this.runAction(this.currentAction.onConfirm, true, this.currentAction.awaitActions);
64
- onReject = () => this.runAction(this.currentAction.onConfirm, true, this.currentAction.awaitActions);
64
+ onReject = () => this.runAction(this.currentAction.onReject, true, this.currentAction.awaitActions);
65
65
  }
@@ -38,6 +38,14 @@ export abstract class ValidatableModel<T = string> {
38
38
  return this;
39
39
  }
40
40
 
41
+ public async testValidate(value: T) {
42
+ if (this._validator) {
43
+ const res = await this._validator(value);
44
+ return res;
45
+ }
46
+ return null;
47
+ }
48
+
41
49
  async validate() {
42
50
  if (!this._validator) {
43
51
  return true;