@indice/ng-components 0.2.110 → 0.2.113
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/esm2020/indice-ng-components.mjs +5 -0
- package/esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs +48 -0
- package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
- package/esm2020/lib/controls/date-picker/date-picker.component.mjs +260 -0
- package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +68 -0
- package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +36 -0
- package/esm2020/lib/controls/list-view/list-column.component.mjs +25 -0
- package/esm2020/lib/controls/list-view/list-details-section.component.mjs +17 -0
- package/esm2020/lib/controls/list-view/list-tile.component.mjs +17 -0
- package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
- package/esm2020/lib/controls/list-view/list-view.component.mjs +184 -0
- package/esm2020/lib/controls/pager/pager.component.mjs +130 -0
- package/esm2020/lib/controls/side-pane/side-pane.component.mjs +72 -0
- package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +25 -0
- package/esm2020/lib/controls/toaster/toaster-container.component.mjs +28 -0
- package/esm2020/lib/controls/toaster/toaster.component.mjs +31 -0
- package/esm2020/lib/controls/toggle/toggle.component.mjs +64 -0
- package/esm2020/lib/directives/click-outside.directive.mjs +189 -0
- package/esm2020/lib/directives/dynamic-component-host.directive.mjs +17 -0
- package/esm2020/lib/helpers/base-list.component.mjs +181 -0
- package/{esm2015/lib/icons.js → esm2020/lib/icons.mjs} +0 -0
- package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
- package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +113 -0
- package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +101 -0
- package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +80 -0
- package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +51 -0
- package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +98 -0
- package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
- package/esm2020/lib/ng-components.module.mjs +215 -0
- package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +30 -0
- package/esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs +31 -0
- package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
- package/esm2020/lib/pages/http-status/error/error.component.mjs +17 -0
- package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
- package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
- package/esm2020/lib/pipes/address.pipe.mjs +21 -0
- package/esm2020/lib/pipes/duration-format.pipe.mjs +64 -0
- package/{esm2015/lib/services/component-loader/component-loader-options.class.js → esm2020/lib/services/component-loader/component-loader-options.class.mjs} +0 -0
- package/esm2020/lib/services/component-loader/component-loader.class.mjs +188 -0
- package/esm2020/lib/services/component-loader/component-loader.factory.mjs +32 -0
- package/{esm2015/lib/services/component-loader/content-ref.class.js → esm2020/lib/services/component-loader/content-ref.class.mjs} +0 -0
- package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
- package/esm2020/lib/services/modal-service/modal-container-component.mjs +126 -0
- package/esm2020/lib/services/modal-service/modal-options.class.mjs +34 -0
- package/esm2020/lib/services/modal-service/modal-service.mjs +219 -0
- package/{esm2015/lib/services/modal-service/modal-styles.class.js → esm2020/lib/services/modal-service/modal-styles.class.mjs} +0 -0
- package/esm2020/lib/services/modal-service/modal.class.mjs +27 -0
- package/esm2020/lib/services/toaster.service.mjs +24 -0
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/{esm2015/lib/types.js → esm2020/lib/types.mjs} +0 -0
- package/esm2020/public-api.mjs +54 -0
- package/fesm2015/indice-ng-components.mjs +3129 -0
- package/fesm2015/indice-ng-components.mjs.map +1 -0
- package/fesm2020/indice-ng-components.mjs +3088 -0
- package/fesm2020/indice-ng-components.mjs.map +1 -0
- package/indice-ng-components.d.ts +1 -2
- package/lib/controls/avatar-initials/avatar-initials.component.d.ts +3 -0
- package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +3 -0
- package/lib/controls/date-picker/date-picker.component.d.ts +3 -0
- package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +3 -0
- package/lib/controls/kpi-tile/kpi-tile.component.d.ts +3 -0
- package/lib/controls/list-view/list-column.component.d.ts +3 -0
- package/lib/controls/list-view/list-details-section.component.d.ts +3 -0
- package/lib/controls/list-view/list-tile.component.d.ts +3 -0
- package/lib/controls/list-view/list-view-empty-state.component.d.ts +3 -0
- package/lib/controls/list-view/list-view.component.d.ts +3 -0
- package/lib/controls/pager/pager.component.d.ts +3 -0
- package/lib/controls/side-pane/side-pane.component.d.ts +3 -0
- package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +3 -0
- package/lib/controls/toaster/toaster-container.component.d.ts +3 -0
- package/lib/controls/toaster/toaster.component.d.ts +3 -0
- package/lib/controls/toggle/toggle.component.d.ts +3 -0
- package/lib/directives/click-outside.directive.d.ts +3 -0
- package/lib/directives/dynamic-component-host.directive.d.ts +3 -0
- package/lib/helpers/base-list.component.d.ts +3 -0
- package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +3 -0
- package/lib/layouts/shell/shell-header/shell-header.component.d.ts +3 -0
- package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +3 -0
- package/lib/layouts/views/form-layout/form-layout.component.d.ts +3 -0
- package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +3 -0
- package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +3 -0
- package/lib/layouts/views/view-layout/view-layout.component.d.ts +3 -0
- package/lib/ng-components.module.d.ts +40 -0
- package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +3 -0
- package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +3 -0
- package/lib/pages/auth/logged-out/logged-out.component.d.ts +3 -0
- package/lib/pages/http-status/error/error.component.d.ts +3 -0
- package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +3 -0
- package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +3 -0
- package/lib/pipes/address.pipe.d.ts +3 -0
- package/lib/pipes/duration-format.pipe.d.ts +3 -0
- package/lib/services/component-loader/component-loader.factory.d.ts +3 -0
- package/lib/services/modal-service/modal-backdrop-component.d.ts +3 -0
- package/lib/services/modal-service/modal-container-component.d.ts +3 -0
- package/lib/services/modal-service/modal-options.class.d.ts +3 -0
- package/lib/services/modal-service/modal-service.d.ts +3 -0
- package/lib/services/modal-service/modal.class.d.ts +3 -0
- package/lib/services/toaster.service.d.ts +3 -0
- package/package.json +19 -7
- package/public-api.d.ts +1 -0
- package/bundles/indice-ng-components.umd.js +0 -3417
- package/bundles/indice-ng-components.umd.js.map +0 -1
- package/esm2015/indice-ng-components.js +0 -7
- package/esm2015/lib/controls/avatar-initials/avatar-initials.component.js +0 -47
- package/esm2015/lib/controls/collapsible-panel/collapsible-panel.component.js +0 -20
- package/esm2015/lib/controls/date-picker/date-picker.component.js +0 -251
- package/esm2015/lib/controls/drop-down-menu/drop-down-menu.component.js +0 -62
- package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +0 -32
- package/esm2015/lib/controls/list-view/list-column.component.js +0 -19
- package/esm2015/lib/controls/list-view/list-details-section.component.js +0 -14
- package/esm2015/lib/controls/list-view/list-tile.component.js +0 -14
- package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +0 -25
- package/esm2015/lib/controls/list-view/list-view.component.js +0 -150
- package/esm2015/lib/controls/pager/pager.component.js +0 -115
- package/esm2015/lib/controls/side-pane/side-pane.component.js +0 -71
- package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +0 -25
- package/esm2015/lib/controls/toaster/toaster-container.component.js +0 -28
- package/esm2015/lib/controls/toaster/toaster.component.js +0 -29
- package/esm2015/lib/controls/toggle/toggle.component.js +0 -57
- package/esm2015/lib/directives/click-outside.directive.js +0 -181
- package/esm2015/lib/directives/dynamic-component-host.directive.js +0 -17
- package/esm2015/lib/helpers/base-list.component.js +0 -182
- package/esm2015/lib/layouts/shell/shell-footer/shell-footer.component.js +0 -17
- package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +0 -99
- package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +0 -96
- package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +0 -73
- package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +0 -47
- package/esm2015/lib/layouts/views/side-view-layout/side-view-layout.component.js +0 -84
- package/esm2015/lib/layouts/views/view-layout/view-layout.component.js +0 -95
- package/esm2015/lib/ng-components.module.js +0 -133
- package/esm2015/lib/pages/auth/auth-callback/auth-callback.component.js +0 -29
- package/esm2015/lib/pages/auth/auth-renew/auth-renew.component.js +0 -27
- package/esm2015/lib/pages/auth/logged-out/logged-out.component.js +0 -26
- package/esm2015/lib/pages/http-status/error/error.component.js +0 -15
- package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +0 -14
- package/esm2015/lib/pages/http-status/unauthorized/unauthorized.component.js +0 -13
- package/esm2015/lib/pipes/address.pipe.js +0 -17
- package/esm2015/lib/pipes/duration-format.pipe.js +0 -60
- package/esm2015/lib/services/component-loader/component-loader.class.js +0 -192
- package/esm2015/lib/services/component-loader/component-loader.factory.js +0 -35
- package/esm2015/lib/services/modal-service/modal-backdrop-component.js +0 -44
- package/esm2015/lib/services/modal-service/modal-container-component.js +0 -117
- package/esm2015/lib/services/modal-service/modal-options.class.js +0 -31
- package/esm2015/lib/services/modal-service/modal-service.js +0 -214
- package/esm2015/lib/services/modal-service/modal.class.js +0 -24
- package/esm2015/lib/services/toaster.service.js +0 -23
- package/esm2015/public-api.js +0 -53
- package/fesm2015/indice-ng-components.js +0 -2899
- package/fesm2015/indice-ng-components.js.map +0 -1
- package/indice-ng-components.metadata.json +0 -1
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// https://github.com/arkon/ng-click-outside
|
|
3
|
-
// the project is inactive - so imoved the directive code in our project
|
|
4
|
-
//
|
|
5
|
-
import { Directive, ElementRef, EventEmitter, Inject, Input, Output, PLATFORM_ID, NgZone, } from '@angular/core';
|
|
6
|
-
import { isPlatformBrowser } from '@angular/common';
|
|
7
|
-
// tslint:disable-next-line:directive-selector
|
|
8
|
-
export class ClickOutsideDirective {
|
|
9
|
-
constructor(
|
|
10
|
-
// tslint:disable-next-line:variable-name
|
|
11
|
-
_el,
|
|
12
|
-
// tslint:disable-next-line:variable-name
|
|
13
|
-
_ngZone, platformId) {
|
|
14
|
-
this._el = _el;
|
|
15
|
-
this._ngZone = _ngZone;
|
|
16
|
-
this.platformId = platformId;
|
|
17
|
-
this.clickOutsideEnabled = true;
|
|
18
|
-
this.attachOutsideOnClick = false;
|
|
19
|
-
this.delayClickOutsideInit = false;
|
|
20
|
-
this.emitOnBlur = false;
|
|
21
|
-
this.exclude = '';
|
|
22
|
-
this.excludeBeforeClick = false;
|
|
23
|
-
this.clickOutsideEvents = '';
|
|
24
|
-
this.clickOutside = new EventEmitter();
|
|
25
|
-
// tslint:disable-next-line:variable-name
|
|
26
|
-
this._nodesExcluded = [];
|
|
27
|
-
// tslint:disable-next-line:variable-name
|
|
28
|
-
this._events = ['click'];
|
|
29
|
-
this._initOnClickBody = this._initOnClickBody.bind(this);
|
|
30
|
-
this._onClickBody = this._onClickBody.bind(this);
|
|
31
|
-
this._onWindowBlur = this._onWindowBlur.bind(this);
|
|
32
|
-
}
|
|
33
|
-
ngOnInit() {
|
|
34
|
-
if (!isPlatformBrowser(this.platformId)) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
this._init();
|
|
38
|
-
}
|
|
39
|
-
ngOnDestroy() {
|
|
40
|
-
if (!isPlatformBrowser(this.platformId)) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
this._removeClickOutsideListener();
|
|
44
|
-
this._removeAttachOutsideOnClickListener();
|
|
45
|
-
this._removeWindowBlurListener();
|
|
46
|
-
}
|
|
47
|
-
ngOnChanges(changes) {
|
|
48
|
-
if (!isPlatformBrowser(this.platformId)) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
// tslint:disable-next-line:no-string-literal
|
|
52
|
-
if (changes['attachOutsideOnClick'] || changes['exclude'] || changes['emitOnBlur']) {
|
|
53
|
-
this._init();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
_init() {
|
|
57
|
-
if (this.clickOutsideEvents !== '') {
|
|
58
|
-
this._events = this.clickOutsideEvents.split(',').map(e => e.trim());
|
|
59
|
-
}
|
|
60
|
-
this._excludeCheck();
|
|
61
|
-
if (this.attachOutsideOnClick) {
|
|
62
|
-
this._initAttachOutsideOnClickListener();
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this._initOnClickBody();
|
|
66
|
-
}
|
|
67
|
-
if (this.emitOnBlur) {
|
|
68
|
-
this._initWindowBlurListener();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
_initOnClickBody() {
|
|
72
|
-
if (this.delayClickOutsideInit) {
|
|
73
|
-
setTimeout(this._initClickOutsideListener.bind(this));
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
this._initClickOutsideListener();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
_excludeCheck() {
|
|
80
|
-
if (this.exclude) {
|
|
81
|
-
try {
|
|
82
|
-
const nodes = Array.from(document.querySelectorAll(this.exclude));
|
|
83
|
-
if (nodes) {
|
|
84
|
-
this._nodesExcluded = nodes;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
console.error('[ng-click-outside] Check your exclude selector syntax.', err);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
_onClickBody(ev) {
|
|
93
|
-
if (!this.clickOutsideEnabled) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (this.excludeBeforeClick) {
|
|
97
|
-
this._excludeCheck();
|
|
98
|
-
}
|
|
99
|
-
if (!this._el.nativeElement.contains(ev.target) && !this._shouldExclude(ev.target)) {
|
|
100
|
-
this._emit(ev);
|
|
101
|
-
if (this.attachOutsideOnClick) {
|
|
102
|
-
this._removeClickOutsideListener();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Resolves problem with outside click on iframe
|
|
108
|
-
* @see https://github.com/arkon/ng-click-outside/issues/32
|
|
109
|
-
*/
|
|
110
|
-
_onWindowBlur(ev) {
|
|
111
|
-
setTimeout(() => {
|
|
112
|
-
if (!document.hidden) {
|
|
113
|
-
this._emit(ev);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
_emit(ev) {
|
|
118
|
-
if (!this.clickOutsideEnabled) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
this._ngZone.run(() => this.clickOutside.emit(ev));
|
|
122
|
-
}
|
|
123
|
-
_shouldExclude(target) {
|
|
124
|
-
// tslint:disable-next-line:prefer-const
|
|
125
|
-
for (let excludedNode of this._nodesExcluded) {
|
|
126
|
-
if (excludedNode.contains(target)) {
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
_initClickOutsideListener() {
|
|
133
|
-
this._ngZone.runOutsideAngular(() => {
|
|
134
|
-
this._events.forEach(e => document.addEventListener(e, this._onClickBody));
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
_removeClickOutsideListener() {
|
|
138
|
-
this._ngZone.runOutsideAngular(() => {
|
|
139
|
-
this._events.forEach(e => document.removeEventListener(e, this._onClickBody));
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
_initAttachOutsideOnClickListener() {
|
|
143
|
-
this._ngZone.runOutsideAngular(() => {
|
|
144
|
-
this._events.forEach(e => this._el.nativeElement.addEventListener(e, this._initOnClickBody));
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
_removeAttachOutsideOnClickListener() {
|
|
148
|
-
this._ngZone.runOutsideAngular(() => {
|
|
149
|
-
this._events.forEach(e => this._el.nativeElement.removeEventListener(e, this._initOnClickBody));
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
_initWindowBlurListener() {
|
|
153
|
-
this._ngZone.runOutsideAngular(() => {
|
|
154
|
-
window.addEventListener('blur', this._onWindowBlur);
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
_removeWindowBlurListener() {
|
|
158
|
-
this._ngZone.runOutsideAngular(() => {
|
|
159
|
-
window.removeEventListener('blur', this._onWindowBlur);
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
ClickOutsideDirective.decorators = [
|
|
164
|
-
{ type: Directive, args: [{ selector: '[clickOutside]' },] }
|
|
165
|
-
];
|
|
166
|
-
ClickOutsideDirective.ctorParameters = () => [
|
|
167
|
-
{ type: ElementRef },
|
|
168
|
-
{ type: NgZone },
|
|
169
|
-
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
|
|
170
|
-
];
|
|
171
|
-
ClickOutsideDirective.propDecorators = {
|
|
172
|
-
clickOutsideEnabled: [{ type: Input }],
|
|
173
|
-
attachOutsideOnClick: [{ type: Input }],
|
|
174
|
-
delayClickOutsideInit: [{ type: Input }],
|
|
175
|
-
emitOnBlur: [{ type: Input }],
|
|
176
|
-
exclude: [{ type: Input }],
|
|
177
|
-
excludeBeforeClick: [{ type: Input }],
|
|
178
|
-
clickOutsideEvents: [{ type: Input }],
|
|
179
|
-
clickOutside: [{ type: Output }]
|
|
180
|
-
};
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxFQUFFO0FBQ0YsNENBQTRDO0FBQzVDLHdFQUF3RTtBQUN4RSxFQUFFO0FBQ0YsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLFdBQVcsRUFFWCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsOENBQThDO0FBRTlDLE1BQU0sT0FBTyxxQkFBcUI7SUFvQmhDO0lBQ0UseUNBQXlDO0lBQ2pDLEdBQWU7SUFDdkIseUNBQXlDO0lBQ2pDLE9BQWUsRUFDTSxVQUFlO1FBSHBDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFFZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ00sZUFBVSxHQUFWLFVBQVUsQ0FBSztRQXZCckMsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUV2QixpQkFBWSxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO1FBRXhFLHlDQUF5QztRQUNqQyxtQkFBYyxHQUF1QixFQUFFLENBQUM7UUFDaEQseUNBQXlDO1FBQ2pDLFlBQU8sR0FBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQVF6QyxJQUFJLENBQUMs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dEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBN0tGLFNBQVMsU0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTs7O1lBZnZDLFVBQVU7WUFVVixNQUFNOzRDQStCSCxNQUFNLFNBQUMsV0FBVzs7O2tDQXZCcEIsS0FBSzttQ0FFTCxLQUFLO29DQUNMLEtBQUs7eUJBQ0wsS0FBSztzQkFFTCxLQUFLO2lDQUNMLEtBQUs7aUNBRUwsS0FBSzsyQkFFTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy9cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fya29uL25nLWNsaWNrLW91dHNpZGVcclxuLy8gdGhlIHByb2plY3QgaXMgaW5hY3RpdmUgLSBzbyBpbW92ZWQgdGhlIGRpcmVjdGl2ZSBjb2RlIGluIG91ciBwcm9qZWN0XHJcbi8vXHJcbmltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBOZ1pvbmUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NsaWNrT3V0c2lkZV0nIH0pXHJcbmV4cG9ydCBjbGFzcyBDbGlja091dHNpZGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgY2xpY2tPdXRzaWRlRW5hYmxlZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGF0dGFjaE91dHNpZGVPbkNsaWNrID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGVsYXlDbGlja091dHNpZGVJbml0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW1pdE9uQmx1ciA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBleGNsdWRlID0gJyc7XHJcbiAgQElucHV0KCkgZXhjbHVkZUJlZm9yZUNsaWNrID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGNsaWNrT3V0c2lkZUV2ZW50cyA9ICcnO1xyXG5cclxuICBAT3V0cHV0KCkgY2xpY2tPdXRzaWRlOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9ub2Rlc0V4Y2x1ZGVkOiBBcnJheTxIVE1MRWxlbWVudD4gPSBbXTtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxyXG4gIHByaXZhdGUgX2V2ZW50czogQXJyYXk8c3RyaW5nPiA9IFsnY2xpY2snXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxyXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxyXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSkge1xyXG4gICAgdGhpcy5faW5pdE9uQ2xpY2tCb2R5ID0gdGhpcy5faW5pdE9uQ2xpY2tCb2R5LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9vbkNsaWNrQm9keSA9IHRoaXMuX29uQ2xpY2tCb2R5LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9vbldpbmRvd0JsdXIgPSB0aGlzLl9vbldpbmRvd0JsdXIuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuX2luaXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuX3JlbW92ZUNsaWNrT3V0c2lkZUxpc3RlbmVyKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVBdHRhY2hPdXRzaWRlT25DbGlja0xpc3RlbmVyKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVXaW5kb3dCbHVyTGlzdGVuZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcclxuICAgIGlmIChjaGFuZ2VzWydhdHRhY2hPdXRzaWRlT25DbGljayddIHx8IGNoYW5nZXNbJ2V4Y2x1ZGUnXSB8fCBjaGFuZ2VzWydlbWl0T25CbHVyJ10pIHtcclxuICAgICAgdGhpcy5faW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNsaWNrT3V0c2lkZUV2ZW50cyAhPT0gJycpIHtcclxuICAgICAgdGhpcy5fZXZlbnRzID0gdGhpcy5jbGlja091dHNpZGVFdmVudHMuc3BsaXQoJywnKS5tYXAoZSA9PiBlLnRyaW0oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZXhjbHVkZUNoZWNrKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0YWNoT3V0c2lkZU9uQ2xpY2spIHtcclxuICAgICAgdGhpcy5faW5pdEF0dGFjaE91dHNpZGVPbkNsaWNrTGlzdGVuZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2luaXRPbkNsaWNrQm9keSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVtaXRPbkJsdXIpIHtcclxuICAgICAgdGhpcy5faW5pdFdpbmRvd0JsdXJMaXN0ZW5lcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdE9uQ2xpY2tCb2R5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVsYXlDbGlja091dHNpZGVJbml0KSB7XHJcbiAgICAgIHNldFRpbWVvdXQodGhpcy5faW5pdENsaWNrT3V0c2lkZUxpc3RlbmVyLmJpbmQodGhpcykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faW5pdENsaWNrT3V0c2lkZUxpc3RlbmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leGNsdWRlQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leGNsdWRlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5leGNsdWRlKSkgYXMgQXJyYXk8SFRNTEVsZW1lbnQ+O1xyXG4gICAgICAgIGlmIChub2Rlcykge1xyXG4gICAgICAgICAgdGhpcy5fbm9kZXNFeGNsdWRlZCA9IG5vZGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignW25nLWNsaWNrLW91dHNpZGVdIENoZWNrIHlvdXIgZXhjbHVkZSBzZWxlY3RvciBzeW50YXguJywgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25DbGlja0JvZHkoZXY6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2xpY2tPdXRzaWRlRW5hYmxlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgICBpZiAodGhpcy5leGNsdWRlQmVmb3JlQ2xpY2spIHtcclxuICAgICAgdGhpcy5fZXhjbHVkZUNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnRhcmdldCkgJiYgIXRoaXMuX3Nob3VsZEV4Y2x1ZGUoZXYudGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLl9lbWl0KGV2KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dGFjaE91dHNpZGVPbkNsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5fcmVtb3ZlQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZXMgcHJvYmxlbSB3aXRoIG91dHNpZGUgY2xpY2sgb24gaWZyYW1lXHJcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXJrb24vbmctY2xpY2stb3V0c2lkZS9pc3N1ZXMvMzJcclxuICAgKi9cclxuICBwcml2YXRlIF9vbldpbmRvd0JsdXIoZXY6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCFkb2N1bWVudC5oaWRkZW4pIHtcclxuICAgICAgICB0aGlzLl9lbWl0KGV2KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbWl0KGV2OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNsaWNrT3V0c2lkZUVuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNsaWNrT3V0c2lkZS5lbWl0KGV2KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG91bGRFeGNsdWRlKHRhcmdldDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWNvbnN0XHJcbiAgICBmb3IgKGxldCBleGNsdWRlZE5vZGUgb2YgdGhpcy5fbm9kZXNFeGNsdWRlZCkge1xyXG4gICAgICBpZiAoZXhjbHVkZWROb2RlLmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRDbGlja091dHNpZGVMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLCB0aGlzLl9vbkNsaWNrQm9keSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVDbGlja091dHNpZGVMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCB0aGlzLl9vbkNsaWNrQm9keSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0QXR0YWNoT3V0c2lkZU9uQ2xpY2tMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsIHRoaXMuX2luaXRPbkNsaWNrQm9keSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVBdHRhY2hPdXRzaWRlT25DbGlja0xpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2goZSA9PiB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgdGhpcy5faW5pdE9uQ2xpY2tCb2R5KSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRXaW5kb3dCbHVyTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uV2luZG93Qmx1cik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZVdpbmRvd0JsdXJMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25XaW5kb3dCbHVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Directive, ViewContainerRef, Input } from '@angular/core';
|
|
2
|
-
export class DynamicComponentHostDirective {
|
|
3
|
-
constructor(viewContainerRef) {
|
|
4
|
-
this.viewContainerRef = viewContainerRef;
|
|
5
|
-
this.hostName = '';
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
DynamicComponentHostDirective.decorators = [
|
|
9
|
-
{ type: Directive, args: [{ selector: '[appDynamicComponentHost]' },] }
|
|
10
|
-
];
|
|
11
|
-
DynamicComponentHostDirective.ctorParameters = () => [
|
|
12
|
-
{ type: ViewContainerRef }
|
|
13
|
-
];
|
|
14
|
-
DynamicComponentHostDirective.propDecorators = {
|
|
15
|
-
hostName: [{ type: Input }]
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQtaG9zdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvZGlyZWN0aXZlcy9keW5hbWljLWNvbXBvbmVudC1ob3N0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRSxNQUFNLE9BQU8sNkJBQTZCO0lBRXhDLFlBQW1CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRDVDLGFBQVEsR0FBVyxFQUFFLENBQUM7SUFDeUIsQ0FBQzs7O1lBSDFELFNBQVMsU0FBQyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRTs7O1lBRmhDLGdCQUFnQjs7O3VCQUlqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2FwcER5bmFtaWNDb21wb25lbnRIb3N0XScgfSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNDb21wb25lbnRIb3N0RGlyZWN0aXZlIHtcclxuICBASW5wdXQoKSBob3N0TmFtZTogc3RyaW5nID0gJyc7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHt9XHJcbn0iXX0=
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { of } from 'rxjs';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
3
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
-
import { RouterViewAction, ViewAction, ListViewType } from '../types';
|
|
5
|
-
import { Icons } from '../icons';
|
|
6
|
-
export class BaseListComponent {
|
|
7
|
-
constructor(route$, router$) {
|
|
8
|
-
this.route$ = route$;
|
|
9
|
-
this.router$ = router$;
|
|
10
|
-
this.items = null;
|
|
11
|
-
this.view = ListViewType.Tiles;
|
|
12
|
-
this.title = null;
|
|
13
|
-
this.actions = [];
|
|
14
|
-
this.loaderItems = [1, 2, 3, 4, 5];
|
|
15
|
-
this.page = 1;
|
|
16
|
-
this.pageSize = 20;
|
|
17
|
-
this.count = 0;
|
|
18
|
-
this.sort = '';
|
|
19
|
-
this.sortdir = '-';
|
|
20
|
-
this.search = '';
|
|
21
|
-
this.sortOptions = [];
|
|
22
|
-
this.metaItems = [];
|
|
23
|
-
}
|
|
24
|
-
ngOnDestroy() {
|
|
25
|
-
if (this.routeSub$) {
|
|
26
|
-
this.routeSub$.unsubscribe();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
getViewActions() {
|
|
30
|
-
const actions = [
|
|
31
|
-
new ViewAction('search', null, null, Icons.Search, 'αναζήτηση'),
|
|
32
|
-
new ViewAction('refresh', null, null, Icons.Refresh, 'ανανέωση στοιχείων')
|
|
33
|
-
];
|
|
34
|
-
if (this.newItemLink) {
|
|
35
|
-
actions.push(new RouterViewAction(Icons.Add, this.newItemLink, 'rightpane', 'προσθήκη νέας εγγραφής;'));
|
|
36
|
-
}
|
|
37
|
-
return of(actions);
|
|
38
|
-
}
|
|
39
|
-
ngOnInit() {
|
|
40
|
-
this.getViewActions().subscribe(actions => {
|
|
41
|
-
this.actions = actions || [];
|
|
42
|
-
});
|
|
43
|
-
this.metaItems = [
|
|
44
|
-
{ key: 'count', icon: Icons.ItemsCount, text: 'παρακαλώ περιμένετε...' }
|
|
45
|
-
];
|
|
46
|
-
// disabled external route changes monitoring due to sync issues - which is bad :) - refresh from url will not work
|
|
47
|
-
// until i come up with a solution...
|
|
48
|
-
this.routeSub$ = this.route$.queryParamMap.subscribe(params => {
|
|
49
|
-
if (params.keys.length === 0) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// changing the view mode does not require reloading...
|
|
53
|
-
this.view = params.get('view') || ListViewType.Tiles;
|
|
54
|
-
// console.log('route changes ', this.view);
|
|
55
|
-
// if (params.get('search') !== this.search) {
|
|
56
|
-
// this.searchChanged(params.get('search'));
|
|
57
|
-
// }
|
|
58
|
-
// const page = +(params.get('page') || 1);
|
|
59
|
-
// if (page !== this.page) {
|
|
60
|
-
// this.page = page;
|
|
61
|
-
// }
|
|
62
|
-
// const size = +(params.get('pagesize') || 20);
|
|
63
|
-
// if (this.pageSize !== size) {
|
|
64
|
-
// this.pageSize = size;
|
|
65
|
-
// }
|
|
66
|
-
// if (params.get('search') !== this.search) {
|
|
67
|
-
// this.search = params.get('search');
|
|
68
|
-
// }
|
|
69
|
-
// if (params.get('sort') !== this.sort) {
|
|
70
|
-
// this.sort = params.get('sort');
|
|
71
|
-
// }
|
|
72
|
-
// if (params.get('sortdir') !== this.sortdir) {
|
|
73
|
-
// this.sortdir = params.get('sortdir');
|
|
74
|
-
// }
|
|
75
|
-
});
|
|
76
|
-
// just to sync params in query
|
|
77
|
-
this.setRouteParams(true);
|
|
78
|
-
this.load();
|
|
79
|
-
}
|
|
80
|
-
setRouteParams(locationChange = false) {
|
|
81
|
-
this.router$.navigate([], {
|
|
82
|
-
relativeTo: this.route$, queryParams: {
|
|
83
|
-
view: this.view,
|
|
84
|
-
page: this.page,
|
|
85
|
-
pagesize: this.pageSize,
|
|
86
|
-
search: this.search,
|
|
87
|
-
sort: this.sort,
|
|
88
|
-
dir: this.sortdir
|
|
89
|
-
}, queryParamsHandling: 'merge', skipLocationChange: locationChange
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
actionHandler($event) {
|
|
93
|
-
// console.log('BaseListComponent actionHandler', $event);
|
|
94
|
-
if ($event.key === 'refresh') {
|
|
95
|
-
this.refresh();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
load() {
|
|
99
|
-
// console.log('BaseListComponent LOAD');
|
|
100
|
-
this.count = 0;
|
|
101
|
-
this.items = null;
|
|
102
|
-
this.loadItems().subscribe(result => {
|
|
103
|
-
this.count = result ? result.count : 0;
|
|
104
|
-
this.items = result === null || result === void 0 ? void 0 : result.items;
|
|
105
|
-
this.updateHeaderMeta();
|
|
106
|
-
}, err => {
|
|
107
|
-
this.count = 0;
|
|
108
|
-
this.items = null;
|
|
109
|
-
this.updateHeaderMeta();
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
updateHeaderMeta() {
|
|
113
|
-
var _a;
|
|
114
|
-
const count = (_a = this.metaItems) === null || _a === void 0 ? void 0 : _a.filter(m => m.key === 'count')[0];
|
|
115
|
-
if (count) {
|
|
116
|
-
this.count === 1 ? count.text = `${this.count} αποτέλεσμα` : count.text = `${this.count} αποτελέσματα`;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
clear() {
|
|
120
|
-
this.count = 0;
|
|
121
|
-
this.page = 1;
|
|
122
|
-
this.items = null;
|
|
123
|
-
this.search = null;
|
|
124
|
-
this.setRouteParams();
|
|
125
|
-
this.load();
|
|
126
|
-
}
|
|
127
|
-
refresh() {
|
|
128
|
-
this.count = 0;
|
|
129
|
-
this.page = 1;
|
|
130
|
-
this.items = null;
|
|
131
|
-
this.setRouteParams();
|
|
132
|
-
this.load();
|
|
133
|
-
}
|
|
134
|
-
pageChanged(page) {
|
|
135
|
-
if (this.page !== page) {
|
|
136
|
-
this.page = page;
|
|
137
|
-
this.setRouteParams();
|
|
138
|
-
this.load();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
pageSizeChanged(pageSize) {
|
|
142
|
-
if (this.pageSize !== pageSize) {
|
|
143
|
-
this.pageSize = pageSize;
|
|
144
|
-
this.page = 1;
|
|
145
|
-
this.setRouteParams();
|
|
146
|
-
this.refresh();
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
sortChanged(sort) {
|
|
150
|
-
// console.log('base-list sortChanged', sort);
|
|
151
|
-
if (this.sort !== sort) {
|
|
152
|
-
this.page = 1;
|
|
153
|
-
this.sort = sort;
|
|
154
|
-
this.setRouteParams();
|
|
155
|
-
this.refresh();
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
sortdirChanged(sortdir) {
|
|
159
|
-
if (this.sortdir !== sortdir) {
|
|
160
|
-
this.page = 1;
|
|
161
|
-
this.sortdir = sortdir;
|
|
162
|
-
this.setRouteParams();
|
|
163
|
-
this.refresh();
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
searchChanged(searchText) {
|
|
167
|
-
this.count = 0;
|
|
168
|
-
this.page = 1;
|
|
169
|
-
this.items = null;
|
|
170
|
-
this.search = searchText;
|
|
171
|
-
this.setRouteParams();
|
|
172
|
-
this.load();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
BaseListComponent.decorators = [
|
|
176
|
-
{ type: Component, args: [{ template: '' },] }
|
|
177
|
-
];
|
|
178
|
-
BaseListComponent.ctorParameters = () => [
|
|
179
|
-
{ type: ActivatedRoute },
|
|
180
|
-
{ type: Router }
|
|
181
|
-
];
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9oZWxwZXJzL2Jhc2UtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQTBDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdqQyxNQUFNLE9BQWdCLGlCQUFpQjtJQWlCckMsWUFBb0IsTUFBc0IsRUFBVSxPQUFlO1FBQS9DLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQWhCNUQsVUFBSyxHQUEyQixJQUFJLENBQUM7UUFDckMsU0FBSSxHQUFXLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDbEMsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFDNUIsWUFBTyxHQUFpQixFQUFFLENBQUM7UUFDM0IsZ0JBQVcsR0FBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixTQUFJLEdBQWtCLEVBQUUsQ0FBQztRQUN6QixZQUFPLEdBQWtCLEdBQUcsQ0FBQztRQUM3QixXQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFpQixFQUFFLENBQUM7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LENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRU0sY0FBYyxDQUFDLE9BQWU7UUFDbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLFVBQXlCO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQzs7O1lBcE1GLFNBQVMsU0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7OztZQUpsQixjQUFjO1lBQUUsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSGVhZGVyTWV0YUl0ZW0sIElSZXN1bHRTZXQsIE1lbnVPcHRpb24sIFJvdXRlclZpZXdBY3Rpb24sIFZpZXdBY3Rpb24sIExpc3RWaWV3VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgSWNvbnMgfSBmcm9tICcuLi9pY29ucyc7XHJcblxyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTGlzdENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgaXRlbXM6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xyXG4gIHB1YmxpYyB2aWV3OiBzdHJpbmcgPSBMaXN0Vmlld1R5cGUuVGlsZXM7XHJcbiAgcHVibGljIHRpdGxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgYWN0aW9uczogVmlld0FjdGlvbltdID0gW107XHJcbiAgcHVibGljIGxvYWRlckl0ZW1zOiBhbnlbXSA9IFsxLCAyLCAzLCA0LCA1XTtcclxuICBwdWJsaWMgcGFnZSA9IDE7XHJcbiAgcHVibGljIHBhZ2VTaXplID0gMjA7XHJcbiAgcHVibGljIGNvdW50ID0gMDtcclxuICBwdWJsaWMgc29ydDogc3RyaW5nIHwgbnVsbCA9ICcnO1xyXG4gIHB1YmxpYyBzb3J0ZGlyOiBzdHJpbmcgfCBudWxsID0gJy0nO1xyXG4gIHB1YmxpYyBzZWFyY2g6IHN0cmluZyB8IG51bGwgPSAnJztcclxuICBwdWJsaWMgc29ydE9wdGlvbnM6IE1lbnVPcHRpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBtZXRhSXRlbXM6IEhlYWRlck1ldGFJdGVtW10gPSBbXTtcclxuICBwdWJsaWMgYWJzdHJhY3QgbmV3SXRlbUxpbms6IHN0cmluZyB8IG51bGw7XHJcbiAgcHJpdmF0ZSByb3V0ZVN1YiQ6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZSQ6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlciQ6IFJvdXRlcikge1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yb3V0ZVN1YiQpIHtcclxuICAgICAgdGhpcy5yb3V0ZVN1YiQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWaWV3QWN0aW9ucygpOiBPYnNlcnZhYmxlPFZpZXdBY3Rpb25bXT4ge1xyXG4gICAgY29uc3QgYWN0aW9ucyA9IFtcclxuICAgICAgbmV3IFZpZXdBY3Rpb24oJ3NlYXJjaCcsIG51bGwsIG51bGwsIEljb25zLlNlYXJjaCwgJ86xzr3Osc62zq7PhM63z4POtycpLFxyXG4gICAgICBuZXcgVmlld0FjdGlvbigncmVmcmVzaCcsIG51bGwsIG51bGwsIEljb25zLlJlZnJlc2gsICfOsc69zrHOvc6tz4nPg863IM+Dz4TOv865z4fOtc6vz4nOvScpXHJcbiAgICBdO1xyXG4gICAgaWYgKHRoaXMubmV3SXRlbUxpbmspIHtcclxuICAgICAgYWN0aW9ucy5wdXNoKG5ldyBSb3V0ZXJWaWV3QWN0aW9uKEljb25zLkFkZCwgdGhpcy5uZXdJdGVtTGluaywgJ3JpZ2h0cGFuZScsICfPgM+Bzr/Pg864zq7Ous63IM69zq3Osc+CIM61zrPOs8+BzrHPhs6uz4I7JykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mKGFjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldFZpZXdBY3Rpb25zKCkuc3Vic2NyaWJlKGFjdGlvbnMgPT4ge1xyXG4gICAgICB0aGlzLmFjdGlvbnMgPSBhY3Rpb25zIHx8IFtdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tZXRhSXRlbXMgPSBbXHJcbiAgICAgIHsga2V5OiAnY291bnQnLCBpY29uOiBJY29ucy5JdGVtc0NvdW50LCB0ZXh0OiAnz4DOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtS4uLicgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBkaXNhYmxlZCBleHRlcm5hbCByb3V0ZSBjaGFuZ2VzIG1vbml0b3JpbmcgZHVlIHRvIHN5bmMgaXNzdWVzIC0gd2hpY2ggaXMgYmFkIDopIC0gcmVmcmVzaCBmcm9tIHVybCB3aWxsIG5vdCB3b3JrXHJcbiAgICAvLyB1bnRpbCBpIGNvbWUgdXAgd2l0aCBhIHNvbHV0aW9uLi4uXHJcblxyXG4gICAgdGhpcy5yb3V0ZVN1YiQgPSB0aGlzLnJvdXRlJC5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBpZiAocGFyYW1zLmtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGFuZ2luZyB0aGUgdmlldyBtb2RlIGRvZXMgbm90IHJlcXVpcmUgcmVsb2FkaW5nLi4uXHJcbiAgICAgIHRoaXMudmlldyA9IHBhcmFtcy5nZXQoJ3ZpZXcnKSB8fCBMaXN0Vmlld1R5cGUuVGlsZXM7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyb3V0ZSBjaGFuZ2VzICcsIHRoaXMudmlldyk7XHJcblxyXG4gICAgICAvLyBpZiAocGFyYW1zLmdldCgnc2VhcmNoJykgIT09IHRoaXMuc2VhcmNoKSB7XHJcbiAgICAgIC8vICAgdGhpcy5zZWFyY2hDaGFuZ2VkKHBhcmFtcy5nZXQoJ3NlYXJjaCcpKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gY29uc3QgcGFnZSA9ICsocGFyYW1zLmdldCgncGFnZScpIHx8IDEpO1xyXG4gICAgICAvLyBpZiAocGFnZSAhPT0gdGhpcy5wYWdlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gY29uc3Qgc2l6ZSA9ICsocGFyYW1zLmdldCgncGFnZXNpemUnKSB8fCAyMCk7XHJcbiAgICAgIC8vIGlmICh0aGlzLnBhZ2VTaXplICE9PSBzaXplKSB7XHJcbiAgICAgIC8vICAgdGhpcy5wYWdlU2l6ZSA9IHNpemU7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIGlmIChwYXJhbXMuZ2V0KCdzZWFyY2gnKSAhPT0gdGhpcy5zZWFyY2gpIHtcclxuICAgICAgLy8gICB0aGlzLnNlYXJjaCA9IHBhcmFtcy5nZXQoJ3NlYXJjaCcpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICAvLyBpZiAocGFyYW1zLmdldCgnc29ydCcpICE9PSB0aGlzLnNvcnQpIHtcclxuICAgICAgLy8gICB0aGlzLnNvcnQgPSBwYXJhbXMuZ2V0KCdzb3J0Jyk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIGlmIChwYXJhbXMuZ2V0KCdzb3J0ZGlyJykgIT09IHRoaXMuc29ydGRpcikge1xyXG4gICAgICAvLyAgIHRoaXMuc29ydGRpciA9IHBhcmFtcy5nZXQoJ3NvcnRkaXInKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGp1c3QgdG8gc3luYyBwYXJhbXMgaW4gcXVlcnlcclxuICAgIHRoaXMuc2V0Um91dGVQYXJhbXModHJ1ZSk7XHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Um91dGVQYXJhbXMobG9jYXRpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIkLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUkLCBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgIHZpZXc6IHRoaXMudmlldyxcclxuICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgcGFnZXNpemU6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaCxcclxuICAgICAgICBzb3J0OiB0aGlzLnNvcnQsXHJcbiAgICAgICAgZGlyOiB0aGlzLnNvcnRkaXJcclxuICAgICAgfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJywgc2tpcExvY2F0aW9uQ2hhbmdlOiBsb2NhdGlvbkNoYW5nZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aW9uSGFuZGxlcigkZXZlbnQ6IFZpZXdBY3Rpb24pOiB2b2lkIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdCYXNlTGlzdENvbXBvbmVudCBhY3Rpb25IYW5kbGVyJywgJGV2ZW50KTtcclxuICAgIGlmICgkZXZlbnQua2V5ID09PSAncmVmcmVzaCcpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWQoKTogdm9pZCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnQmFzZUxpc3RDb21wb25lbnQgTE9BRCcpO1xyXG4gICAgdGhpcy5jb3VudCA9IDA7XHJcbiAgICB0aGlzLml0ZW1zID0gbnVsbDtcclxuICAgIHRoaXMubG9hZEl0ZW1zKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY291bnQgPSByZXN1bHQgPyByZXN1bHQuY291bnQgOiAwO1xyXG4gICAgICB0aGlzLml0ZW1zID0gcmVzdWx0Py5pdGVtcztcclxuICAgICAgdGhpcy51cGRhdGVIZWFkZXJNZXRhKCk7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLmNvdW50ID0gMDtcclxuICAgICAgdGhpcy5pdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyTWV0YSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUhlYWRlck1ldGEoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb3VudCA9IHRoaXMubWV0YUl0ZW1zPy5maWx0ZXIobSA9PiBtLmtleSA9PT0gJ2NvdW50JylbMF07XHJcbiAgICBpZiAoY291bnQpIHtcclxuICAgICAgdGhpcy5jb3VudCA9PT0gMSA/IGNvdW50LnRleHQgPSBgJHt0aGlzLmNvdW50fSDOsc+Azr/PhM6tzrvOtc+DzrzOsWAgOiBjb3VudC50ZXh0ID0gYCR7dGhpcy5jb3VudH0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhYnN0cmFjdCBsb2FkSXRlbXMoKTogT2JzZXJ2YWJsZTxJUmVzdWx0U2V0PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZD47XHJcblxyXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgdGhpcy5wYWdlID0gMTtcclxuICAgIHRoaXMuaXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2ggPSBudWxsO1xyXG4gICAgdGhpcy5zZXRSb3V0ZVBhcmFtcygpO1xyXG4gICAgdGhpcy5sb2FkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgdGhpcy5wYWdlID0gMTtcclxuICAgIHRoaXMuaXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5zZXRSb3V0ZVBhcmFtcygpO1xyXG4gICAgdGhpcy5sb2FkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZUNoYW5nZWQocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XHJcbiAgICAgIHRoaXMuc2V0Um91dGVQYXJhbXMoKTtcclxuICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2VkKHBhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhZ2VTaXplICE9PSBwYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2V0Um91dGVQYXJhbXMoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydENoYW5nZWQoc29ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnYmFzZS1saXN0IHNvcnRDaGFuZ2VkJywgc29ydCk7XHJcbiAgICBpZiAodGhpcy5zb3J0ICE9PSBzb3J0KSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc29ydCA9IHNvcnQ7XHJcbiAgICAgIHRoaXMuc2V0Um91dGVQYXJhbXMoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGRpckNoYW5nZWQoc29ydGRpcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb3J0ZGlyICE9PSBzb3J0ZGlyKSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc29ydGRpciA9IHNvcnRkaXI7XHJcbiAgICAgIHRoaXMuc2V0Um91dGVQYXJhbXMoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoQ2hhbmdlZChzZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvdW50ID0gMDtcclxuICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICB0aGlzLml0ZW1zID0gbnVsbDtcclxuICAgIHRoaXMuc2VhcmNoID0gc2VhcmNoVGV4dDtcclxuICAgIHRoaXMuc2V0Um91dGVQYXJhbXMoKTtcclxuICAgIHRoaXMubG9hZCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { APP_LINKS } from '../../../tokens';
|
|
3
|
-
export class ShellFooterComponent {
|
|
4
|
-
constructor(links) {
|
|
5
|
-
this.links = links;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
ShellFooterComponent.decorators = [
|
|
9
|
-
{ type: Component, args: [{
|
|
10
|
-
selector: 'lib-shell-footer',
|
|
11
|
-
template: "<footer class=\"shell-footer-component-container\">\r\n <div class=\"shell-footer-paddings\">\r\n <div class=\"shell-footer-component-container-inner\">\r\n <div class=\"shell-footer-sections-container\">\r\n <div class=\"shell-footer-section\">\r\n <img class=\"shell-footer-logo-h\" src=\"/assets/images/branding/indice.png\" alt=\"INDICE logo\" />\r\n <nav class=\"mt-4\">\r\n <ul class=\"space-y-2\">\r\n <ng-container *ngFor=\"let link of links.brand | async\">\r\n <li>\r\n <a [href]=\"link.path\" class=\"shell-footer-link\">{{ link.text }}</a>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </nav>\r\n </div>\r\n <div class=\"shell-footer-section-links\">\r\n <h5 class=\"shell-footer-section-title\">Legal</h5>\r\n <nav class=\"mt-4\">\r\n <ul class=\"grid lg:grid-cols-2\">\r\n <ng-container *ngFor=\"let link of links.legal | async\">\r\n <li class=\"mb-2\">\r\n <a [href]=\"link.path\" class=\"shell-footer-link\">{{ link.text }}</a>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </nav>\r\n </div>\r\n <div class=\"shell-footer-section-links\">\r\n <h5 class=\"shell-footer-section-title\">Follow us</h5>\r\n <nav class=\"mt-4\">\r\n <ul class=\"grid lg:grid-cols-2\">\r\n <li class=\"mb-2\">\r\n <a href=\"#\" class=\"shell-footer-social\">\r\n <svg class=\"shell-footer-social-icon\" aria-hidden=\"true\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"/>\r\n </svg>\r\n <span> Twitter </span>\r\n </a>\r\n </li>\r\n <li class=\"mb-2\">\r\n <a href=\"#\" class=\"shell-footer-social\">\r\n <svg class=\"shell-footer-social-icon\" aria-hidden=\"true\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path fill-rule=\"evenodd\" d=\"M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z\" clip-rule=\"evenodd\"/>\r\n </svg>\r\n <span> Instagram </span>\r\n </a>\r\n </li>\r\n <li class=\"mb-2\">\r\n <a href=\"#\" class=\"shell-footer-social\">\r\n <svg class=\"shell-footer-social-icon\" aria-hidden=\"true\" fill=\"currentColor\" viewBox=\"0 0 24 24\" >\r\n <path fill-rule=\"evenodd\" d=\"M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z\" clip-rule=\"evenodd\"/>\r\n </svg>\r\n <span> Facebook </span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"shell-footer-copyright\">\r\n <!--<nav class=\"flex flex-wrap justify-center space-x-6\">\r\n <a href=\"#\" class=\"font-normal text-sm hover:text-gray-100 mb-2\">Cookie settings</a>\r\n </nav>-->\r\n <p class=\"text-sm text-center sm:text-right\">\r\n \u00A9 2021 INDICE. All rights reserved.\r\n </p>\r\n </div>\r\n </div>\r\n</footer>\r\n"
|
|
12
|
-
},] }
|
|
13
|
-
];
|
|
14
|
-
ShellFooterComponent.ctorParameters = () => [
|
|
15
|
-
{ type: undefined, decorators: [{ type: Inject, args: [APP_LINKS,] }] }
|
|
16
|
-
];
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9sYXlvdXRzL3NoZWxsL3NoZWxsLWZvb3Rlci9zaGVsbC1mb290ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVM1QyxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQXNDLEtBQWdCO1FBQWhCLFVBQUssR0FBTCxLQUFLLENBQVc7SUFDdEQsQ0FBQzs7O1lBUkosU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLDY0S0FBNEM7YUFFN0M7Ozs0Q0FHZ0IsTUFBTSxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBUFBfTElOS1MgfSBmcm9tICcuLi8uLi8uLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBJQXBwTGlua3MgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zaGVsbC1mb290ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGVsbC1mb290ZXIuY29tcG9uZW50Lmh0bWwnXHJcblxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFNoZWxsRm9vdGVyQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQVBQX0xJTktTKSBwdWJsaWMgbGlua3M6IElBcHBMaW5rcykge1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { AuthService } from '@indice/ng-auth';
|
|
2
|
-
import { Component, Inject, Input } from '@angular/core';
|
|
3
|
-
import { NavigationStart, Router } from '@angular/router';
|
|
4
|
-
import { filter } from 'rxjs/operators';
|
|
5
|
-
import { APP_LINKS, SHELL_CONFIG } from '../../../tokens';
|
|
6
|
-
import { of } from 'rxjs';
|
|
7
|
-
export class ShellHeaderComponent {
|
|
8
|
-
constructor(authService, router, config, links) {
|
|
9
|
-
this.authService = authService;
|
|
10
|
-
this.router = router;
|
|
11
|
-
this.config = config;
|
|
12
|
-
this.links = links;
|
|
13
|
-
// tslint:disable-next-line:no-input-rename
|
|
14
|
-
this.sectionLinksPath = 'main';
|
|
15
|
-
// tslint:disable-next-line:no-input-rename
|
|
16
|
-
this.profileMenuVisible = true;
|
|
17
|
-
// tslint:disable-next-line:no-input-rename
|
|
18
|
-
this.showUserNameOnHeader = false;
|
|
19
|
-
this.border = true;
|
|
20
|
-
this.sectionLinks = of([]);
|
|
21
|
-
this.mobileMenuExpanded = false;
|
|
22
|
-
this.userMenuExpanded = false;
|
|
23
|
-
this.routerSub$ = null;
|
|
24
|
-
this.userSub$ = null;
|
|
25
|
-
this.statusSub$ = null;
|
|
26
|
-
this.user = null;
|
|
27
|
-
this.avatarName = null;
|
|
28
|
-
this.routeSubject = this.router.events.pipe(filter((event) => event instanceof NavigationStart));
|
|
29
|
-
}
|
|
30
|
-
ngOnDestroy() {
|
|
31
|
-
console.log(this.showUserNameOnHeader);
|
|
32
|
-
if (this.routerSub$) {
|
|
33
|
-
this.routerSub$.unsubscribe();
|
|
34
|
-
}
|
|
35
|
-
// TODO: check authenticated user here before we start polling server status
|
|
36
|
-
if (this.statusSub$) {
|
|
37
|
-
this.statusSub$.unsubscribe();
|
|
38
|
-
}
|
|
39
|
-
if (this.userSub$) {
|
|
40
|
-
this.userSub$.unsubscribe();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
ngOnInit() {
|
|
44
|
-
this.sectionLinks = this.links[this.sectionLinksPath];
|
|
45
|
-
this.routerSub$ = this.routeSubject.subscribe((event) => {
|
|
46
|
-
this.mobileMenuExpanded = false;
|
|
47
|
-
this.userMenuExpanded = false;
|
|
48
|
-
});
|
|
49
|
-
this.authService.loadUser().subscribe((user) => {
|
|
50
|
-
console.log(user);
|
|
51
|
-
this.setCurrentUser(user);
|
|
52
|
-
}, error => {
|
|
53
|
-
console.error(error);
|
|
54
|
-
});
|
|
55
|
-
// Detect user changes and display / or not user info accordingly...
|
|
56
|
-
this.userSub$ = this.authService.user$.subscribe((user) => {
|
|
57
|
-
// console.log('ShellHeaderComponent user subscription');
|
|
58
|
-
this.setCurrentUser(user);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
// tslint:disable-next-line:typedef
|
|
62
|
-
onClickOutside($event) {
|
|
63
|
-
this.userMenuExpanded = false;
|
|
64
|
-
}
|
|
65
|
-
signin(event) {
|
|
66
|
-
if (event) {
|
|
67
|
-
event.preventDefault();
|
|
68
|
-
}
|
|
69
|
-
this.authService.signinRedirect();
|
|
70
|
-
}
|
|
71
|
-
setCurrentUser(user) {
|
|
72
|
-
var _a, _b;
|
|
73
|
-
this.user = user;
|
|
74
|
-
if (this.user && this.user.profile) {
|
|
75
|
-
this.avatarName = `${(_a = this.user.profile.given_name) === null || _a === void 0 ? void 0 : _a.charAt(0)}${(_b = this.user.profile.family_name) === null || _b === void 0 ? void 0 : _b.charAt(0)}`.toUpperCase();
|
|
76
|
-
// console.log('load user', this.avatarName);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
ShellHeaderComponent.decorators = [
|
|
81
|
-
{ type: Component, args: [{
|
|
82
|
-
// tslint:disable-next-line:component-selector
|
|
83
|
-
selector: 'lib-shell-header',
|
|
84
|
-
template: "<nav>\r\n <div class=\"shell-header-paddings\">\r\n <div [class]=\"border ? 'shell-header-border' : ''\">\r\n <div class=\"shell-header-menu-container\">\r\n <div class=\"shell-header-links-no-grow-container\">\r\n <div>\r\n <a href=\"#\"\r\n [routerLink]=\"['/']\"><img class=\"app-logo\" [src]=\"config.appLogo\" [alt]=\"config.appLogoAlt\" /></a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shell-header-link-container\">\r\n <ng-container *ngFor=\"let link of sectionLinks | async\">\r\n <a href=\"#\"\r\n [routerLink]=\"[link.path]\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\"\r\n [routerLinkActive]=\"['nav-link-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"shell-header-md-visible\">\r\n <div class=\"shell-header-links-no-grow-container\">\r\n\r\n <ng-container *ngFor=\"let link of links.profileActions | async\">\r\n <a class=\"shell-header-menu-rounded-button\"\r\n (clickOutside)=\"onClickOutside($event)\"\r\n [attr.href]=\"link.path\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\">\r\n <span class=\"sr-only\">{{ link.text }}</span>\r\n <i *ngIf=\"link.icon\"\r\n [class]=\"link.icon\"></i>\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Profile dropdown -->\r\n <div class=\"ml-2 relative\"\r\n (clickOutside)=\"onClickOutside($event)\"\r\n *ngIf=\"profileMenuVisible\">\r\n <div [ngClass]=\"{'shell-header-profile': showUserNameOnHeader}\">\r\n <div *ngIf=\"user && showUserNameOnHeader\"\r\n class=\"shell-header-profile-userName\">\r\n {{ user.profile.name }}\r\n </div>\r\n <button type=\"button\"\r\n *ngIf=\"user\"\r\n (click)=\"userMenuExpanded = !userMenuExpanded\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">Open user menu</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\">{{this.avatarName}}</span>\r\n </span>\r\n </button>\r\n\r\n <button type=\"button\"\r\n *ngIf=\"!user\"\r\n (click)=\"signin(null)\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">sign in</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\"><i class=\"ms-Icon ms-Icon--Signin\"></i></span>\r\n </span>\r\n </button>\r\n\r\n <div *ngIf=\"userMenuExpanded\"\r\n [ngClass]=\"showUserNameOnHeader ? 'shell-header-profile-dropdown-with-username' : 'shell-header-profile-dropdown'\"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n aria-labelledby=\"user-menu\">\r\n <!-- <a href=\"#\" class=\"block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\" role=\"menuitem\">\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7</a> -->\r\n <ng-container *ngFor=\"let link of links.profile | async\">\r\n <!-- <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-profile\">\r\n {{ link.text }}\r\n </a> -->\r\n <a [routerLink]=\"link.path\" [routerLinkActive]=\"['nav-link-profile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\" class=\"nav-link-profile\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mobile-menu-button-container\">\r\n <!-- Mobile menu button -->\r\n <button type=\"button\"\r\n (click)=\"mobileMenuExpanded = !mobileMenuExpanded\"\r\n class=\"mobile-menu-button\"\r\n aria-controls=\"mobile-menu\"\r\n [attr.aria-expanded]=\"mobileMenuExpanded\">\r\n <span class=\"sr-only\">Open main menu</span>\r\n <!--Heroicon name: outline/menu Menu open: \"hidden\", Menu closed: \"block\"-->\r\n <svg class=\"block h-6 w-6\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M4 6h16M4 12h16M4 18h16\" />\r\n </svg>\r\n <!--Heroicon name: outline/x Menu open: \"block\", Menu closed: \"hidden\"-->\r\n <svg class=\"hidden h-6 w-6\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Mobile menu, show/hide based on menu state. -->\r\n <div class=\"mobile-menu-container\"\r\n *ngIf=\"mobileMenuExpanded\"\r\n id=\"mobile-menu\">\r\n <div class=\"mobile-menu-link-container\">\r\n <ng-container *ngFor=\"let link of sectionLinks | async\">\r\n <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n <a *ngIf=\"!link.external\" [routerLink]=\"link.path\" [routerLinkActive]=\"['nav-link-mobile-active']\" [routerLinkActiveOptions]=\"{ exact: link.exact }\" class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user\">\r\n <a href=\"#\" (click)=\"signin($event)\" class=\"nav-link-mobile\">\r\n <i class=\"ms-Icon ms-Icon--Signin mr-2\"></i>\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\r\n </a>\r\n </ng-container>\r\n </div>\r\n <div class=\"mobile-menu-user-info-container\" *ngIf=\"user\">\r\n <div class=\"mobile-menu-user-info-container-inner\">\r\n <div class=\"flex-shrink-0\">\r\n <span class=\"mobile-menu-avatar-container\">\r\n <span class=\"mobile-menu-avatar-name\">{{ this.avatarName }}</span>\r\n </span>\r\n </div>\r\n <div class=\"ml-3\">\r\n <div class=\"mobile-menu-user-name\">{{ user.profile.name }}</div>\r\n <div class=\"mobile-menu-user-email\">{{ user.profile.email }}</div>\r\n </div>\r\n <button class=\"mobile-menu-rounded-button\">\r\n <span class=\"sr-only\">View notifications</span>\r\n <!-- Heroicon name: outline/bell -->\r\n <svg class=\"mobile-menu-rounded-button-icon-style\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"mobile-menu-link-container\">\r\n <ng-container *ngFor=\"let link of links.profile | async\">\r\n <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n <a [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-mobile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n <!-- <a href=\"#\" class=\"block px-3 py-2 rounded-sm text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700\">\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7</a> -->\r\n </div>\r\n </div>\r\n </div>\r\n</nav>\r\n"
|
|
85
|
-
},] }
|
|
86
|
-
];
|
|
87
|
-
ShellHeaderComponent.ctorParameters = () => [
|
|
88
|
-
{ type: AuthService, decorators: [{ type: Inject, args: [AuthService,] }] },
|
|
89
|
-
{ type: Router, decorators: [{ type: Inject, args: [Router,] }] },
|
|
90
|
-
{ type: undefined, decorators: [{ type: Inject, args: [SHELL_CONFIG,] }] },
|
|
91
|
-
{ type: undefined, decorators: [{ type: Inject, args: [APP_LINKS,] }] }
|
|
92
|
-
];
|
|
93
|
-
ShellHeaderComponent.propDecorators = {
|
|
94
|
-
sectionLinksPath: [{ type: Input, args: ['section-links',] }],
|
|
95
|
-
profileMenuVisible: [{ type: Input, args: ['profile-menu',] }],
|
|
96
|
-
showUserNameOnHeader: [{ type: Input, args: ['show-userName',] }],
|
|
97
|
-
border: [{ type: Input }]
|
|
98
|
-
};
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9sYXlvdXRzL3NoZWxsL3NoZWxsLWhlYWRlci9zaGVsbC1oZWFkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBUyxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUF5RCxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRakYsTUFBTSxPQUFPLG9CQUFvQjtJQWtCL0IsWUFDaUMsV0FBd0IsRUFDN0IsTUFBYyxFQUNYLE1BQVcsRUFDZCxLQUFVO1FBSEwsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNYLFdBQU0sR0FBTixNQUFNLENBQUs7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFLO1FBckJ0QywyQ0FBMkM7UUFDbkIscUJBQWdCLEdBQUcsTUFBTSxDQUFDO1FBQ2xELDJDQUEyQztRQUNwQix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakQsMkNBQTJDO1FBQ25CLHlCQUFvQixHQUF3QixLQUFLLENBQUM7UUFDakUsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNoQixpQkFBWSxHQUEwQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FB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RUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hILDZDQUE2QztTQUM5QztJQUNILENBQUM7OztZQXJGRixTQUFTLFNBQUM7Z0JBQ1QsOENBQThDO2dCQUM5QyxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixnNVNBQTRDO2FBQzdDOzs7WUFkUSxXQUFXLHVCQWtDZixNQUFNLFNBQUMsV0FBVztZQS9CVSxNQUFNLHVCQWdDbEMsTUFBTSxTQUFDLE1BQU07NENBQ2IsTUFBTSxTQUFDLFlBQVk7NENBQ25CLE1BQU0sU0FBQyxTQUFTOzs7K0JBcEJsQixLQUFLLFNBQUMsZUFBZTtpQ0FFckIsS0FBSyxTQUFDLGNBQWM7bUNBRXBCLEtBQUssU0FBQyxlQUFlO3FCQUNyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAaW5kaWNlL25nLWF1dGgnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdvaWRjLWNsaWVudCc7XHJcbmltcG9ydCB7IEV2ZW50LCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmF2TGluayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcclxuaW1wb3J0IHsgQVBQX0xJTktTLCBTSEVMTF9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgb2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdsaWItc2hlbGwtaGVhZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2hlbGwtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoZWxsSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcclxuICBASW5wdXQoJ3NlY3Rpb24tbGlua3MnKSBzZWN0aW9uTGlua3NQYXRoID0gJ21haW4nO1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcclxuICBASW5wdXQoJ3Byb2ZpbGUtbWVudScpIHByb2ZpbGVNZW51VmlzaWJsZSA9IHRydWU7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxyXG4gIEBJbnB1dCgnc2hvdy11c2VyTmFtZScpIHNob3dVc2VyTmFtZU9uSGVhZGVyOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYm9yZGVyID0gdHJ1ZTtcclxuICBwdWJsaWMgc2VjdGlvbkxpbmtzOiBPYnNlcnZhYmxlPE5hdkxpbmtbXT4gPSBvZihbXSk7XHJcbiAgcHVibGljIG1vYmlsZU1lbnVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VyTWVudUV4cGFuZGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIHJvdXRlU3ViamVjdDogT2JzZXJ2YWJsZTxFdmVudD47XHJcbiAgcHJvdGVjdGVkIHJvdXRlclN1YiQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCB1c2VyU3ViJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHN0YXR1c1N1YiQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyB1c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGF2YXRhck5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoQXV0aFNlcnZpY2UpIHByb3RlY3RlZCBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFJvdXRlcikgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgQEluamVjdChTSEVMTF9DT05GSUcpIHB1YmxpYyBjb25maWc6IGFueSxcclxuICAgIEBJbmplY3QoQVBQX0xJTktTKSBwdWJsaWMgbGlua3M6IGFueVxyXG4gICkge1xyXG4gICAgdGhpcy5yb3V0ZVN1YmplY3QgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNob3dVc2VyTmFtZU9uSGVhZGVyKTtcclxuXHJcbiAgICBpZiAodGhpcy5yb3V0ZXJTdWIkKSB7XHJcbiAgICAgIHRoaXMucm91dGVyU3ViJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogY2hlY2sgYXV0aGVudGljYXRlZCB1c2VyIGhlcmUgYmVmb3JlIHdlIHN0YXJ0IHBvbGxpbmcgc2VydmVyIHN0YXR1c1xyXG4gICAgaWYgKHRoaXMuc3RhdHVzU3ViJCkge1xyXG4gICAgICB0aGlzLnN0YXR1c1N1YiQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVzZXJTdWIkKSB7XHJcbiAgICAgIHRoaXMudXNlclN1YiQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWN0aW9uTGlua3MgPSB0aGlzLmxpbmtzW3RoaXMuc2VjdGlvbkxpbmtzUGF0aF0gYXMgT2JzZXJ2YWJsZTxOYXZMaW5rW10+O1xyXG4gICAgdGhpcy5yb3V0ZXJTdWIkID0gdGhpcy5yb3V0ZVN1YmplY3Quc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm1vYmlsZU1lbnVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVzZXJNZW51RXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2FkVXNlcigpLnN1YnNjcmliZSgodXNlcikgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyh1c2VyKTtcclxuICAgICAgdGhpcy5zZXRDdXJyZW50VXNlcih1c2VyKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICApO1xyXG4gICAgLy8gRGV0ZWN0IHVzZXIgY2hhbmdlcyBhbmQgZGlzcGxheSAvIG9yIG5vdCB1c2VyIGluZm8gYWNjb3JkaW5nbHkuLi5cclxuICAgIHRoaXMudXNlclN1YiQgPSB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTaGVsbEhlYWRlckNvbXBvbmVudCB1c2VyIHN1YnNjcmlwdGlvbicpO1xyXG4gICAgICB0aGlzLnNldEN1cnJlbnRVc2VyKHVzZXIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHlwZWRlZlxyXG4gIHB1YmxpYyBvbkNsaWNrT3V0c2lkZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy51c2VyTWVudUV4cGFuZGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2lnbmluKGV2ZW50OiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluUmVkaXJlY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q3VycmVudFVzZXIodXNlcjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgaWYgKHRoaXMudXNlciAmJiB0aGlzLnVzZXIucHJvZmlsZSkge1xyXG4gICAgICB0aGlzLmF2YXRhck5hbWUgPSBgJHt0aGlzLnVzZXIucHJvZmlsZS5naXZlbl9uYW1lPy5jaGFyQXQoMCl9JHt0aGlzLnVzZXIucHJvZmlsZS5mYW1pbHlfbmFtZT8uY2hhckF0KDApfWAudG9VcHBlckNhc2UoKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ2xvYWQgdXNlcicsIHRoaXMuYXZhdGFyTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|