@solidev/data 0.0.1-alpha.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/README.md +7 -0
- package/esm2020/lib/auth/auth-interceptor.service.mjs +90 -0
- package/esm2020/lib/auth/auth.service.mjs +125 -0
- package/esm2020/lib/auth/jwt.mjs +21 -0
- package/esm2020/lib/data/data-backend.mjs +106 -0
- package/esm2020/lib/data/data-collection.mjs +109 -0
- package/esm2020/lib/data/data-collection.mock.mjs +39 -0
- package/esm2020/lib/data/data-model.mjs +287 -0
- package/esm2020/lib/data/data-parameters.mjs +34 -0
- package/esm2020/lib/data/data-query.mjs +147 -0
- package/esm2020/lib/data/data-query.mock.mjs +46 -0
- package/esm2020/lib/data/fields/base.mjs +142 -0
- package/esm2020/lib/data/fields/boolean.mjs +38 -0
- package/esm2020/lib/data/fields/datetime.mjs +124 -0
- package/esm2020/lib/data/fields/index.mjs +7 -0
- package/esm2020/lib/data/fields/numbers.mjs +38 -0
- package/esm2020/lib/data/fields/primaryfield.mjs +9 -0
- package/esm2020/lib/data/fields/relations.mjs +53 -0
- package/esm2020/lib/data/fields/stringfields.mjs +71 -0
- package/esm2020/lib/dispedit/choice.pipe.mjs +39 -0
- package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +475 -0
- package/esm2020/lib/dispedit/dispedit/dispedit.constants.mjs +2 -0
- package/esm2020/lib/dispedit/factor.pipe.mjs +48 -0
- package/esm2020/lib/dispedit/factorc.pipe.mjs +50 -0
- package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +142 -0
- package/esm2020/lib/dispedit/flags/flags.component.mjs +140 -0
- package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +318 -0
- package/esm2020/lib/dispedit/richedit/richedit.component.mjs +94 -0
- package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +46 -0
- package/esm2020/lib/messages/message-zone/message-zone.component.mjs +57 -0
- package/esm2020/lib/messages/message.service.mjs +151 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +34 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +63 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +225 -0
- package/esm2020/lib/modellist/model-list-filters/filters/filtertypes.mjs +3 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +108 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +28 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +24 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +9 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +24 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +63 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +16 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +46 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +49 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +35 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +49 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +15 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +145 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +50 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +30 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +80 -0
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +70 -0
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator.mjs +47 -0
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +49 -0
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter.mjs +116 -0
- package/esm2020/lib/modellist/model-list.service.mjs +135 -0
- package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +142 -0
- package/esm2020/lib/routing/routing.mjs +57 -0
- package/esm2020/lib/uploader/index.mjs +6 -0
- package/esm2020/lib/uploader/interfaces.mjs +8 -0
- package/esm2020/lib/uploader/ng-file-drop.directive.mjs +81 -0
- package/esm2020/lib/uploader/ng-file-select.directive.mjs +51 -0
- package/esm2020/lib/uploader/ngx-uploader.class.mjs +308 -0
- package/esm2020/lib/uploader/ngx-uploader.module.mjs +17 -0
- package/esm2020/lib/utils/slugify.mjs +16 -0
- package/esm2020/lib/utils/tab-memory.service.mjs +71 -0
- package/esm2020/public-api.mjs +51 -0
- package/esm2020/solidev-data.mjs +5 -0
- package/fesm2015/solidev-data.mjs +5411 -0
- package/fesm2015/solidev-data.mjs.map +1 -0
- package/fesm2020/solidev-data.mjs +5358 -0
- package/fesm2020/solidev-data.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/auth/auth-interceptor.service.d.ts +17 -0
- package/lib/auth/auth.service.d.ts +43 -0
- package/lib/auth/jwt.d.ts +22 -0
- package/lib/data/data-backend.d.ts +47 -0
- package/lib/data/data-collection.d.ts +87 -0
- package/lib/data/data-collection.mock.d.ts +19 -0
- package/lib/data/data-model.d.ts +93 -0
- package/lib/data/data-parameters.d.ts +26 -0
- package/lib/data/data-query.d.ts +101 -0
- package/lib/data/data-query.mock.d.ts +25 -0
- package/lib/data/fields/base.d.ts +116 -0
- package/lib/data/fields/boolean.d.ts +9 -0
- package/lib/data/fields/datetime.d.ts +39 -0
- package/lib/data/fields/index.d.ts +6 -0
- package/lib/data/fields/numbers.d.ts +35 -0
- package/lib/data/fields/primaryfield.d.ts +8 -0
- package/lib/data/fields/relations.d.ts +45 -0
- package/lib/data/fields/stringfields.d.ts +50 -0
- package/lib/dispedit/choice.pipe.d.ts +8 -0
- package/lib/dispedit/dispedit/dispedit.component.d.ts +182 -0
- package/lib/dispedit/dispedit/dispedit.constants.d.ts +6 -0
- package/lib/dispedit/factor.pipe.d.ts +12 -0
- package/lib/dispedit/factorc.pipe.d.ts +11 -0
- package/lib/dispedit/fkselect/fkselect.component.d.ts +43 -0
- package/lib/dispedit/flags/flags.component.d.ts +40 -0
- package/lib/dispedit/m2mselect/m2mselect.component.d.ts +120 -0
- package/lib/dispedit/richedit/richedit.component.d.ts +31 -0
- package/lib/dispedit/sdelete/sdelete.component.d.ts +27 -0
- package/lib/messages/message-zone/message-zone.component.d.ts +14 -0
- package/lib/messages/message.service.d.ts +59 -0
- package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +15 -0
- package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +19 -0
- package/lib/modellist/model-list-fields/model-list-fields.d.ts +67 -0
- package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +1 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +30 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +22 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +10 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +8 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +35 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +25 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +18 -0
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +19 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +16 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +6 -0
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +16 -0
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/model-list-filter.d.ts +52 -0
- package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +9 -0
- package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +13 -0
- package/lib/modellist/model-list-filters/model-list-filters.d.ts +15 -0
- package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +23 -0
- package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +16 -0
- package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +22 -0
- package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +61 -0
- package/lib/modellist/model-list.service.d.ts +83 -0
- package/lib/routing/breadcrumb/breadcrumb.component.d.ts +42 -0
- package/lib/routing/routing.d.ts +64 -0
- package/lib/uploader/index.d.ts +5 -0
- package/lib/uploader/interfaces.d.ts +67 -0
- package/lib/uploader/ng-file-drop.directive.d.ts +22 -0
- package/lib/uploader/ng-file-select.directive.d.ts +19 -0
- package/lib/uploader/ngx-uploader.class.d.ts +35 -0
- package/lib/uploader/ngx-uploader.module.d.ts +8 -0
- package/lib/utils/slugify.d.ts +1 -0
- package/lib/utils/tab-memory.service.d.ts +29 -0
- package/package.json +35 -0
- package/public-api.d.ts +47 -0
- package/src/lib/data/README.md +35 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { combineLatest, debounceTime, NEVER, of, share, Subject, takeUntil, } from 'rxjs';
|
|
3
|
+
import { switchMap } from 'rxjs/operators';
|
|
4
|
+
import { ModelListFields } from './model-list-fields/model-list-fields';
|
|
5
|
+
import { ModelListPaginator } from './model-list-paginator/model-list-paginator';
|
|
6
|
+
import { ModelListSorter } from './model-list-sorter/model-list-sorter';
|
|
7
|
+
import { ModelListFilters } from './model-list-filters/model-list-filters';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class ModelList {
|
|
10
|
+
constructor(name) {
|
|
11
|
+
this.started = false;
|
|
12
|
+
this.name = name;
|
|
13
|
+
}
|
|
14
|
+
get results() {
|
|
15
|
+
if (!this._results) {
|
|
16
|
+
this._results = this.queryset.results.pipe(
|
|
17
|
+
// tap(() => console.log('RESULTS')),
|
|
18
|
+
share(), takeUntil(this.unsubscribe || NEVER));
|
|
19
|
+
}
|
|
20
|
+
return this._results;
|
|
21
|
+
}
|
|
22
|
+
get meta() {
|
|
23
|
+
if (!this._meta) {
|
|
24
|
+
this._meta = this.queryset.meta.pipe(
|
|
25
|
+
// tap(() => console.log('META')),
|
|
26
|
+
share(), takeUntil(this.unsubscribe || NEVER));
|
|
27
|
+
}
|
|
28
|
+
return this._meta;
|
|
29
|
+
}
|
|
30
|
+
get loading() {
|
|
31
|
+
if (!this._loading) {
|
|
32
|
+
this._loading = this.queryset.loading.pipe(
|
|
33
|
+
// tap(() => console.log('LOADING')),
|
|
34
|
+
share(), takeUntil(this.unsubscribe || NEVER));
|
|
35
|
+
}
|
|
36
|
+
return this._loading;
|
|
37
|
+
}
|
|
38
|
+
get full() {
|
|
39
|
+
if (!this._full) {
|
|
40
|
+
this._full = this.queryset.full.pipe(
|
|
41
|
+
// tap(() => console.log('FULL')),
|
|
42
|
+
share(), takeUntil(this.unsubscribe || NEVER));
|
|
43
|
+
}
|
|
44
|
+
return this._full;
|
|
45
|
+
}
|
|
46
|
+
start(params) {
|
|
47
|
+
let filter$;
|
|
48
|
+
if (params.filter && !params.filter.subscribe) {
|
|
49
|
+
filter$ = of(params.filter);
|
|
50
|
+
}
|
|
51
|
+
else if (params.filter && params.filter.subscribe) {
|
|
52
|
+
filter$ = params.filter;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
filter$ = of({});
|
|
56
|
+
}
|
|
57
|
+
combineLatest([
|
|
58
|
+
this.reload,
|
|
59
|
+
this.filters.output,
|
|
60
|
+
filter$,
|
|
61
|
+
this.paginator.output,
|
|
62
|
+
this.sorter.output,
|
|
63
|
+
this.fields.output,
|
|
64
|
+
])
|
|
65
|
+
.pipe(debounceTime(200), switchMap(([reload, filter, manualFilter, paginator, sorter, fields]) => {
|
|
66
|
+
this.queryset
|
|
67
|
+
.filter(filter)
|
|
68
|
+
.filter(manualFilter || {}, true)
|
|
69
|
+
.paginateBy(paginator.page_size)
|
|
70
|
+
.setPage(paginator.page)
|
|
71
|
+
.sort(...sorter)
|
|
72
|
+
.setFields(fields);
|
|
73
|
+
return this.queryset.get(true);
|
|
74
|
+
}), takeUntil(this.unsubscribe || NEVER))
|
|
75
|
+
.subscribe({
|
|
76
|
+
next: (results) => { },
|
|
77
|
+
error: (error) => {
|
|
78
|
+
console.error('Error while getting model list results : ', error);
|
|
79
|
+
},
|
|
80
|
+
complete: () => {
|
|
81
|
+
// console.log('modellist:completed', this.name);
|
|
82
|
+
this.started = false;
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
this.reload.next();
|
|
86
|
+
this.started = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export class ModelListService {
|
|
90
|
+
constructor() {
|
|
91
|
+
this._instances = new Map();
|
|
92
|
+
}
|
|
93
|
+
get(name, collection, defaults) {
|
|
94
|
+
let ml;
|
|
95
|
+
if (!name || !this._instances.has(name) || !defaults.keep) {
|
|
96
|
+
ml = new ModelList(name);
|
|
97
|
+
ml.queryset = collection.queryset();
|
|
98
|
+
ml.fields = new ModelListFields(collection, defaults.fields);
|
|
99
|
+
ml.sorter = new ModelListSorter(defaults.sorter || []);
|
|
100
|
+
ml.paginator = new ModelListPaginator(defaults.paginator);
|
|
101
|
+
ml.filters = new ModelListFilters(defaults.filters);
|
|
102
|
+
if (defaults.keep) {
|
|
103
|
+
this._instances.set(name, ml);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
ml = this._instances.get(name);
|
|
108
|
+
}
|
|
109
|
+
if (!ml.started) {
|
|
110
|
+
if (defaults.reload) {
|
|
111
|
+
ml.reload = defaults.reload;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
ml.reload = new Subject();
|
|
115
|
+
}
|
|
116
|
+
if (defaults.unsubscribe) {
|
|
117
|
+
ml.unsubscribe = defaults.unsubscribe;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
ml.unsubscribe = new Subject();
|
|
121
|
+
}
|
|
122
|
+
ml.start(defaults);
|
|
123
|
+
}
|
|
124
|
+
return ml;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
ModelListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
128
|
+
ModelListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListService, providedIn: 'root' });
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListService, decorators: [{
|
|
130
|
+
type: Injectable,
|
|
131
|
+
args: [{
|
|
132
|
+
providedIn: 'root',
|
|
133
|
+
}]
|
|
134
|
+
}], ctorParameters: function () { return []; } });
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixLQUFLLEVBRUwsRUFBRSxFQUNGLEtBQUssRUFDTCxPQUFPLEVBQ1AsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBUWQsT0FBTyxFQUFFLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBd0QzRSxNQUFNLE9BQU8sU0FBUztJQWdCcEIsWUFBWSxJQUFZO1FBUGpCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFRckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUk7WUFDeEMscUNBQXFDO1lBQ3JDLEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUNyQyxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNi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Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMvQjtTQUNGO2FBQU07WUFDTCxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDbkIsRUFBRSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQzthQUNqQztZQUNELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDeEIsRUFBRSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNMLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQzthQUN0QztZQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzZHQXZDVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgTkVWRVIsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZSxcbiAgU3ViamVjdCxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFNb2RlbCB9IGZyb20gJy4uL2RhdGEvZGF0YS1tb2RlbCc7XG5pbXBvcnQge1xuICBJUXVlcnlNZXRhLFxuICBJUXVlcnlNZXRhTmF2UGFyYW1zLFxuICBJUXVlcnlOYXYsXG4gIFF1ZXJ5c2V0LFxufSBmcm9tICcuLi9kYXRhL2RhdGEtcXVlcnknO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWVsZHMgfSBmcm9tICcuL21vZGVsLWxpc3QtZmllbGRzL21vZGVsLWxpc3QtZmllbGRzJztcbmltcG9ydCB7IE1vZGVsTGlzdFBhZ2luYXRvciB9IGZyb20gJy4vbW9kZWwtbGlzdC1wYWdpbmF0b3IvbW9kZWwtbGlzdC1wYWdpbmF0b3InO1xuaW1wb3J0IHsgTW9kZWxMaXN0U29ydGVyIH0gZnJvbSAnLi9tb2RlbC1saXN0LXNvcnRlci9tb2RlbC1saXN0LXNvcnRlcic7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWx0ZXJzIH0gZnJvbSAnLi9tb2RlbC1saXN0LWZpbHRlcnMvbW9kZWwtbGlzdC1maWx0ZXJzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi9kYXRhL2RhdGEtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWx0ZXIgfSBmcm9tICcuL21vZGVsLWxpc3QtZmlsdGVycy9tb2RlbC1saXN0LWZpbHRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRmllbGQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRGVmYXVsdHMge1xuICBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgU29ydGVyRGVmYXVsdHMgPSBzdHJpbmdbXTtcblxuLyoqXG4gKiBGaWVsZHMgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZHNQYXJhbXMge1xuICAvKiogQWxsb3dlZCBmaWVsZHMsIGFsbCBtb2RlbCBmaWVsZHMgYXJlIGFsbG93ZWQgaWYgZW1wdHkgKi9cbiAgYWxsb3dlZD86IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBlbmFibGVkIGZpZWxkcyAqL1xuICBkZWZhdWx0cz86IHN0cmluZ1tdO1xuICAvKiogRXhjbHVkZWQgZmllbGRzICovXG4gIGV4Y2x1ZGVkPzogc3RyaW5nW107XG4gIC8qKiBDdXN0b20gZmllbGRzICovXG4gIGN1c3RvbT86IEN1c3RvbUZpZWxkW107XG59XG5cbi8qKlxuICogRmlsdGVycyBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNQYXJhbXMge1xuICAvKiogQWxsb3dlZCBmaWx0ZXIgbmFtZXMgKi9cbiAgYWxsb3dlZD86IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBhY3RpdmUgZmlsdGVyIG5hbWVzICovXG4gIGRlZmF1bHRzPzogc3RyaW5nW107XG4gIC8qKiBFeGNsdWRlZCBmaWx0ZXIgbmFtZXMgKi9cbiAgZXhjbHVkZWQ/OiBzdHJpbmdbXTtcbiAgLyoqIEZpbHRlcnMgZGVmaW5pdGlvbnMgKi9cbiAgZmlsdGVycz86IE1vZGVsTGlzdEZpbHRlcltdO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uUGFyYW1zID0gSVF1ZXJ5TWV0YU5hdlBhcmFtcztcblxuZXhwb3J0IGludGVyZmFjZSBNb2RlbExpc3RQYXJhbXMge1xuICBmaWVsZHM/OiBGaWVsZHNQYXJhbXM7XG4gIGZpbHRlcnM/OiBGaWx0ZXJzUGFyYW1zO1xuICBmaWx0ZXI/OiBGaWx0ZXJEZWZhdWx0cyB8IE9ic2VydmFibGU8RmlsdGVyRGVmYXVsdHM+O1xuICBzb3J0ZXI/OiBTb3J0ZXJEZWZhdWx0cztcbiAgcGFnaW5hdG9yPzogSVF1ZXJ5TmF2O1xuICBrZWVwPzogYm9vbGVhbjtcbiAgcmVsb2FkPzogU3ViamVjdDx2b2lkPjtcbiAgdW5zdWJzY3JpYmU/OiBTdWJqZWN0PHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgTW9kZWxMaXN0PFQgZXh0ZW5kcyBEYXRhTW9kZWw+IHtcbiAgcHVibGljIG5hbWUhOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWx0ZXJzITogTW9kZWxMaXN0RmlsdGVycztcbiAgcHVibGljIHNvcnRlciE6IE1vZGVsTGlzdFNvcnRlcjtcbiAgcHVibGljIHBhZ2luYXRvciE6IE1vZGVsTGlzdFBhZ2luYXRvcjtcbiAgcHVibGljIHF1ZXJ5c2V0ITogUXVlcnlzZXQ8VD47XG4gIHB1YmxpYyBmaWVsZHMhOiBNb2RlbExpc3RGaWVsZHM8VD47XG4gIHB1YmxpYyByZWxvYWQhOiBTdWJqZWN0PHZvaWQ+O1xuICBwdWJsaWMgdW5zdWJzY3JpYmUhOiBTdWJqZWN0PHZvaWQ+O1xuICBwdWJsaWMgc3RhcnRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Jlc3VsdHM/OiBPYnNlcnZhYmxlPFRbXT47XG4gIHByaXZhdGUgX21ldGE/OiBPYnNlcnZhYmxlPElRdWVyeU1ldGE+O1xuICBwcml2YXRlIF9sb2FkaW5nPzogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHJpdmF0ZSBfZnVsbD86IE9ic2VydmFibGU8W1RbXSwgYm9vbGVhbiwgSVF1ZXJ5TWV0YV0+O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBpZiAoIXRoaXMuX3Jlc3VsdHMpIHtcbiAgICAgIHRoaXMuX3Jlc3VsdHMgPSB0aGlzLnF1ZXJ5c2V0LnJlc3VsdHMucGlwZShcbiAgICAgICAgLy8gdGFwKCgpID0+IGNvbnNvbGUubG9nKCdSRVNVTFRTJykpLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSB8fCBORVZFUilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXN1bHRzO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXRhKCk6IE9ic2VydmFibGU8SVF1ZXJ5TWV0YT4ge1xuICAgIGlmICghdGhpcy5fbWV0YSkge1xuICAgICAgdGhpcy5fbWV0YSA9IHRoaXMucXVlcnlzZXQubWV0YS5waXBlKFxuICAgICAgICAvLyB0YXAoKCkgPT4gY29uc29sZS5sb2coJ01FVEEnKSksXG4gICAgICAgIHNoYXJlKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlIHx8IE5FVkVSKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21ldGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLl9sb2FkaW5nKSB7XG4gICAgICB0aGlzLl9sb2FkaW5nID0gdGhpcy5xdWVyeXNldC5sb2FkaW5nLnBpcGUoXG4gICAgICAgIC8vIHRhcCgoKSA9PiBjb25zb2xlLmxvZygnTE9BRElORycpKSxcbiAgICAgICAgc2hhcmUoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUgfHwgTkVWRVIpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZnVsbCgpOiBPYnNlcnZhYmxlPFtUW10sIGJvb2xlYW4sIElRdWVyeU1ldGFdPiB7XG4gICAgaWYgKCF0aGlzLl9mdWxsKSB7XG4gICAgICB0aGlzLl9mdWxsID0gdGhpcy5xdWVyeXNldC5mdWxsLnBpcGUoXG4gICAgICAgIC8vIHRhcCgoKSA9PiBjb25zb2xlLmxvZygnRlVMTCcpKSxcbiAgICAgICAgc2hhcmUoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUgfHwgTkVWRVIpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydChwYXJhbXM6IE1vZGVsTGlzdFBhcmFtcykge1xuICAgIGxldCBmaWx0ZXIkOiBPYnNlcnZhYmxlPEZpbHRlckRlZmF1bHRzPjtcbiAgICBpZiAocGFyYW1zLmZpbHRlciAmJiAhcGFyYW1zLmZpbHRlci5zdWJzY3JpYmUpIHtcbiAgICAgIGZpbHRlciQgPSBvZihwYXJhbXMuZmlsdGVyIGFzIEZpbHRlckRlZmF1bHRzKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5maWx0ZXIgJiYgcGFyYW1zLmZpbHRlci5zdWJzY3JpYmUpIHtcbiAgICAgIGZpbHRlciQgPSBwYXJhbXMuZmlsdGVyIGFzIE9ic2VydmFibGU8RmlsdGVyRGVmYXVsdHM+O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWx0ZXIkID0gb2Yoe30pO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMucmVsb2FkLFxuICAgICAgdGhpcy5maWx0ZXJzLm91dHB1dCxcbiAgICAgIGZpbHRlciQsXG4gICAgICB0aGlzLnBhZ2luYXRvci5vdXRwdXQsXG4gICAgICB0aGlzLnNvcnRlci5vdXRwdXQsXG4gICAgICB0aGlzLmZpZWxkcy5vdXRwdXQsXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgIChbcmVsb2FkLCBmaWx0ZXIsIG1hbnVhbEZpbHRlciwgcGFnaW5hdG9yLCBzb3J0ZXIsIGZpZWxkc10pID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlzZXRcbiAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgICAgICAgICAgIC5maWx0ZXIobWFudWFsRmlsdGVyIHx8IHt9LCB0cnVlKVxuICAgICAgICAgICAgICAucGFnaW5hdGVCeShwYWdpbmF0b3IucGFnZV9zaXplKVxuICAgICAgICAgICAgICAuc2V0UGFnZShwYWdpbmF0b3IucGFnZSlcbiAgICAgICAgICAgICAgLnNvcnQoLi4uc29ydGVyKVxuICAgICAgICAgICAgICAuc2V0RmllbGRzKGZpZWxkcyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeXNldC5nZXQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSB8fCBORVZFUilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzdWx0czogYW55KTogdm9pZCA9PiB7fSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGdldHRpbmcgbW9kZWwgbGlzdCByZXN1bHRzIDogJywgZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdtb2RlbGxpc3Q6Y29tcGxldGVkJywgdGhpcy5uYW1lKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRoaXMucmVsb2FkLm5leHQoKTtcbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbExpc3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfaW5zdGFuY2VzOiBNYXA8c3RyaW5nLCBNb2RlbExpc3Q8YW55Pj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIERhdGFNb2RlbD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb248VD4sXG4gICAgZGVmYXVsdHM6IE1vZGVsTGlzdFBhcmFtc1xuICApIHtcbiAgICBsZXQgbWw6IE1vZGVsTGlzdDxUPjtcblxuICAgIGlmICghbmFtZSB8fCAhdGhpcy5faW5zdGFuY2VzLmhhcyhuYW1lKSB8fCAhZGVmYXVsdHMua2VlcCkge1xuICAgICAgbWwgPSBuZXcgTW9kZWxMaXN0PFQ+KG5hbWUpO1xuICAgICAgbWwucXVlcnlzZXQgPSBjb2xsZWN0aW9uLnF1ZXJ5c2V0KCk7XG4gICAgICBtbC5maWVsZHMgPSBuZXcgTW9kZWxMaXN0RmllbGRzKGNvbGxlY3Rpb24sIGRlZmF1bHRzLmZpZWxkcyk7XG4gICAgICBtbC5zb3J0ZXIgPSBuZXcgTW9kZWxMaXN0U29ydGVyKGRlZmF1bHRzLnNvcnRlciB8fCBbXSk7XG4gICAgICBtbC5wYWdpbmF0b3IgPSBuZXcgTW9kZWxMaXN0UGFnaW5hdG9yKGRlZmF1bHRzLnBhZ2luYXRvcik7XG4gICAgICBtbC5maWx0ZXJzID0gbmV3IE1vZGVsTGlzdEZpbHRlcnMoZGVmYXVsdHMuZmlsdGVycyk7XG4gICAgICBpZiAoZGVmYXVsdHMua2VlcCkge1xuICAgICAgICB0aGlzLl9pbnN0YW5jZXMuc2V0KG5hbWUsIG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWwgPSB0aGlzLl9pbnN0YW5jZXMuZ2V0KG5hbWUpITtcbiAgICB9XG4gICAgaWYgKCFtbC5zdGFydGVkKSB7XG4gICAgICBpZiAoZGVmYXVsdHMucmVsb2FkKSB7XG4gICAgICAgIG1sLnJlbG9hZCA9IGRlZmF1bHRzLnJlbG9hZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1sLnJlbG9hZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdHMudW5zdWJzY3JpYmUpIHtcbiAgICAgICAgbWwudW5zdWJzY3JpYmUgPSBkZWZhdWx0cy51bnN1YnNjcmliZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1sLnVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgIH1cbiAgICAgIG1sLnN0YXJ0KGRlZmF1bHRzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1sO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Component, Input, } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { NavigationEnd, RouterModule, } from '@angular/router';
|
|
4
|
+
import { filter } from 'rxjs/operators';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/router";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
/**
|
|
10
|
+
* Use data from route config to create a breadcrumb for current route.
|
|
11
|
+
*
|
|
12
|
+
* Route config data is :
|
|
13
|
+
* - title : route fragment title or lodash template to build title
|
|
14
|
+
* (provided arguments for template processing : route (current segment route snapshot)
|
|
15
|
+
* and data (input argument)
|
|
16
|
+
* - icon: icon classes. Example fa fa-home for home & font awesome
|
|
17
|
+
*/
|
|
18
|
+
export class BreadcrumbComponent {
|
|
19
|
+
constructor(router, route) {
|
|
20
|
+
this.router = router;
|
|
21
|
+
this.route = route;
|
|
22
|
+
/**
|
|
23
|
+
* Do we display icons ?
|
|
24
|
+
*/
|
|
25
|
+
this.icons = true;
|
|
26
|
+
this.tree = [];
|
|
27
|
+
this._subscriptions = new Subject();
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.getRouteTree(this.router.routerState);
|
|
31
|
+
this.router.events
|
|
32
|
+
.pipe(takeUntil(this._subscriptions), filter((event) => event instanceof NavigationEnd))
|
|
33
|
+
.subscribe(() => {
|
|
34
|
+
this.getRouteTree(this.router.routerState);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
ngOnDestroy() {
|
|
38
|
+
this._subscriptions.next();
|
|
39
|
+
this._subscriptions.complete();
|
|
40
|
+
}
|
|
41
|
+
ngOnChanges(changes) {
|
|
42
|
+
this.getRouteTree(this.router.routerState);
|
|
43
|
+
}
|
|
44
|
+
getRouteTree(current) {
|
|
45
|
+
const tree = [];
|
|
46
|
+
const url = [];
|
|
47
|
+
let p = current.root.snapshot;
|
|
48
|
+
while (p != null) {
|
|
49
|
+
let rdata = {
|
|
50
|
+
tree: false,
|
|
51
|
+
title: () => 'xxxx',
|
|
52
|
+
icon: '',
|
|
53
|
+
skip: true,
|
|
54
|
+
};
|
|
55
|
+
const data = p.data;
|
|
56
|
+
// Get route data
|
|
57
|
+
if (p.routeConfig && p.routeConfig.data) {
|
|
58
|
+
rdata = p.routeConfig.data;
|
|
59
|
+
}
|
|
60
|
+
if (rdata.tree) {
|
|
61
|
+
// Get icon
|
|
62
|
+
for (const u of p.url) {
|
|
63
|
+
url.push(u.path);
|
|
64
|
+
let rtd = {
|
|
65
|
+
icon: this.getIcon(rdata, data),
|
|
66
|
+
title: this.getTitle(rdata, data, u),
|
|
67
|
+
path: url.join('/'),
|
|
68
|
+
current: false,
|
|
69
|
+
};
|
|
70
|
+
if (rtd.path.length > 0 && rtd.path[0] !== '/') {
|
|
71
|
+
rtd.path = '/' + rtd.path;
|
|
72
|
+
}
|
|
73
|
+
if (!rdata.skip) {
|
|
74
|
+
tree.push(rtd);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
url.push(p.url.join('/'));
|
|
80
|
+
let rtd = {
|
|
81
|
+
icon: this.getIcon(rdata, data),
|
|
82
|
+
title: this.getTitle(rdata, data),
|
|
83
|
+
path: url.join('/'),
|
|
84
|
+
current: false,
|
|
85
|
+
};
|
|
86
|
+
if (rtd.path.length > 0 && rtd.path[0] !== '/') {
|
|
87
|
+
rtd.path = '/' + rtd.path;
|
|
88
|
+
}
|
|
89
|
+
if (!rdata.skip) {
|
|
90
|
+
tree.push(rtd);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
p = p.firstChild;
|
|
94
|
+
}
|
|
95
|
+
if (tree.length > 0) {
|
|
96
|
+
tree[tree.length - 1].current = true;
|
|
97
|
+
}
|
|
98
|
+
this.tree = tree;
|
|
99
|
+
}
|
|
100
|
+
getTitle(rdata, data, u) {
|
|
101
|
+
if (rdata['title']) {
|
|
102
|
+
if (typeof rdata['title'] === 'function') {
|
|
103
|
+
const tpl = rdata['title'];
|
|
104
|
+
try {
|
|
105
|
+
if (u) {
|
|
106
|
+
return tpl(data, u.path);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return tpl(data);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
console.warn('Unable to process breadcrumb function', e);
|
|
114
|
+
if (data.title != null) {
|
|
115
|
+
return 'xx';
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return rdata['title'];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return 'xxx';
|
|
124
|
+
}
|
|
125
|
+
getIcon(rdata, data) {
|
|
126
|
+
if (data.icon) {
|
|
127
|
+
return data.icon;
|
|
128
|
+
}
|
|
129
|
+
return '';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
+
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: BreadcrumbComponent, isStandalone: true, selector: "data-breadcrumb", inputs: { data: "data", icons: "icons" }, usesOnChanges: true, ngImport: i0, template: "\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons && p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons && p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ selector: 'data-breadcrumb', standalone: true, imports: [CommonModule, RouterModule], template: "\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons && p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons && p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons && p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>" }]
|
|
137
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { data: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], icons: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}] } });
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvcm91dGluZy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL3JvdXRpbmcvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQUtOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFHTCxhQUFhLEVBRWIsWUFBWSxHQUdiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVUvQzs7Ozs7Ozs7R0FRRztBQVFILE1BQU0sT0FBTyxtQkFBbUI7SUFZOUIsWUFBbUIsTUFBYyxFQUFTLEtBQXFCO1FBQTVDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQVAvRDs7V0FFRztRQUNhLFVBQUssR0FBRyxJQUFJLENBQUM7UUFDdEIsU0FBSSxHQUFvQixFQUFFLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXFCLENBQUM7SUFFbkUsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDZixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDOUIsTUFB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O2dCQUNMLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxPQUFPLENBQ1osS0FBK0IsRUFDL0IsSUFBcUI7UUFFckIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOztnSEFsSVUsbUJBQW1CO29HQUFuQixtQkFBbUIsMElDN0NoQyxneUJBYU0seUREOEJNLFlBQVksNlZBQUUsWUFBWTsyRkFFekIsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGlCQUFpQixjQUdmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7MEhBTXJCLElBQUk7c0JBQW5CLEtBQUs7Z0JBSVUsS0FBSztzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgTmF2aWdhdGlvbkVuZCxcbiAgUm91dGVyLFxuICBSb3V0ZXJNb2R1bGUsXG4gIFJvdXRlclN0YXRlLFxuICBVcmxTZWdtZW50LFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJhc2VSb3V0ZVBhcmFtcywgVHBsRm4gfSBmcm9tICcuLi9yb3V0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBJUGF0aFRyZWVJdGVtIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGN1cnJlbnQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNlIGRhdGEgZnJvbSByb3V0ZSBjb25maWcgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgY3VycmVudCByb3V0ZS5cbiAqXG4gKiBSb3V0ZSBjb25maWcgZGF0YSBpcyA6XG4gKiAtIHRpdGxlIDogcm91dGUgZnJhZ21lbnQgdGl0bGUgb3IgbG9kYXNoIHRlbXBsYXRlIHRvIGJ1aWxkIHRpdGxlXG4gKiAgIChwcm92aWRlZCBhcmd1bWVudHMgZm9yIHRlbXBsYXRlIHByb2Nlc3NpbmcgOiByb3V0ZSAoY3VycmVudCBzZWdtZW50IHJvdXRlIHNuYXBzaG90KVxuICogICBhbmQgZGF0YSAoaW5wdXQgYXJndW1lbnQpXG4gKiAtIGljb246IGljb24gY2xhc3Nlcy4gRXhhbXBsZSBmYSBmYS1ob21lIGZvciBob21lICYgZm9udCBhd2Vzb21lXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZGF0YSB0byBiZSB1c2VkIGluIHRpdGxlVGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBhbnk7XG4gIC8qKlxuICAgKiBEbyB3ZSBkaXNwbGF5IGljb25zID9cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpY29ucyA9IHRydWU7XG4gIHB1YmxpYyB0cmVlOiBJUGF0aFRyZWVJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0Um91dGVUcmVlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlKTtcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fc3Vic2NyaXB0aW9ucyksXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmdldFJvdXRlVHJlZSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLm5leHQoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuZ2V0Um91dGVUcmVlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3V0ZVRyZWUoY3VycmVudDogUm91dGVyU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlOiBJUGF0aFRyZWVJdGVtW10gPSBbXTtcbiAgICBjb25zdCB1cmw6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHA6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gY3VycmVudC5yb290LnNuYXBzaG90O1xuXG4gICAgd2hpbGUgKHAgIT0gbnVsbCkge1xuICAgICAgbGV0IHJkYXRhOiBQYXJ0aWFsPEJhc2VSb3V0ZVBhcmFtcz4gPSB7XG4gICAgICAgIHRyZWU6IGZhbHNlLFxuICAgICAgICB0aXRsZTogKCkgPT4gJ3h4eHgnLFxuICAgICAgICBpY29uOiAnJyxcbiAgICAgICAgc2tpcDogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBkYXRhID0gcC5kYXRhIGFzIEJhc2VSb3V0ZVBhcmFtcztcblxuICAgICAgLy8gR2V0IHJvdXRlIGRhdGFcbiAgICAgIGlmIChwLnJvdXRlQ29uZmlnICYmIHAucm91dGVDb25maWcuZGF0YSkge1xuICAgICAgICByZGF0YSA9IHAucm91dGVDb25maWcuZGF0YSBhcyBCYXNlUm91dGVQYXJhbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZGF0YS50cmVlKSB7XG4gICAgICAgIC8vIEdldCBpY29uXG4gICAgICAgIGZvciAoY29uc3QgdSBvZiBwLnVybCkge1xuICAgICAgICAgIHVybC5wdXNoKHUucGF0aCk7XG4gICAgICAgICAgbGV0IHJ0ZDogSVBhdGhUcmVlSXRlbSA9IHtcbiAgICAgICAgICAgIGljb246IHRoaXMuZ2V0SWNvbihyZGF0YSwgZGF0YSksXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShyZGF0YSwgZGF0YSwgdSksXG4gICAgICAgICAgICBwYXRoOiB1cmwuam9pbignLycpLFxuICAgICAgICAgICAgY3VycmVudDogZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAocnRkLnBhdGgubGVuZ3RoID4gMCAmJiBydGQucGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICAgICAgICBydGQucGF0aCA9ICcvJyArIHJ0ZC5wYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJkYXRhLnNraXApIHtcbiAgICAgICAgICAgIHRyZWUucHVzaChydGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLnB1c2gocC51cmwuam9pbignLycpKTtcbiAgICAgICAgbGV0IHJ0ZDogSVBhdGhUcmVlSXRlbSA9IHtcbiAgICAgICAgICBpY29uOiB0aGlzLmdldEljb24ocmRhdGEsIGRhdGEpLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKHJkYXRhLCBkYXRhKSxcbiAgICAgICAgICBwYXRoOiB1cmwuam9pbignLycpLFxuICAgICAgICAgIGN1cnJlbnQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocnRkLnBhdGgubGVuZ3RoID4gMCAmJiBydGQucGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICAgICAgcnRkLnBhdGggPSAnLycgKyBydGQucGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJkYXRhLnNraXApIHtcbiAgICAgICAgICB0cmVlLnB1c2gocnRkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwID0gcC5maXJzdENoaWxkO1xuICAgIH1cbiAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7XG4gICAgICB0cmVlW3RyZWUubGVuZ3RoIC0gMV0uY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudHJlZSA9IHRyZWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGl0bGUoXG4gICAgcmRhdGE6IFBhcnRpYWw8QmFzZVJvdXRlUGFyYW1zPixcbiAgICBkYXRhOiBCYXNlUm91dGVQYXJhbXMsXG4gICAgdT86IFVybFNlZ21lbnRcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAocmRhdGFbJ3RpdGxlJ10pIHtcbiAgICAgIGlmICh0eXBlb2YgcmRhdGFbJ3RpdGxlJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgdHBsOiBUcGxGbjxhbnk+ID0gcmRhdGFbJ3RpdGxlJ107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cGwoZGF0YSwgdS5wYXRoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRwbChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBwcm9jZXNzIGJyZWFkY3J1bWIgZnVuY3Rpb24nLCBlKTtcbiAgICAgICAgICBpZiAoZGF0YS50aXRsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3h4JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZGF0YVsndGl0bGUnXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICd4eHgnO1xuICB9XG5cbiAgcHVibGljIGdldEljb24oXG4gICAgcmRhdGE6IFBhcnRpYWw8QmFzZVJvdXRlUGFyYW1zPixcbiAgICBkYXRhOiBCYXNlUm91dGVQYXJhbXNcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoZGF0YS5pY29uKSB7XG4gICAgICByZXR1cm4gZGF0YS5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIlxuPG5hdiBhcmlhLWxhYmVsPVwiYnJlYWRjcnVtYlwiPlxuICA8b2wgY2xhc3M9XCJicmVhZGNydW1iXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiB0cmVlXCI+XG4gICAgICA8bGkgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW1cIiAqbmdJZj1cIiFwLmN1cnJlbnRcIj48YSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbVwiIFtyb3V0ZXJMaW5rXT1cInAucGF0aFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29ucyAmYW1wOyZhbXA7IHAuaWNvblwiPjxpIGNsYXNzPVwibWUtMlwiIFtuZ0NsYXNzXT1cInAuaWNvblwiPjwvaT57e3AudGl0bGV9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGljb25zICZhbXA7JmFtcDsgcC5pY29uKVwiPnt7cC50aXRsZX19PC9uZy1jb250YWluZXI+PC9hPjwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW0gYWN0aXZlXCIgYXJpYS1jdXJyZW50PVwicGFnZVwiICpuZ0lmPVwicC5jdXJyZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29ucyAmYW1wOyZhbXA7IHAuaWNvblwiPjxpIGNsYXNzPVwibWUtMVwiIFtuZ0NsYXNzXT1cInAuaWNvblwiPjwvaT57e3AudGl0bGV9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpY29ucyAmYW1wOyZhbXA7IHAuaWNvbilcIj57e3AudGl0bGV9fTwvbmctY29udGFpbmVyPlxuICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vbD5cbjwvbmF2PiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function RData(value) {
|
|
2
|
+
return value;
|
|
3
|
+
}
|
|
4
|
+
export class Link {
|
|
5
|
+
constructor(config, context, router) {
|
|
6
|
+
this._cargs = {};
|
|
7
|
+
this._params = [];
|
|
8
|
+
this._params = config.params || [];
|
|
9
|
+
this._route = config.route;
|
|
10
|
+
this._router = router;
|
|
11
|
+
this._name = config.name;
|
|
12
|
+
if (context) {
|
|
13
|
+
this.context(context);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
get name() {
|
|
17
|
+
return this._name;
|
|
18
|
+
}
|
|
19
|
+
context(ctx) {
|
|
20
|
+
for (const n of this._params) {
|
|
21
|
+
if (ctx && ctx[n]) {
|
|
22
|
+
this._cargs[n] = ctx[n];
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this._cargs[n] = null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
route(params) {
|
|
30
|
+
const rargs = [];
|
|
31
|
+
for (const n of this._params) {
|
|
32
|
+
if (params && params[n] !== undefined && params[n] !== null) {
|
|
33
|
+
rargs.push(params[n]);
|
|
34
|
+
}
|
|
35
|
+
else if (this._cargs[n] !== undefined && this._cargs[n] !== null) {
|
|
36
|
+
rargs.push(this._cargs[n]);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.error('Missing route parameter', n);
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// SEE: Check for undefined in rargs
|
|
44
|
+
return this._route(...rargs);
|
|
45
|
+
}
|
|
46
|
+
async navigate(params, router) {
|
|
47
|
+
if (router) {
|
|
48
|
+
return router.navigate(this.route(params));
|
|
49
|
+
}
|
|
50
|
+
if (this._router) {
|
|
51
|
+
return this._router.navigate(this.route(params));
|
|
52
|
+
}
|
|
53
|
+
console.error('Router not provided, no navigation');
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9yb3V0aW5nL3JvdXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBLE1BQU0sVUFBVSxLQUFLLENBQTRCLEtBQVE7SUFDdkQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBZ0JELE1BQU0sT0FBTyxJQUFJO0lBTWYsWUFBWSxNQUF1QixFQUFFLE9BQVksRUFBRSxNQUFlO1FBTDFELFdBQU0sR0FBNkIsRUFBRSxDQUFDO1FBQ3RDLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFLN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFJRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFRO1FBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM1QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQThCO1FBQ3pDLE1BQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUMzRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sRUFBRSxDQUFDO2FBQ1g7U0FDRjtRQUNELG9DQUFvQztRQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FDbkIsTUFBK0IsRUFDL0IsTUFBZTtRQUVmLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNwRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vKipcbiAqIFRlbXBsYXRlIGZ1bmN0aW9uIHR5cGUuXG4gKiBVc2VkIGZvciBwYWdlIHRpdGxlIG9yIG90aGVyIGRhdGEgdG8gc3RyaW5nIG9wZXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIGRhdGE6IG9iamVjdFxuICogQHBhcmFtIHBhdGg6IG9wdGlvbmFsIHBhdGggKHNlZTogdXNhZ2UpXG4gKi9cbmV4cG9ydCB0eXBlIFRwbEZuPFQ+ID0gKGRhdGE6IFQsIHBhdGg/OiBzdHJpbmcpID0+IHN0cmluZztcblxuLyoqXG4gKiBCYXNlIHJvdXRlIHBhcmFtZXRlcnMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VSb3V0ZVBhcmFtcyB7XG4gIC8qKiBTa2lwIHJvdXRlIGluIGJyZWFkY3J1bWJzICovXG4gIHNraXA/OiBib29sZWFuO1xuICAvKiogUm91dGUgdGl0bGUgb3IgdGl0bGUgdGVtcGxhdGUgKi9cbiAgdGl0bGU/OiBzdHJpbmcgfCBUcGxGbjxhbnk+O1xuICAvKiogUm91dGUgaWNvbiBzdHJpbmcgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIFJvdXRlIGNvbmZpZyBpdGVtICovXG4gIHJvdXRlOiBSb3V0ZUNvbmZpZ0l0ZW07XG4gIC8qKiBUaGlzIHJvdXRlIGlzIGEgdHJlZSByb3V0ZSAqL1xuICB0cmVlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSb3V0ZSBmdW5jdGlvbiB0eXBlLlxuICogVGFrZXMgcGFyYW1ldGVycywgcmV0dXJuIGEgcm91dGUuXG4gKi9cbmV4cG9ydCB0eXBlIFJvdXRlRm4gPSAoLi4uYXJnczogYW55W10pID0+IChzdHJpbmcgfCBudW1iZXIpW107XG5cbi8qKlxuICogUm91dGUgY29uZmlnIGl0ZW0uXG4gKiBTdG9yZXMgcm91dGUgbmFtZWQgcGFyYW1ldGVycywgcm91dGUgZnVuY3Rpb24gYW5kIHJvdXRlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVDb25maWdJdGVtIHtcbiAgcGFyYW1zOiBzdHJpbmdbXTtcbiAgcm91dGU6IFJvdXRlRm47XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJEYXRhPFQgZXh0ZW5kcyBCYXNlUm91dGVQYXJhbXM+KHZhbHVlOiBUKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgUm91dGVzQ29uZmlnPFQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICByZWFkb25seSBbUHJvcGVydHkgaW4gVF06IFJvdXRlQ29uZmlnSXRlbTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaWN0Um91dGVzIGV4dGVuZHMgUm91dGUge1xuICBkYXRhOiBCYXNlUm91dGVQYXJhbXM7XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlc0RlZmluaXRpb24gPSBTdHJpY3RSb3V0ZXNbXTtcblxuaW50ZXJmYWNlIFJvdXRlQXJnPFQ+IHtcbiAgW2luZGV4OiBzdHJpbmddOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgTGluazxUPiB7XG4gIHByaXZhdGUgX2NhcmdzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBfcGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9yb3V0ZTogUm91dGVGbjtcbiAgcHJpdmF0ZSBfcm91dGVyPzogUm91dGVyO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUm91dGVDb25maWdJdGVtLCBjb250ZXh0OiBhbnksIHJvdXRlcj86IFJvdXRlcikge1xuICAgIHRoaXMuX3BhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwgW107XG4gICAgdGhpcy5fcm91dGUgPSBjb25maWcucm91dGU7XG4gICAgdGhpcy5fcm91dGVyID0gcm91dGVyO1xuICAgIHRoaXMuX25hbWUgPSBjb25maWcubmFtZTtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgdGhpcy5jb250ZXh0KGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hbWUhOiBzdHJpbmc7XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBwdWJsaWMgY29udGV4dChjdHg6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbiBvZiB0aGlzLl9wYXJhbXMpIHtcbiAgICAgIGlmIChjdHggJiYgY3R4W25dKSB7XG4gICAgICAgIHRoaXMuX2NhcmdzW25dID0gY3R4W25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2FyZ3Nbbl0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByb3V0ZShwYXJhbXM/OiBSZXF1aXJlZDxSb3V0ZUFyZzxUPj4pOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICBjb25zdCByYXJnczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG4gb2YgdGhpcy5fcGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zICYmIHBhcmFtc1tuXSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc1tuXSAhPT0gbnVsbCkge1xuICAgICAgICByYXJncy5wdXNoKHBhcmFtc1tuXSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NhcmdzW25dICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fY2FyZ3Nbbl0gIT09IG51bGwpIHtcbiAgICAgICAgcmFyZ3MucHVzaCh0aGlzLl9jYXJnc1tuXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHJvdXRlIHBhcmFtZXRlcicsIG4pO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNFRTogQ2hlY2sgZm9yIHVuZGVmaW5lZCBpbiByYXJnc1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZSguLi5yYXJncyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmF2aWdhdGUoXG4gICAgcGFyYW1zPzogeyBbaW5kZXg6IHN0cmluZ106IFQgfSxcbiAgICByb3V0ZXI/OiBSb3V0ZXJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHJvdXRlcikge1xuICAgICAgcmV0dXJuIHJvdXRlci5uYXZpZ2F0ZSh0aGlzLnJvdXRlKHBhcmFtcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcm91dGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKHRoaXMucm91dGUocGFyYW1zKSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ1JvdXRlciBub3QgcHJvdmlkZWQsIG5vIG5hdmlnYXRpb24nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from "./interfaces";
|
|
2
|
+
export * from "./ng-file-drop.directive";
|
|
3
|
+
export * from "./ng-file-select.directive";
|
|
4
|
+
export * from "./ngx-uploader.class";
|
|
5
|
+
export * from "./ngx-uploader.module";
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvdXBsb2FkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25nLWZpbGUtZHJvcC5kaXJlY3RpdmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25nLWZpbGUtc2VsZWN0LmRpcmVjdGl2ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmd4LXVwbG9hZGVyLmNsYXNzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uZ3gtdXBsb2FkZXIubW9kdWxlXCI7XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var UploadStatus;
|
|
2
|
+
(function (UploadStatus) {
|
|
3
|
+
UploadStatus[UploadStatus["Queue"] = 0] = "Queue";
|
|
4
|
+
UploadStatus[UploadStatus["Uploading"] = 1] = "Uploading";
|
|
5
|
+
UploadStatus[UploadStatus["Done"] = 2] = "Done";
|
|
6
|
+
UploadStatus[UploadStatus["Cancelled"] = 3] = "Cancelled";
|
|
7
|
+
})(UploadStatus || (UploadStatus = {}));
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi91cGxvYWRlci9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBTixJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsaURBQUssQ0FBQTtJQUNMLHlEQUFTLENBQUE7SUFDVCwrQ0FBSSxDQUFBO0lBQ0oseURBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxZQUFZLEtBQVosWUFBWSxRQUt2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZGVyT3B0aW9ucyB7XG4gIGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gIGFsbG93ZWRDb250ZW50VHlwZXM/OiBzdHJpbmdbXTtcbiAgbWF4VXBsb2Fkcz86IG51bWJlcjtcbiAgbWF4RmlsZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvYkZpbGUgZXh0ZW5kcyBCbG9iIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge1xuICBRdWV1ZSxcbiAgVXBsb2FkaW5nLFxuICBEb25lLFxuICBDYW5jZWxsZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRQcm9ncmVzcyB7XG4gIHN0YXR1czogVXBsb2FkU3RhdHVzO1xuICBkYXRhPzoge1xuICAgIHBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICBzcGVlZDogbnVtYmVyO1xuICAgIHNwZWVkSHVtYW46IHN0cmluZztcbiAgICBzdGFydFRpbWU6IG51bWJlciB8IG51bGw7XG4gICAgZW5kVGltZTogbnVtYmVyIHwgbnVsbDtcbiAgICBldGE6IG51bWJlciB8IG51bGw7XG4gICAgZXRhSHVtYW46IHN0cmluZyB8IG51bGw7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkRmlsZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGZpbGVJbmRleDogbnVtYmVyO1xuICBsYXN0TW9kaWZpZWREYXRlOiBEYXRlO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNpemU6IG51bWJlcjtcbiAgdHlwZTogc3RyaW5nO1xuICBmb3JtOiBGb3JtRGF0YTtcbiAgcHJvZ3Jlc3M6IFVwbG9hZFByb2dyZXNzO1xuICByZXNwb25zZT86IGFueTtcbiAgcmVzcG9uc2VTdGF0dXM/OiBudW1iZXI7XG4gIHN1Yj86IFN1YnNjcmlwdGlvbiB8IGFueTtcbiAgbmF0aXZlRmlsZT86IEZpbGU7XG4gIHJlc3BvbnNlSGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkT3V0cHV0IHtcbiAgdHlwZTogXCJhZGRlZFRvUXVldWVcIiB8IFwiYWxsQWRkZWRUb1F1ZXVlXCIgfCBcInVwbG9hZGluZ1wiIHwgXCJkb25lXCIgfCBcInN0YXJ0XCIgfCBcImNhbmNlbGxlZFwiIHwgXCJkcmFnT3ZlclwiXG4gICAgfCBcImRyYWdPdXRcIiB8IFwiZHJvcFwiIHwgXCJyZW1vdmVkXCIgfCBcInJlbW92ZWRBbGxcIiB8IFwicmVqZWN0ZWRcIjtcbiAgZmlsZT86IFVwbG9hZEZpbGU7XG4gIG5hdGl2ZUZpbGU/OiBGaWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZElucHV0IHtcbiAgdHlwZTogXCJ1cGxvYWRBbGxcIiB8IFwidXBsb2FkRmlsZVwiIHwgXCJjYW5jZWxcIiB8IFwiY2FuY2VsQWxsXCIgfCBcInJlbW92ZVwiIHwgXCJyZW1vdmVBbGxcIjtcbiAgdXJsPzogc3RyaW5nO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBmaWVsZE5hbWU/OiBzdHJpbmc7XG4gIGZpbGVJbmRleD86IG51bWJlcjtcbiAgZmlsZT86IFVwbG9hZEZpbGU7XG4gIGRhdGE/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IEJsb2IgfTtcbiAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIGluY2x1ZGVXZWJLaXRGb3JtQm91bmRhcnk/OiBib29sZWFuOyAvLyBJZiBmYWxzZSwgb25seSB0aGUgZmlsZSBpcyBzZW5kIHRyb3VnaCB4aHIuc2VuZCAoV2ViS2l0Rm9ybUJvdW5kYXJ5IGlzIG9taXQpXG4gIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostListener, Input, Output } from "@angular/core";
|
|
2
|
+
import { DataUploaderService } from "./ngx-uploader.class";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgFileDropDirective {
|
|
5
|
+
constructor(elementRef) {
|
|
6
|
+
this.elementRef = elementRef;
|
|
7
|
+
this.stopEvent = (e) => {
|
|
8
|
+
e.stopPropagation();
|
|
9
|
+
e.preventDefault();
|
|
10
|
+
};
|
|
11
|
+
this.uploadOutput = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
this._sub = [];
|
|
15
|
+
const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;
|
|
16
|
+
const allowedContentTypes = this.options && this.options.allowedContentTypes || ["*"];
|
|
17
|
+
const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;
|
|
18
|
+
const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;
|
|
19
|
+
this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);
|
|
20
|
+
this.el = this.elementRef.nativeElement;
|
|
21
|
+
this._sub.push(this.upload.serviceEvents.subscribe((event) => {
|
|
22
|
+
this.uploadOutput.emit(event);
|
|
23
|
+
}));
|
|
24
|
+
if (this.uploadInput instanceof EventEmitter) {
|
|
25
|
+
this._sub.push(this.upload.initInputEvents(this.uploadInput));
|
|
26
|
+
}
|
|
27
|
+
this.el.addEventListener("drop", this.stopEvent, false);
|
|
28
|
+
this.el.addEventListener("dragenter", this.stopEvent, false);
|
|
29
|
+
this.el.addEventListener("dragover", this.stopEvent, false);
|
|
30
|
+
}
|
|
31
|
+
ngOnDestroy() {
|
|
32
|
+
if (this._sub) {
|
|
33
|
+
this._sub.forEach(sub => sub.unsubscribe());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
onDrop(e) {
|
|
37
|
+
e.stopPropagation();
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
const event = { type: "drop" };
|
|
40
|
+
this.uploadOutput.emit(event);
|
|
41
|
+
this.upload.handleFiles(e.dataTransfer.files);
|
|
42
|
+
}
|
|
43
|
+
onDragOver(e) {
|
|
44
|
+
if (!e) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const event = { type: "dragOver" };
|
|
48
|
+
this.uploadOutput.emit(event);
|
|
49
|
+
}
|
|
50
|
+
onDragLeave(e) {
|
|
51
|
+
if (!e) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const event = { type: "dragOut" };
|
|
55
|
+
this.uploadOutput.emit(event);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
NgFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgFileDropDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
59
|
+
NgFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.9", type: NgFileDropDirective, selector: "[dataFileDrop]", inputs: { options: "options", uploadInput: "uploadInput" }, outputs: { uploadOutput: "uploadOutput" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" } }, ngImport: i0 });
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgFileDropDirective, decorators: [{
|
|
61
|
+
type: Directive,
|
|
62
|
+
args: [{
|
|
63
|
+
selector: "[dataFileDrop]"
|
|
64
|
+
}]
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { options: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], uploadInput: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], uploadOutput: [{
|
|
70
|
+
type: Output
|
|
71
|
+
}], onDrop: [{
|
|
72
|
+
type: HostListener,
|
|
73
|
+
args: ["drop", ["$event"]]
|
|
74
|
+
}], onDragOver: [{
|
|
75
|
+
type: HostListener,
|
|
76
|
+
args: ["dragover", ["$event"]]
|
|
77
|
+
}], onDragLeave: [{
|
|
78
|
+
type: HostListener,
|
|
79
|
+
args: ["dragleave", ["$event"]]
|
|
80
|
+
}] } });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZmlsZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi91cGxvYWRlci9uZy1maWxlLWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVsSCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNekQsTUFBTSxPQUFPLG1CQUFtQjtJQVU5QixZQUFtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbUN6QyxjQUFTLEdBQUcsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUN2QixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQXJDQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFP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QUM7Z0JBVzdCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7VXBsb2FkZXJPcHRpb25zLCBVcGxvYWRJbnB1dCwgVXBsb2FkT3V0cHV0fSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge0RhdGFVcGxvYWRlclNlcnZpY2V9IGZyb20gXCIuL25neC11cGxvYWRlci5jbGFzc1wiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZGF0YUZpbGVEcm9wXVwiXG59KVxuZXhwb3J0IGNsYXNzIE5nRmlsZURyb3BEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG9wdGlvbnMhOiBVcGxvYWRlck9wdGlvbnM7XG4gIEBJbnB1dCgpIHVwbG9hZElucHV0ITogRXZlbnRFbWl0dGVyPFVwbG9hZElucHV0PjtcbiAgQE91dHB1dCgpIHVwbG9hZE91dHB1dDogRXZlbnRFbWl0dGVyPFVwbG9hZE91dHB1dD47XG5cbiAgcHVibGljIHVwbG9hZCE6IERhdGFVcGxvYWRlclNlcnZpY2U7XG4gIHB1YmxpYyBlbCE6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBfc3ViITogU3Vic2NyaXB0aW9uW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLnVwbG9hZE91dHB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8VXBsb2FkT3V0cHV0PigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc3ViID0gW107XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5IHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBjb25zdCBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hbGxvd2VkQ29udGVudFR5cGVzIHx8IFtcIipcIl07XG4gICAgY29uc3QgbWF4VXBsb2FkcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4VXBsb2FkcyB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgY29uc3QgbWF4RmlsZVNpemUgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1heEZpbGVTaXplIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB0aGlzLnVwbG9hZCA9IG5ldyBEYXRhVXBsb2FkZXJTZXJ2aWNlKGNvbmN1cnJlbmN5LCBhbGxvd2VkQ29udGVudFR5cGVzLCBtYXhVcGxvYWRzLCBtYXhGaWxlU2l6ZSk7XG5cbiAgICB0aGlzLmVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLl9zdWIucHVzaChcbiAgICAgIHRoaXMudXBsb2FkLnNlcnZpY2VFdmVudHMuc3Vic2NyaWJlKChldmVudDogVXBsb2FkT3V0cHV0KSA9PiB7XG4gICAgICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQoZXZlbnQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMudXBsb2FkSW5wdXQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgIHRoaXMuX3N1Yi5wdXNoKHRoaXMudXBsb2FkLmluaXRJbnB1dEV2ZW50cyh0aGlzLnVwbG9hZElucHV0KSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCB0aGlzLnN0b3BFdmVudCwgZmFsc2UpO1xuICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdlbnRlclwiLCB0aGlzLnN0b3BFdmVudCwgZmFsc2UpO1xuICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdvdmVyXCIsIHRoaXMuc3RvcEV2ZW50LCBmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fc3ViKSB7XG4gICAgICB0aGlzLl9zdWIuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BFdmVudCA9IChlOiBFdmVudCkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIEBIb3N0TGlzdGVuZXIoXCJkcm9wXCIsIFtcIiRldmVudFwiXSlcbiAgcHVibGljIG9uRHJvcChlOiBhbnkpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGV2ZW50OiBVcGxvYWRPdXRwdXQgPSB7dHlwZTogXCJkcm9wXCJ9O1xuICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQoZXZlbnQpO1xuICAgIHRoaXMudXBsb2FkLmhhbmRsZUZpbGVzKGUuZGF0YVRyYW5zZmVyLmZpbGVzKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJkcmFnb3ZlclwiLCBbXCIkZXZlbnRcIl0pXG4gIHB1YmxpYyBvbkRyYWdPdmVyKGU6IEV2ZW50KSB7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnQ6IFVwbG9hZE91dHB1dCA9IHt0eXBlOiBcImRyYWdPdmVyXCJ9O1xuICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcImRyYWdsZWF2ZVwiLCBbXCIkZXZlbnRcIl0pXG4gIHB1YmxpYyBvbkRyYWdMZWF2ZShlOiBFdmVudCkge1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50OiBVcGxvYWRPdXRwdXQgPSB7dHlwZTogXCJkcmFnT3V0XCJ9O1xuICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQoZXZlbnQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Input, Output } from "@angular/core";
|
|
2
|
+
import { DataUploaderService } from "./ngx-uploader.class";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgFileSelectDirective {
|
|
5
|
+
constructor(elementRef) {
|
|
6
|
+
this.elementRef = elementRef;
|
|
7
|
+
this.fileListener = () => {
|
|
8
|
+
if (this.el.files) {
|
|
9
|
+
this.upload.handleFiles(this.el.files);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
this.uploadOutput = new EventEmitter();
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this._sub = [];
|
|
16
|
+
const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;
|
|
17
|
+
const allowedContentTypes = this.options && this.options.allowedContentTypes || ["*"];
|
|
18
|
+
const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;
|
|
19
|
+
const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;
|
|
20
|
+
this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);
|
|
21
|
+
this.el = this.elementRef.nativeElement;
|
|
22
|
+
this.el.addEventListener("change", this.fileListener, false);
|
|
23
|
+
this._sub.push(this.upload.serviceEvents.subscribe((event) => {
|
|
24
|
+
this.uploadOutput.emit(event);
|
|
25
|
+
}));
|
|
26
|
+
if (this.uploadInput instanceof EventEmitter) {
|
|
27
|
+
this._sub.push(this.upload.initInputEvents(this.uploadInput));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ngOnDestroy() {
|
|
31
|
+
if (this.el) {
|
|
32
|
+
this.el.removeEventListener("change", this.fileListener, false);
|
|
33
|
+
this._sub.forEach(sub => sub.unsubscribe());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
NgFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgFileSelectDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
38
|
+
NgFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.9", type: NgFileSelectDirective, selector: "[dataFileSelect]", inputs: { options: "options", uploadInput: "uploadInput" }, outputs: { uploadOutput: "uploadOutput" }, ngImport: i0 });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgFileSelectDirective, decorators: [{
|
|
40
|
+
type: Directive,
|
|
41
|
+
args: [{
|
|
42
|
+
selector: "[dataFileSelect]"
|
|
43
|
+
}]
|
|
44
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { options: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}], uploadInput: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}], uploadOutput: [{
|
|
49
|
+
type: Output
|
|
50
|
+
}] } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL3VwbG9hZGVyL25nLWZpbGUtc2VsZWN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNekQsTUFBTSxPQUFPLHFCQUFxQjtJQVVoQyxZQUFtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBaUN6QyxpQkFBWSxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDO1FBcENBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3pGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDdkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDekYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFakcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsV0FBVyxZQUFZLFlBQVksRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQzs7a0hBekNVLHFCQUFxQjtzR0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7aUdBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtVcGxvYWRlck9wdGlvbnMsIFVwbG9hZE91dHB1dH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEYXRhVXBsb2FkZXJTZXJ2aWNlfSBmcm9tIFwiLi9uZ3gtdXBsb2FkZXIuY2xhc3NcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2RhdGFGaWxlU2VsZWN0XVwiXG59KVxuZXhwb3J0IGNsYXNzIE5nRmlsZVNlbGVjdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgb3B0aW9ucyE6IFVwbG9hZGVyT3B0aW9ucztcbiAgQElucHV0KCkgdXBsb2FkSW5wdXQhOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIHVwbG9hZE91dHB1dDogRXZlbnRFbWl0dGVyPFVwbG9hZE91dHB1dD47XG5cbiAgcHVibGljIHVwbG9hZCE6IERhdGFVcGxvYWRlclNlcnZpY2U7XG4gIHB1YmxpYyBlbCE6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBfc3ViITogU3Vic2NyaXB0aW9uW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLnVwbG9hZE91dHB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8VXBsb2FkT3V0cHV0PigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc3ViID0gW107XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5IHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBjb25zdCBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hbGxvd2VkQ29udGVudFR5cGVzIHx8IFtcIipcIl07XG4gICAgY29uc3QgbWF4VXBsb2FkcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4VXBsb2FkcyB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgY29uc3QgbWF4RmlsZVNpemUgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1heEZpbGVTaXplIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB0aGlzLnVwbG9hZCA9IG5ldyBEYXRhVXBsb2FkZXJTZXJ2aWNlKGNvbmN1cnJlbmN5LCBhbGxvd2VkQ29udGVudFR5cGVzLCBtYXhVcGxvYWRzLCBtYXhGaWxlU2l6ZSk7XG5cbiAgICB0aGlzLmVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuZmlsZUxpc3RlbmVyLCBmYWxzZSk7XG5cbiAgICB0aGlzLl9zdWIucHVzaChcbiAgICAgIHRoaXMudXBsb2FkLnNlcnZpY2VFdmVudHMuc3Vic2NyaWJlKChldmVudDogVXBsb2FkT3V0cHV0KSA9PiB7XG4gICAgICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQoZXZlbnQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMudXBsb2FkSW5wdXQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgIHRoaXMuX3N1Yi5wdXNoKHRoaXMudXBsb2FkLmluaXRJbnB1dEV2ZW50cyh0aGlzLnVwbG9hZElucHV0KSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZWwpIHtcbiAgICAgIHRoaXMuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLmZpbGVMaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgdGhpcy5fc3ViLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB9XG4gIH1cblxuICBmaWxlTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZWwuZmlsZXMpIHtcbiAgICAgIHRoaXMudXBsb2FkLmhhbmRsZUZpbGVzKHRoaXMuZWwuZmlsZXMpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|