ngx-techlify-core 18.73.0 → 18.74.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.
- package/esm2022/lib/base-model/index.mjs +2 -2
- package/esm2022/lib/base-model/techlify-list/contract/techlify-list.contract.mjs +69 -0
- package/esm2022/lib/base-model/techlify-list/techlify-list.component.mjs +14 -20
- package/esm2022/lib/entity-files/entity-files-view-all.component.mjs +3 -3
- package/esm2022/lib/file-dropper/file-dropper.component.mjs +3 -1
- package/fesm2022/ngx-techlify-core.mjs +21 -37
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/base-model/index.d.ts +1 -1
- package/lib/base-model/techlify-list/{techlify-list.contract.spec.d.ts → contract/techlify-list.contract.d.ts} +1 -2
- package/package.json +1 -1
- package/esm2022/lib/base-model/techlify-list/techlify-list.contract.spec.mjs +0 -85
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ComponentFixture } from '@angular/core/testing';
|
|
2
|
-
import { TechlifyListComponent } from '
|
|
3
|
-
import 'jasmine';
|
|
2
|
+
import { TechlifyListComponent } from '../techlify-list.component';
|
|
4
3
|
export interface TechlifyListContractOptions {
|
|
5
4
|
getFixture: () => ComponentFixture<any>;
|
|
6
5
|
getComponent: () => TechlifyListComponent;
|
package/package.json
CHANGED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { fakeAsync, tick } from '@angular/core/testing';
|
|
2
|
-
import { By } from '@angular/platform-browser';
|
|
3
|
-
import 'jasmine';
|
|
4
|
-
export function techlifyListContract(options) {
|
|
5
|
-
fdescribe('TechlifyListComponent Contract', () => {
|
|
6
|
-
it('should pass a service to the base class', () => {
|
|
7
|
-
const component = options.getComponent();
|
|
8
|
-
expect(component.service).toBe(options.getService());
|
|
9
|
-
});
|
|
10
|
-
it('should have a filter form', () => {
|
|
11
|
-
const component = options.getComponent();
|
|
12
|
-
expect(component.filterForm).toBeTruthy();
|
|
13
|
-
});
|
|
14
|
-
it('should call loadData on init', () => {
|
|
15
|
-
const component = options.getComponent();
|
|
16
|
-
spyOn(component, 'loadData');
|
|
17
|
-
component.ngOnInit();
|
|
18
|
-
expect(component.loadData).toHaveBeenCalled();
|
|
19
|
-
});
|
|
20
|
-
it('should patch filters from route on init', () => {
|
|
21
|
-
const component = options.getComponent();
|
|
22
|
-
spyOn(component, 'patchFiltersFromRoute');
|
|
23
|
-
component.ngOnInit();
|
|
24
|
-
expect(component.patchFiltersFromRoute).toHaveBeenCalled();
|
|
25
|
-
});
|
|
26
|
-
it('should reload when filter changes', fakeAsync(() => {
|
|
27
|
-
const component = options.getComponent();
|
|
28
|
-
const filterField = options.filterField ?? 'search';
|
|
29
|
-
if (!component.filterForm?.contains(filterField)) {
|
|
30
|
-
pending(`Filter '${filterField}' does not exist.`);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
spyOn(component, 'reload');
|
|
34
|
-
component.listenFilterChanges();
|
|
35
|
-
component.filterForm.get(filterField)?.setValue('abc');
|
|
36
|
-
tick(501);
|
|
37
|
-
expect(component.reload).toHaveBeenCalled();
|
|
38
|
-
}));
|
|
39
|
-
it('should show progress bar while loading', () => {
|
|
40
|
-
const component = options.getComponent();
|
|
41
|
-
const fixture = options.getFixture();
|
|
42
|
-
component.isWorking = true;
|
|
43
|
-
fixture.detectChanges();
|
|
44
|
-
expect(fixture.debugElement.query(By.css('mat-progress-bar'))).toBeTruthy();
|
|
45
|
-
});
|
|
46
|
-
it('should hide progress bar when not loading', () => {
|
|
47
|
-
const component = options.getComponent();
|
|
48
|
-
const fixture = options.getFixture();
|
|
49
|
-
component.isWorking = false;
|
|
50
|
-
fixture.detectChanges();
|
|
51
|
-
expect(fixture.debugElement.query(By.css('mat-progress-bar'))).toBeFalsy();
|
|
52
|
-
});
|
|
53
|
-
it('should load next page on scroll', () => {
|
|
54
|
-
const component = options.getComponent();
|
|
55
|
-
component.page = 1;
|
|
56
|
-
component.lastPage = 3;
|
|
57
|
-
component.isWorking = false;
|
|
58
|
-
spyOn(component, 'loadData');
|
|
59
|
-
component.onScroll();
|
|
60
|
-
expect(component.page).toBe(2);
|
|
61
|
-
expect(component.loadData).toHaveBeenCalled();
|
|
62
|
-
});
|
|
63
|
-
it('should not load next page while already loading', () => {
|
|
64
|
-
const component = options.getComponent();
|
|
65
|
-
component.page = 1;
|
|
66
|
-
component.lastPage = 3;
|
|
67
|
-
component.isWorking = true;
|
|
68
|
-
spyOn(component, 'loadData');
|
|
69
|
-
component.onScroll();
|
|
70
|
-
expect(component.loadData).not.toHaveBeenCalled();
|
|
71
|
-
});
|
|
72
|
-
it('should update sort_by filter', () => {
|
|
73
|
-
const component = options.getComponent();
|
|
74
|
-
const control = component.filterForm.get('sort_by');
|
|
75
|
-
if (!control) {
|
|
76
|
-
pending('No sort_by control.');
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
spyOn(control, 'setValue');
|
|
80
|
-
component.sortColumn({ active: 'name', direction: 'asc' });
|
|
81
|
-
expect(control.setValue).toHaveBeenCalledWith('name|ASC');
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktbGlzdC5jb250cmFjdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9iYXNlLW1vZGVsL3RlY2hsaWZ5LWxpc3QvdGVjaGxpZnktbGlzdC5jb250cmFjdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFvQixNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvQyxPQUFPLFNBQVMsQ0FBQztBQVNqQixNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLE9BQW9DO0lBRXBDLFNBQVMsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7UUFDN0MsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFFLFNBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtZQUNqQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7WUFDcEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxTQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ25DLFNBQWlCLENBQUMsUUFBUSxF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QUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBRVAsQ0FBQyxDQUFDLENBQUM7QUFFUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmFrZUFzeW5jLCB0aWNrLCBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUZWNobGlmeUxpc3RDb21wb25lbnQgfSBmcm9tICcuL3RlY2hsaWZ5LWxpc3QuY29tcG9uZW50JztcbmltcG9ydCAnamFzbWluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVjaGxpZnlMaXN0Q29udHJhY3RPcHRpb25zIHtcbiAgICBnZXRGaXh0dXJlOiAoKSA9PiBDb21wb25lbnRGaXh0dXJlPGFueT47XG4gICAgZ2V0Q29tcG9uZW50OiAoKSA9PiBUZWNobGlmeUxpc3RDb21wb25lbnQ7XG4gICAgZ2V0U2VydmljZTogKCkgPT4gYW55O1xuICAgIGZpbHRlckZpZWxkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVjaGxpZnlMaXN0Q29udHJhY3QoXG4gICAgb3B0aW9uczogVGVjaGxpZnlMaXN0Q29udHJhY3RPcHRpb25zXG4pOiB2b2lkIHtcbiAgICBmZGVzY3JpYmUoJ1RlY2hsaWZ5TGlzdENvbXBvbmVudCBDb250cmFjdCcsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIGEgc2VydmljZSB0byB0aGUgYmFzZSBjbGFzcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG9wdGlvbnMuZ2V0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICBleHBlY3QoKGNvbXBvbmVudCBhcyBhbnkpLnNlcnZpY2UpLnRvQmUob3B0aW9ucy5nZXRTZXJ2aWNlKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYSBmaWx0ZXIgZm9ybScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG9wdGlvbnMuZ2V0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICBleHBlY3QoY29tcG9uZW50LmZpbHRlckZvcm0pLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjYWxsIGxvYWREYXRhIG9uIGluaXQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBvcHRpb25zLmdldENvbXBvbmVudCgpO1xuICAgICAgICAgICAgc3B5T24oY29tcG9uZW50IGFzIGFueSwgJ2xvYWREYXRhJyk7XG4gICAgICAgICAgICAoY29tcG9uZW50IGFzIGFueSkubmdPbkluaXQoKTtcbiAgICAgICAgICAgIGV4cGVjdChjb21wb25lbnQubG9hZERhdGEpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBwYXRjaCBmaWx0ZXJzIGZyb20gcm91dGUgb24gaW5pdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG9wdGlvbnMuZ2V0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICBzcHlPbihjb21wb25lbnQgYXMgYW55LCAncGF0Y2hGaWx0ZXJzRnJvbVJvdXRlJyk7XG4gICAgICAgICAgICAoY29tcG9uZW50IGFzIGFueSkubmdPbkluaXQoKTtcbiAgICAgICAgICAgIGV4cGVjdChjb21wb25lbnQucGF0Y2hGaWx0ZXJzRnJvbVJvdXRlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVsb2FkIHdoZW4gZmlsdGVyIGNoYW5nZXMnLCBmYWtlQXN5bmMoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gb3B0aW9ucy5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckZpZWxkID0gb3B0aW9ucy5maWx0ZXJGaWVsZCA/PyAnc2VhcmNoJztcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50LmZpbHRlckZvcm0/LmNvbnRhaW5zKGZpbHRlckZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHBlbmRpbmcoYEZpbHRlciAnJHtmaWx0ZXJGaWVsZH0nIGRvZXMgbm90IGV4aXN0LmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNweU9uKGNvbXBvbmVudCBhcyBhbnksICdyZWxvYWQnKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5saXN0ZW5GaWx0ZXJDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb21wb25lbnQuZmlsdGVyRm9ybS5nZXQoZmlsdGVyRmllbGQpPy5zZXRWYWx1ZSgnYWJjJyk7XG4gICAgICAgICAgICB0aWNrKDUwMSk7XG4gICAgICAgICAgICBleHBlY3QoY29tcG9uZW50LnJlbG9hZCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHNob3cgcHJvZ3Jlc3MgYmFyIHdoaWxlIGxvYWRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBvcHRpb25zLmdldENvbXBvbmVudCgpO1xuICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IG9wdGlvbnMuZ2V0Rml4dHVyZSgpO1xuICAgICAgICAgICAgY29tcG9uZW50LmlzV29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICBmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChmaXh0dXJlLmRlYnVnRWxlbWVudC5xdWVyeShCeS5jc3MoJ21hdC1wcm9ncmVzcy1iYXInKSkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoaWRlIHByb2dyZXNzIGJhciB3aGVuIG5vdCBsb2FkaW5nJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gb3B0aW9ucy5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBvcHRpb25zLmdldEZpeHR1cmUoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgZXhwZWN0KGZpeHR1cmUuZGVidWdFbGVtZW50LnF1ZXJ5KEJ5LmNzcygnbWF0LXByb2dyZXNzLWJhcicpKSkudG9CZUZhbHN5KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9hZCBuZXh0IHBhZ2Ugb24gc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gb3B0aW9ucy5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5wYWdlID0gMTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5sYXN0UGFnZSA9IDM7XG4gICAgICAgICAgICBjb21wb25lbnQuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzcHlPbihjb21wb25lbnQgYXMgYW55LCAnbG9hZERhdGEnKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5vblNjcm9sbCgpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbXBvbmVudC5wYWdlKS50b0JlKDIpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbXBvbmVudC5sb2FkRGF0YSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdCBsb2FkIG5leHQgcGFnZSB3aGlsZSBhbHJlYWR5IGxvYWRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBvcHRpb25zLmdldENvbXBvbmVudCgpO1xuICAgICAgICAgICAgY29tcG9uZW50LnBhZ2UgPSAxO1xuICAgICAgICAgICAgY29tcG9uZW50Lmxhc3RQYWdlID0gMztcbiAgICAgICAgICAgIGNvbXBvbmVudC5pc1dvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgc3B5T24oY29tcG9uZW50IGFzIGFueSwgJ2xvYWREYXRhJyk7XG4gICAgICAgICAgICBjb21wb25lbnQub25TY3JvbGwoKTtcbiAgICAgICAgICAgIGV4cGVjdChjb21wb25lbnQubG9hZERhdGEpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIHNvcnRfYnkgZmlsdGVyJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gb3B0aW9ucy5nZXRDb21wb25lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjb21wb25lbnQuZmlsdGVyRm9ybS5nZXQoJ3NvcnRfYnknKTtcbiAgICAgICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgICAgIHBlbmRpbmcoJ05vIHNvcnRfYnkgY29udHJvbC4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcHlPbihjb250cm9sLCAnc2V0VmFsdWUnKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5zb3J0Q29sdW1uKHsgYWN0aXZlOiAnbmFtZScsIGRpcmVjdGlvbjogJ2FzYycgfSk7XG4gICAgICAgICAgICBleHBlY3QoY29udHJvbC5zZXRWYWx1ZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ25hbWV8QVNDJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0iXX0=
|