@entropic-bond/crud-panel 3.9.0 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- import { Callback, EntropicComponent, Model, Observable, PropChangeEvent, Unsubscriber } from 'entropic-bond';
1
+ import { Callback, ClassPropNames, EntropicComponent, Model, Observable, PropChangeEvent, Unsubscriber } from 'entropic-bond';
2
2
  import { ProgressController, ProgressEvent } from './progress-controller';
3
- type CrudControllerAction = 'saved' | 'deleted' | 'populated' | 'filtered';
3
+ type CrudControllerAction = 'saved' | 'deleted' | 'populated';
4
4
  export interface CrudControllerEvent<T extends EntropicComponent> {
5
5
  documentProps?: PropChangeEvent<T>;
6
6
  documentChanged?: T;
@@ -8,14 +8,20 @@ export interface CrudControllerEvent<T extends EntropicComponent> {
8
8
  action?: CrudControllerAction;
9
9
  /** deprecated */ error?: Error;
10
10
  }
11
+ type ValidatorFunction<V> = (value: V) => boolean;
11
12
  export declare abstract class CrudController<T extends EntropicComponent> {
12
13
  static readonly errorMessages: {
13
14
  missedDocument: string;
14
15
  };
15
16
  constructor(document?: T);
16
- abstract allRequiredPropertiesFilled(): boolean;
17
17
  protected abstract createDocument(): T;
18
18
  protected abstract getModel(): Model<T>;
19
+ allRequiredPropertiesFilled(): boolean;
20
+ get nonFilledRequiredProperties(): ClassPropNames<T>[];
21
+ get requiredProperties(): ClassPropNames<T>[];
22
+ addValidator<P extends ClassPropNames<T>>(prop: P, validatorFn: ValidatorFunction<T[P]>): void;
23
+ removeValidator(prop: ClassPropNames<T>): void;
24
+ private validateProp;
19
25
  protected storeDoc(): Promise<void>;
20
26
  protected deleteDoc(): Promise<void>;
21
27
  protected findDocs(limit?: number): Promise<T[]>;
@@ -25,7 +31,7 @@ export declare abstract class CrudController<T extends EntropicComponent> {
25
31
  * @param filter the filter function
26
32
  * @returns the controller itself
27
33
  */
28
- setFilter(filter: (document: T) => boolean): this;
34
+ setFilter(filter: (document: T) => boolean): Promise<this>;
29
35
  onChange(observer: Callback<CrudControllerEvent<T>>): Unsubscriber;
30
36
  /**
31
37
  * Notifies the observer of any error that occurs during the execution of the controller.
@@ -62,5 +68,6 @@ export declare abstract class CrudController<T extends EntropicComponent> {
62
68
  private _document;
63
69
  private unsubscribeDocument;
64
70
  private _filter;
71
+ private validator;
65
72
  }
66
73
  export {};
@@ -8,8 +8,34 @@ class CrudController {
8
8
  this.progressController = new progress_controller_1.ProgressController();
9
9
  this.onChangeHdl = new entropic_bond_1.Observable();
10
10
  this.onErrorHdl = new entropic_bond_1.Observable();
11
+ this.validator = {};
11
12
  this.setDocument(document || this.createDocument());
12
13
  }
14
+ allRequiredPropertiesFilled() {
15
+ return this.nonFilledRequiredProperties.length <= 0;
16
+ }
17
+ get nonFilledRequiredProperties() {
18
+ return this.requiredProperties.filter(prop => this.validateProp(prop));
19
+ }
20
+ get requiredProperties() {
21
+ if (!this.document)
22
+ throw new Error(CrudController.errorMessages.missedDocument);
23
+ return this.document.getPersistentProperties()
24
+ .filter(prop => prop.required)
25
+ .map(prop => prop.name);
26
+ }
27
+ addValidator(prop, validatorFn) {
28
+ this.validator[prop] = validatorFn;
29
+ }
30
+ removeValidator(prop) {
31
+ delete this.validator[prop];
32
+ }
33
+ validateProp(prop) {
34
+ if (!this.document)
35
+ throw new Error(CrudController.errorMessages.missedDocument);
36
+ const propVal = this.document[prop];
37
+ return this.validator[prop] ? !this.validator[prop](propVal) : !propVal;
38
+ }
13
39
  storeDoc() {
14
40
  if (!this.document)
15
41
  throw new Error(CrudController.errorMessages.missedDocument);
@@ -24,10 +50,7 @@ class CrudController {
24
50
  let query = this.model.find();
25
51
  if (limit)
26
52
  query = query.limit(limit);
27
- const docs = await query.get();
28
- if (!this._filter)
29
- return docs;
30
- return docs.filter(doc => this._filter?.(doc));
53
+ return query.get();
31
54
  }
32
55
  /**
33
56
  * Sets a filter function to filter in memory the documents returned by the `documentCollection` method.
@@ -35,9 +58,9 @@ class CrudController {
35
58
  * @param filter the filter function
36
59
  * @returns the controller itself
37
60
  */
38
- setFilter(filter) {
61
+ async setFilter(filter) {
39
62
  this._filter = filter;
40
- this.onChangeHdl.notify({ action: 'filtered' });
63
+ this.onChangeHdl.notify({ documentCollection: await this.documentCollection() });
41
64
  return this;
42
65
  }
43
66
  onChange(observer) {
@@ -114,7 +137,9 @@ class CrudController {
114
137
  finally {
115
138
  this.progressController.notifyBusy(false, progressStage);
116
139
  }
117
- return found;
140
+ if (!this._filter)
141
+ return found;
142
+ return found.filter(doc => this._filter?.(doc));
118
143
  }
119
144
  onProgress(observer) {
120
145
  return this.progressController.onProgress(observer);
@@ -1 +1 @@
1
- {"version":3,"file":"crud-controller.js","sourceRoot":"","sources":["../src/crud-controller.ts"],"names":[],"mappings":";;;AAAA,iDAA6G;AAC7G,+DAAyE;AAYzE,MAAsB,cAAc;IAKnC,YAAa,QAAY;QAuLf,uBAAkB,GAAuB,IAAI,wCAAkB,EAAE,CAAA;QACjE,gBAAW,GAAuC,IAAI,0BAAU,EAA0B,CAAA;QAC1F,eAAU,GAAsB,IAAI,0BAAU,EAAS,CAAA;QAxLhE,IAAI,CAAC,WAAW,CAAE,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAE,CAAA;IACtD,CAAC;IAMS,QAAQ;QACjB,IAAK,CAAC,IAAI,CAAC,QAAQ;YAAG,MAAM,IAAI,KAAK,CAAE,cAAc,CAAC,aAAa,CAAC,cAAc,CAAE,CAAA;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAE,CAAA;IACxC,CAAC;IAES,SAAS;QAClB,IAAK,CAAC,IAAI,CAAC,QAAQ;YAAG,MAAM,IAAI,KAAK,CAAE,cAAc,CAAC,aAAa,CAAC,cAAc,CAAE,CAAA;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAA;IAC7C,CAAC;IAES,KAAK,CAAC,QAAQ,CAAE,KAAc;QACvC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAE7B,IAAK,KAAK;YAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAE,KAAK,CAAE,CAAA;QAEzC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAA;QAE9B,IAAK,CAAC,IAAI,CAAC,OAAO;YAAG,OAAO,IAAI,CAAA;QAChC,OAAO,IAAI,CAAC,MAAM,CAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAE,GAAG,CAAE,CAAC,CAAA;IAClD,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAE,MAAkC;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,QAAQ,CAAE,QAA0C;QACnD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAE,QAAQ,CAAE,CAAA;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAE,QAAyB;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAE,QAAQ,CAAE,CAAA;IAC7C,CAAC;IAES,YAAY,CAAoC,KAAQ;QACjE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAE,KAAK,CAAE,CAAA;IACjC,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,WAAW,CAAE,IAAI,CAAC,cAAc,EAAE,CAAE,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,aAAa;QAClB,MAAM,aAAa,GAAG,sBAAsB,CAAA;QAE5C,IAAI;YACH,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,IAAI,EAAE,aAAa,CAAE,CAAA;YACzD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;YAErB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvB,kBAAkB,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;gBACnD,MAAM,EAAE,OAAO;aACf,CAAC,CAAA;SACF;QACD,OAAO,KAAK,EAAG;YACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,CAAC,CAAA;YACnD,IAAK,IAAI,CAAC,YAAY;gBAAG,MAAM,KAAK,CAAA;SACpC;gBACO;YACP,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,KAAK,EAAE,aAAa,CAAE,CAAA;SAC1D;IACF,CAAC;IAED,KAAK,CAAC,cAAc;QACnB,MAAM,aAAa,GAAG,sBAAsB,CAAA;QAC5C,IAAI;YACH,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,IAAI,EAAE,aAAa,CAAE,CAAA;YACzD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YAEtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvB,kBAAkB,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;gBACnD,MAAM,EAAE,SAAS;aACjB,CAAC,CAAA;SACF;QACD,OAAO,KAAK,EAAG;YACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,CAAC,CAAA;YACnD,IAAK,IAAI,CAAC,YAAY;gBAAG,MAAM,KAAK,CAAA;SACpC;gBACO;YACP,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,KAAK,EAAE,aAAa,CAAE,CAAA;SAC1D;IACF,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAE,KAAc;QACvC,MAAM,aAAa,GAAG,gCAAgC,CAAA;QAEtD,IAAI;YACH,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,IAAI,EAAE,aAAa,CAAE,CAAA;YACzD,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAE,KAAK,CAAE,CAAA;SACxC;QACD,OAAO,KAAK,EAAG;YACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,CAAC,CAAA;YACnD,IAAK,IAAI,CAAC,YAAY;gBAAG,MAAM,KAAK,CAAA;SACpC;gBACO;YACP,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,KAAK,EAAE,aAAa,CAAE,CAAA;SAC1D;QAED,OAAO,KAAM,CAAA;IACd,CAAC;IAED,UAAU,CAAE,QAAiC;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAE,QAAQ,CAAE,CAAA;IACtD,CAAC;IAED,IAAc,KAAK;QAClB,OAAO,IAAI,CAAC,MAAM,IAAI,CAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAE,CAAA;IACxD,CAAC;IAED,WAAW,CAAE,KAAoB;QAChC,IAAK,IAAI,CAAC,SAAS,KAAK,KAAK,EAAG;YAE/B,IAAK,IAAI,CAAC,mBAAmB;gBAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAE1D,IAAK,KAAK,EAAG;gBACZ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAE,CAAE,CAAA;aAChG;YAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;SAC5D;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,QAAQ,CAAE,KAAoB;QACjC,IAAI,CAAC,WAAW,CAAE,KAAK,CAAE,CAAA;IAC1B,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAED;;;;;;OAMG;IACO,YAAY,CAAE,KAA2B;QAClD,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,EAAE,CAAC,CAAA;QAC/E,IAAI,CAAC,UAAU,CAAC,MAAM,CAAE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,CAAC,CAAA;QACnD,IAAK,IAAI,CAAC,YAAY;YAAG,MAAM,IAAI,CAAC,YAAY,CAAE,KAAK,CAAE,CAAA;IAC1D,CAAC;IAES,YAAY,CAAE,KAAU;QACjC,IAAK,KAAK,YAAY,KAAK;YAAG,OAAO,KAAK,CAAA;QAC1C,IAAK,OAAO,KAAK,KAAK,QAAQ;YAAG,OAAO,IAAI,KAAK,CAAE,KAAK,CAAE,CAAA;QAC1D,IAAK,MAAM,IAAI,KAAK;YAAG,OAAO,IAAI,KAAK,CAAE,KAAK,CAAC,IAAI,CAAE,CAAA;QACrD,IAAK,SAAS,IAAI,KAAK;YAAG,OAAO,IAAI,KAAK,CAAE,KAAK,CAAC,KAAK,CAAE,CAAA;QACzD,OAAO,IAAI,KAAK,CAAE,IAAI,CAAC,SAAS,CAAE,KAAK,CAAE,CAAE,CAAA;IAC5C,CAAC;IAED,IAAc,YAAY;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,KAAK,CAAC,CAAA;IAC9C,CAAC;;AA1LF,wCAmMC;AAlMgB,4BAAa,GAAG;IAC/B,cAAc,EAAE,qBAAqB;CACrC,AAF4B,CAE5B"}
1
+ {"version":3,"file":"crud-controller.js","sourceRoot":"","sources":["../src/crud-controller.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@entropic-bond/crud-panel",
3
- "version": "3.9.0",
3
+ "version": "3.10.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "branches": [
@@ -46,22 +46,22 @@
46
46
  "devDependencies": {
47
47
  "@semantic-release/changelog": "^6.0.3",
48
48
  "@semantic-release/git": "^10.0.1",
49
- "@testing-library/jest-dom": "^5.16.5",
49
+ "@testing-library/jest-dom": "^6.1.3",
50
50
  "@testing-library/react": "^14.0.0",
51
- "@testing-library/user-event": "^14.4.3",
52
- "@types/jest": "^29.5.2",
53
- "@types/react": "^18.2.14",
54
- "@types/react-dom": "^18.2.6",
51
+ "@testing-library/user-event": "^14.5.1",
52
+ "@types/jest": "^29.5.5",
53
+ "@types/react": "^18.2.22",
54
+ "@types/react-dom": "^18.2.7",
55
55
  "fetch-mock": "^9.11.0",
56
56
  "git-branch-is": "^4.0.0",
57
57
  "husky": "^8.0.3",
58
- "jest": "^29.5.0",
59
- "jest-environment-jsdom": "^29.5.0",
58
+ "jest": "^29.7.0",
59
+ "jest-environment-jsdom": "^29.7.0",
60
60
  "react": "^18.2.0",
61
61
  "react-dom": "^18.2.0",
62
- "semantic-release": "^21.0.5",
63
- "ts-jest": "^29.1.0",
64
- "typescript": "^5.1.5"
62
+ "semantic-release": "^22.0.5",
63
+ "ts-jest": "^29.1.1",
64
+ "typescript": "^5.2.2"
65
65
  },
66
66
  "husky": {
67
67
  "hooks": {
@@ -69,6 +69,6 @@
69
69
  }
70
70
  },
71
71
  "dependencies": {
72
- "entropic-bond": "^1.44.7"
72
+ "entropic-bond": "^1.46.1"
73
73
  }
74
74
  }
@@ -1,14 +0,0 @@
1
- import { EntropicComponent, Model } from 'entropic-bond';
2
- import { CrudController } from './crud-controller';
3
- export declare class Test extends EntropicComponent {
4
- set testProp(value: string | undefined);
5
- get testProp(): string | undefined;
6
- private _testProp;
7
- }
8
- export declare class TestController extends CrudController<Test> {
9
- createDocument(): Test;
10
- protected getModel(): Model<Test>;
11
- allRequiredPropertiesFilled(): boolean;
12
- notifyNewEvent(): void;
13
- callManagedThrow(): void;
14
- }
@@ -1,168 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.TestController = exports.Test = void 0;
10
- const entropic_bond_1 = require("entropic-bond");
11
- const crud_controller_1 = require("./crud-controller");
12
- const mockData = {
13
- Test: {
14
- test1: {
15
- __className: 'Test',
16
- id: 'test1',
17
- testProp: 'Test prop 1'
18
- },
19
- test2: {
20
- __className: 'Test',
21
- id: 'test2',
22
- testProp: 'Test prop 2'
23
- }
24
- }
25
- };
26
- let Test = exports.Test = class Test extends entropic_bond_1.EntropicComponent {
27
- set testProp(value) {
28
- this.changeProp('testProp', value);
29
- }
30
- get testProp() {
31
- return this._testProp;
32
- }
33
- };
34
- __decorate([
35
- entropic_bond_1.persistent
36
- ], Test.prototype, "_testProp", void 0);
37
- exports.Test = Test = __decorate([
38
- (0, entropic_bond_1.registerPersistentClass)('Test')
39
- ], Test);
40
- class TestController extends crud_controller_1.CrudController {
41
- createDocument() {
42
- return new Test();
43
- }
44
- getModel() {
45
- return entropic_bond_1.Store.getModel('Test');
46
- }
47
- allRequiredPropertiesFilled() {
48
- return true;
49
- }
50
- notifyNewEvent() {
51
- this.notifyChange({
52
- newEvent: 'new event fired'
53
- });
54
- }
55
- callManagedThrow() {
56
- this.managedThrow(new Error('test error'));
57
- }
58
- }
59
- exports.TestController = TestController;
60
- describe('Crud Controller', () => {
61
- let controller;
62
- let datasource;
63
- let onProgress;
64
- beforeEach(() => {
65
- datasource = new entropic_bond_1.JsonDataSource(JSON.parse(JSON.stringify(mockData)));
66
- entropic_bond_1.Store.useDataSource(datasource);
67
- controller = new TestController();
68
- onProgress = jest.fn();
69
- controller.onProgress(onProgress);
70
- });
71
- describe('Long operations', () => {
72
- beforeEach(() => {
73
- datasource.simulateDelay(50);
74
- });
75
- it('should notify busy on delete', async () => {
76
- const promise = controller.deleteDocument();
77
- expect(onProgress).toHaveBeenLastCalledWith(expect.objectContaining({ busy: true }));
78
- await promise;
79
- expect(onProgress).toHaveBeenLastCalledWith(expect.objectContaining({ busy: false }));
80
- });
81
- it('should notify busy on store', async () => {
82
- const promise = controller.storeDocument();
83
- expect(onProgress).toHaveBeenLastCalledWith(expect.objectContaining({ busy: true }));
84
- await promise;
85
- expect(onProgress).toHaveBeenLastCalledWith(expect.objectContaining({ busy: false }));
86
- });
87
- });
88
- it('should notify new event', () => {
89
- const spy = jest.fn();
90
- controller.onChange(spy);
91
- controller.notifyNewEvent();
92
- expect(spy).toHaveBeenCalledWith({ newEvent: 'new event fired' });
93
- });
94
- it('should not throw setting an undefined document', () => {
95
- expect(() => {
96
- controller.setDocument(undefined);
97
- }).not.toThrow();
98
- });
99
- it('should notify on filter set', () => {
100
- const spy = jest.fn();
101
- controller.onChange(spy);
102
- controller.setFilter(() => true);
103
- expect(spy).toHaveBeenCalledWith({ action: 'filtered' });
104
- });
105
- it('should return a filtered collection', async () => {
106
- const collection = await controller.documentCollection();
107
- expect(collection.length).toBe(2);
108
- controller.setFilter(doc => doc.id === 'test1');
109
- const filteredCollection = await controller.documentCollection();
110
- expect(filteredCollection.length).toBe(1);
111
- });
112
- describe('Error handling', () => {
113
- beforeEach(() => {
114
- datasource.simulateError({
115
- store: 'store test error',
116
- delete: 'delete test error',
117
- find: 'find test error',
118
- findById: 'findById test error',
119
- });
120
- controller.setDocument(new Test());
121
- });
122
- afterEach(() => datasource.simulateError(undefined));
123
- describe('without observable', () => {
124
- beforeEach(() => controller.setDocument(new Test()));
125
- it('should throw on managedThrow', () => {
126
- expect(() => {
127
- controller.callManagedThrow();
128
- }).toThrow('test error');
129
- });
130
- it('should reject of an error on deleteDocument', async () => {
131
- expect(controller.deleteDocument()).rejects.toThrow('delete test error');
132
- });
133
- it('should reject of an error on storeDocument', async () => {
134
- expect(controller.storeDocument()).rejects.toThrow('store test error');
135
- });
136
- it('should reject of an error on documentCollection', async () => {
137
- expect(controller.documentCollection()).rejects.toThrow('find test error');
138
- });
139
- });
140
- describe('with observable', () => {
141
- it('should notify of an error on managedThrow', () => {
142
- const spy = jest.fn();
143
- controller.onError(spy);
144
- controller.callManagedThrow();
145
- expect(spy).toHaveBeenCalledWith(Error('test error'));
146
- });
147
- it('should notify of an error on deleteDocument', async () => {
148
- const spy = jest.fn();
149
- controller.onError(spy);
150
- await controller.deleteDocument();
151
- expect(spy).toHaveBeenCalledWith(Error('delete test error'));
152
- });
153
- it('should notify of an error on storeDocument', async () => {
154
- const spy = jest.fn();
155
- controller.onError(spy);
156
- await controller.storeDocument();
157
- expect(spy).toHaveBeenCalledWith(Error('store test error'));
158
- });
159
- it('should notify of an error on documentCollection', async () => {
160
- const spy = jest.fn();
161
- controller.onError(spy);
162
- await controller.documentCollection();
163
- expect(spy).toHaveBeenCalledWith(Error('find test error'));
164
- });
165
- });
166
- });
167
- });
168
- //# sourceMappingURL=crud-controller.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crud-controller.spec.js","sourceRoot":"","sources":["../src/crud-controller.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,262 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
30
- const react_2 = require("@testing-library/react");
31
- const user_event_1 = __importDefault(require("@testing-library/user-event"));
32
- const entropic_bond_1 = require("entropic-bond");
33
- const crud_panel_1 = require("./crud-panel");
34
- const crud_controller_spec_1 = require("./crud-controller.spec");
35
- const crudLabels = {
36
- addNewDocumentLabel: 'Add new document',
37
- addButtonLabel: 'Add',
38
- updateButtonLabel: 'Update',
39
- documentsInCollectionCaption: 'Existing documents',
40
- singularDocumentInCollectionCaption: 'Existing document',
41
- noDocumentsFoundLabel: 'No documents found',
42
- };
43
- const testViewPlaceholder = 'Test View Placeholder';
44
- const editButtonLabel = 'Edit';
45
- const deleteButtonLabel = 'Delete';
46
- const cancelButtonCaption = 'Cancel';
47
- const viewHeader = 'View header';
48
- const mockData = {
49
- Test: {
50
- test1: {
51
- __className: 'Test',
52
- id: 'test1',
53
- testProp: 'Test prop 1'
54
- },
55
- test2: {
56
- __className: 'Test',
57
- id: 'test2',
58
- testProp: 'Test prop 2'
59
- }
60
- }
61
- };
62
- class TestView extends react_1.Component {
63
- componentDidMount() {
64
- const { controller } = this.props;
65
- controller?.onChange(e => {
66
- if (e.documentProps)
67
- this.setState(e.documentProps);
68
- });
69
- }
70
- render() {
71
- const { controller, onCancel, onSubmit, submitButtonCaption } = this.props;
72
- const { document } = controller;
73
- if (!document)
74
- return react_1.default.createElement(react_1.default.Fragment, null);
75
- return (react_1.default.createElement("div", null,
76
- react_1.default.createElement("h1", null, viewHeader),
77
- react_1.default.createElement("input", { placeholder: testViewPlaceholder, value: document.testProp || '', onChange: e => document.testProp = e.target.value }),
78
- react_1.default.createElement("button", { onClick: () => onSubmit?.(document) }, submitButtonCaption),
79
- react_1.default.createElement("button", { onClick: onCancel }, cancelButtonCaption)));
80
- }
81
- }
82
- class TestCard extends react_1.Component {
83
- render() {
84
- const { document, onDelete, onSelect } = this.props;
85
- if (!document)
86
- return react_1.default.createElement(react_1.default.Fragment, null);
87
- return (react_1.default.createElement("div", null,
88
- react_1.default.createElement("p", null, document?.testProp),
89
- react_1.default.createElement("button", { onClick: () => onSelect?.(document) }, editButtonLabel),
90
- react_1.default.createElement("button", { onClick: () => onDelete?.(document) }, deleteButtonLabel)));
91
- }
92
- }
93
- describe('Crud Panel', () => {
94
- let controller;
95
- let notifySpy;
96
- let renderResult;
97
- let datasource;
98
- beforeEach(async () => {
99
- datasource = new entropic_bond_1.JsonDataSource(JSON.parse(JSON.stringify(mockData)));
100
- entropic_bond_1.Store.useDataSource(datasource);
101
- controller = new crud_controller_spec_1.TestController();
102
- notifySpy = jest.fn();
103
- controller.onChange(notifySpy);
104
- renderResult = (0, react_2.render)(react_1.default.createElement(crud_panel_1.CrudPanel, { controller: controller, labels: crudLabels },
105
- react_1.default.createElement(TestView, null),
106
- react_1.default.createElement(TestCard, null)));
107
- // await datasource.wait()
108
- await react_2.screen.findByRole('heading');
109
- });
110
- it('should show add button', () => {
111
- expect(react_2.screen.getByRole('button', { name: crudLabels.addNewDocumentLabel })).toBeInTheDocument();
112
- });
113
- it('should show existing documents', () => {
114
- const docs = react_2.screen.getByRole('heading', { name: crudLabels.documentsInCollectionCaption }).nextElementSibling;
115
- expect((0, react_2.within)(docs).getByText('Test prop 1')).toBeInTheDocument();
116
- expect((0, react_2.within)(docs).getByText('Test prop 2')).toBeInTheDocument();
117
- expect(docs.children.length).toBe(2);
118
- });
119
- describe('Accepts children as functions', () => {
120
- beforeEach(() => {
121
- user_event_1.default.setup();
122
- renderResult.rerender(react_1.default.createElement(crud_panel_1.CrudPanel, { controller: controller, labels: crudLabels },
123
- props => react_1.default.createElement(TestView, { ...props }),
124
- props => react_1.default.createElement(TestCard, { ...props })));
125
- });
126
- it('should show add button', () => {
127
- expect(react_2.screen.getByRole('button', { name: crudLabels.addNewDocumentLabel })).toBeInTheDocument();
128
- });
129
- it('should show existing documents', () => {
130
- const docs = react_2.screen.getByRole('heading', { name: crudLabels.documentsInCollectionCaption }).nextElementSibling;
131
- expect((0, react_2.within)(docs).getByText('Test prop 1')).toBeInTheDocument();
132
- expect((0, react_2.within)(docs).getByText('Test prop 2')).toBeInTheDocument();
133
- expect(docs.children.length).toBe(2);
134
- expect(react_2.screen.getAllByRole('button', { name: editButtonLabel })[0]).toBeInTheDocument();
135
- expect(react_2.screen.getAllByRole('button', { name: deleteButtonLabel })[0]).toBeInTheDocument();
136
- });
137
- });
138
- describe('Working with TestView', () => {
139
- it('should create an empty document view on add new document button click', async () => {
140
- await user_event_1.default.click(react_2.screen.getByRole('button', { name: crudLabels.addNewDocumentLabel }));
141
- expect(react_2.screen.getByRole('heading', { name: viewHeader })).toBeInTheDocument();
142
- expect(react_2.screen.getByPlaceholderText(testViewPlaceholder)).toHaveDisplayValue('');
143
- });
144
- it('should show detail view with document data on edit button click', async () => {
145
- const testDoc = mockData.Test.test1;
146
- const editButton = react_2.screen.getAllByRole('button', { name: editButtonLabel });
147
- await user_event_1.default.click(editButton[0]);
148
- expect(react_2.screen.getByRole('heading', { name: viewHeader })).toBeInTheDocument();
149
- expect(react_2.screen.getByDisplayValue(testDoc.testProp)).toBeInTheDocument();
150
- });
151
- it('should refresh document list on new document added', async () => {
152
- await user_event_1.default.click(react_2.screen.getByRole('button', { name: crudLabels.addNewDocumentLabel }));
153
- const input = await react_2.screen.findByPlaceholderText(testViewPlaceholder);
154
- await user_event_1.default.type(input, 'New and fancy Application');
155
- await user_event_1.default.click(react_2.screen.getByRole('button', { name: crudLabels.addButtonLabel }));
156
- const docs = react_2.screen.getByRole('heading', { name: crudLabels.documentsInCollectionCaption }).nextElementSibling;
157
- expect(await (0, react_2.within)(docs).findByText('New and fancy Application')).toBeInTheDocument();
158
- });
159
- });
160
- describe('Working with detail card buttons', () => {
161
- it('should refresh document list on document edited', async () => {
162
- const editButton = react_2.screen.getAllByRole('button', { name: editButtonLabel });
163
- await user_event_1.default.click(editButton[0]);
164
- const input = await react_2.screen.findByPlaceholderText(testViewPlaceholder);
165
- await user_event_1.default.click(input);
166
- await user_event_1.default.paste(' Edited');
167
- await user_event_1.default.click(react_2.screen.getByRole('button', { name: crudLabels.updateButtonLabel }));
168
- await (0, react_2.waitFor)(() => expect(notifySpy).toHaveBeenCalled());
169
- const docs = react_2.screen.getByRole('heading', { name: crudLabels.documentsInCollectionCaption }).nextElementSibling;
170
- expect(await (0, react_2.within)(docs).findByText('Test prop 1 Edited')).toBeInTheDocument();
171
- });
172
- it('should delete document and remove from the list', async () => {
173
- expect(react_2.screen.queryByText('Test prop 2')).toBeInTheDocument();
174
- const deleteButton = react_2.screen.getAllByRole('button', { name: deleteButtonLabel });
175
- await user_event_1.default.click(deleteButton[1]);
176
- await (0, react_2.waitFor)(() => expect(notifySpy).toHaveBeenCalled());
177
- await (0, react_2.waitFor)(() => expect(react_2.screen.queryByText('Test prop 2')).not.toBeInTheDocument());
178
- });
179
- });
180
- describe('Layout behaviour', () => {
181
- const itemsView = () => react_2.screen.queryByRole('heading', { name: crudLabels.documentsInCollectionCaption });
182
- const formView = () => react_2.screen.queryByRole('heading', { name: viewHeader });
183
- const addButton = () => react_2.screen.getByRole('button', { name: crudLabels.addNewDocumentLabel });
184
- const renderWith = async (layout) => {
185
- renderResult.rerender(react_1.default.createElement(crud_panel_1.CrudPanel, { controller: controller, labels: crudLabels, layout: layout },
186
- react_1.default.createElement(TestView, null),
187
- (props) => (react_1.default.createElement("div", null,
188
- react_1.default.createElement("p", null, props.document.testProp),
189
- react_1.default.createElement("button", { onClick: () => props.onSelect(props.document) }, editButtonLabel),
190
- react_1.default.createElement("button", { onClick: () => props.onDelete(props.document) }, deleteButtonLabel)))));
191
- };
192
- it('should show always collection items when default layout', async () => {
193
- expect(itemsView()).toBeInTheDocument();
194
- expect(formView()).not.toBeInTheDocument();
195
- await user_event_1.default.click(addButton());
196
- expect(itemsView()).toBeInTheDocument();
197
- expect(formView()).toBeInTheDocument();
198
- });
199
- it('should show always collection items when layout set to itemsAlways', async () => {
200
- renderWith('itemsAlways');
201
- expect(itemsView()).toBeInTheDocument();
202
- expect(formView()).not.toBeInTheDocument();
203
- await user_event_1.default.click(addButton());
204
- expect(itemsView()).toBeInTheDocument();
205
- expect(formView()).toBeInTheDocument();
206
- });
207
- it('should show always form view and items view when layout set to formAndItems', () => {
208
- renderWith('formAndItems');
209
- expect(itemsView()).toBeInTheDocument();
210
- expect(formView()).toBeInTheDocument();
211
- });
212
- it('should alternate from form view to items view but not both when layout set to formOrItems', async () => {
213
- renderWith('formOrItems');
214
- expect(itemsView()).toBeInTheDocument();
215
- expect(formView()).not.toBeInTheDocument();
216
- await user_event_1.default.click(addButton());
217
- expect(itemsView()).not.toBeInTheDocument();
218
- expect(formView()).toBeInTheDocument();
219
- });
220
- });
221
- describe('Labels', () => {
222
- it('should show singular when only one existing document', async () => {
223
- expect(react_2.screen.queryByText('Test prop 2')).toBeInTheDocument();
224
- const deleteButton = react_2.screen.getAllByRole('button', { name: deleteButtonLabel });
225
- await user_event_1.default.click(deleteButton[1]);
226
- await (0, react_2.waitFor)(() => expect(notifySpy).toHaveBeenCalled());
227
- const heading = await react_2.screen.findByRole('heading', { name: crudLabels.singularDocumentInCollectionCaption });
228
- expect(heading).toBeInTheDocument();
229
- });
230
- it('should show plural when only one existing document but empty singular caption', async () => {
231
- crudLabels.singularDocumentInCollectionCaption = undefined;
232
- expect(react_2.screen.queryByText('Test prop 2')).toBeInTheDocument();
233
- const deleteButton = react_2.screen.getAllByRole('button', { name: deleteButtonLabel });
234
- user_event_1.default.click(deleteButton[1]);
235
- await (0, react_2.waitFor)(() => expect(notifySpy).toHaveBeenCalled());
236
- const heading = react_2.screen.getByRole('heading', { name: crudLabels.documentsInCollectionCaption });
237
- expect(heading).toBeInTheDocument();
238
- });
239
- it('should allow to pass labels as a function', async () => {
240
- const labels = (controller) => Object.entries(crudLabels)
241
- .reduce((prev, [key, label]) => {
242
- prev[key] = `${label} ${controller.document?.className}`;
243
- return prev;
244
- }, {});
245
- renderResult.rerender(react_1.default.createElement(crud_panel_1.CrudPanel, { controller: controller, labels: labels },
246
- react_1.default.createElement(TestView, null),
247
- (props) => (react_1.default.createElement("div", null,
248
- react_1.default.createElement("p", null, props.document.testProp),
249
- react_1.default.createElement("button", { onClick: () => props.onSelect(props.document) }, editButtonLabel),
250
- react_1.default.createElement("button", { onClick: () => props.onDelete(props.document) }, deleteButtonLabel)))));
251
- const documentClassName = controller.createDocument().className;
252
- expect(react_2.screen.getByText(`${crudLabels.addNewDocumentLabel} ${documentClassName}`)).toBeInTheDocument();
253
- expect(react_2.screen.getByText(`${crudLabels.documentsInCollectionCaption} ${documentClassName}`)).toBeInTheDocument();
254
- });
255
- it('should not throw on undefined labels', () => {
256
- expect(() => renderResult.rerender(react_1.default.createElement(crud_panel_1.CrudPanel, { controller: controller, labels: undefined },
257
- react_1.default.createElement(TestView, null),
258
- react_1.default.createElement(TestCard, null)))).not.toThrow();
259
- });
260
- });
261
- });
262
- //# sourceMappingURL=crud-panel.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crud-panel.spec.js","sourceRoot":"","sources":["../src/crud-panel.spec.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,139 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const progress_controller_1 = require("./progress-controller");
4
- describe('Progress Controller', () => {
5
- let observer;
6
- let controller;
7
- beforeEach(() => {
8
- observer = jest.fn();
9
- controller = new progress_controller_1.ProgressController();
10
- controller.onProgress(observer);
11
- });
12
- describe('Single stage', () => {
13
- it('should notify on push stage', () => {
14
- const stage = { name: 'test stage', progress: 0, total: 1 };
15
- controller.pushStage(stage);
16
- expect(observer).toHaveBeenCalledWith({
17
- busy: true,
18
- overallProgress: 0,
19
- stages: { 'test stage': stage }
20
- });
21
- });
22
- it('should advance progress', () => {
23
- const stage = { name: 'test stage', progress: 0, total: 1 };
24
- controller.pushStage(stage);
25
- stage.progress = 0.5;
26
- controller.pushStage(stage);
27
- expect(observer).toHaveBeenLastCalledWith({
28
- busy: true,
29
- overallProgress: 0.5,
30
- stages: { 'test stage': stage }
31
- });
32
- });
33
- it('should notify not busy on completion', () => {
34
- const stage = { name: 'test stage', progress: 0, total: 1 };
35
- controller.pushStage(stage);
36
- stage.progress = 0.5;
37
- controller.pushStage(stage);
38
- stage.progress = 1;
39
- controller.pushStage(stage);
40
- expect(observer).toHaveBeenLastCalledWith({
41
- busy: false,
42
- overallProgress: 1,
43
- stages: { 'test stage': stage }
44
- });
45
- });
46
- it('should notify only new stages after completion', () => {
47
- const stage = { name: 'test stage', progress: 1, total: 1 };
48
- controller.pushStage(stage);
49
- expect(observer).toHaveBeenLastCalledWith(expect.objectContaining({ busy: false }));
50
- controller.pushStage({ name: 'new operation stage', progress: 0, total: 1 });
51
- expect(observer).toHaveBeenLastCalledWith({
52
- busy: true,
53
- overallProgress: 0,
54
- stages: { 'new operation stage': expect.anything() }
55
- });
56
- });
57
- it('should accept ratios different from 1', () => {
58
- const stage = { name: 'test stage', progress: 30, total: 100 };
59
- controller.pushStage(stage);
60
- expect(observer).toHaveBeenCalledWith({
61
- busy: true,
62
- overallProgress: 0.3,
63
- stages: { 'test stage': stage }
64
- });
65
- });
66
- });
67
- describe('Multiple stages', () => {
68
- it('should accumulate subsequent pushed stages', () => {
69
- const stage1 = { name: 'test stage1', progress: 0, total: 1 };
70
- const stage2 = { name: 'test stage2', progress: 0, total: 1 };
71
- controller.pushStage(stage1);
72
- expect(observer).toHaveBeenLastCalledWith({
73
- busy: true,
74
- overallProgress: 0,
75
- stages: { 'test stage1': stage1 }
76
- });
77
- controller.pushStage(stage2);
78
- expect(observer).toHaveBeenLastCalledWith({
79
- busy: true,
80
- overallProgress: 0,
81
- stages: {
82
- 'test stage1': stage1,
83
- 'test stage2': stage2
84
- }
85
- });
86
- });
87
- it('should calculate overall progress from multiple stages', () => {
88
- const stage1 = { name: 'test stage1', progress: 0.1, total: 1 };
89
- const stage2 = { name: 'test stage2', progress: 0.5, total: 1 };
90
- controller.pushStage(stage1);
91
- controller.pushStage(stage2);
92
- expect(observer).toHaveBeenLastCalledWith({
93
- busy: true,
94
- overallProgress: 0.3,
95
- stages: expect.anything()
96
- });
97
- });
98
- it('should calculate overall progress from multiple stages with some stages finished', () => {
99
- const stage1 = { name: 'test stage1', progress: 0.1, total: 1 };
100
- const stage2 = { name: 'test stage2', progress: 0.5, total: 1 };
101
- controller.pushStage(stage1);
102
- controller.pushStage(stage2);
103
- stage1.progress = 1;
104
- controller.pushStage(stage1);
105
- expect(observer).toHaveBeenLastCalledWith({
106
- busy: true,
107
- overallProgress: 0.75,
108
- stages: expect.anything()
109
- });
110
- });
111
- it('should notify not busy when all stages finished', () => {
112
- const stage1 = { name: 'test stage1', progress: 0.1, total: 1 };
113
- const stage2 = { name: 'test stage2', progress: 0.5, total: 1 };
114
- controller.pushStage(stage1);
115
- controller.pushStage(stage2);
116
- stage1.progress = 1;
117
- controller.pushStage(stage1);
118
- stage2.progress = 1;
119
- controller.pushStage(stage2);
120
- expect(observer).toHaveBeenLastCalledWith({
121
- busy: false,
122
- overallProgress: 1,
123
- stages: expect.anything()
124
- });
125
- });
126
- it('should accept progress with different ratios', () => {
127
- const stage1 = { name: 'test stage1', progress: 0.1, total: 1 };
128
- const stage2 = { name: 'test stage2', progress: 50, total: 100 };
129
- controller.pushStage(stage1);
130
- controller.pushStage(stage2);
131
- expect(observer).toHaveBeenLastCalledWith({
132
- busy: true,
133
- overallProgress: 0.3,
134
- stages: expect.anything()
135
- });
136
- });
137
- });
138
- });
139
- //# sourceMappingURL=progress-controller.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress-controller.spec.js","sourceRoot":"","sources":["../src/progress-controller.spec.ts"],"names":[],"mappings":"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"}