@sumaris-net/ngx-components 1.22.5 → 1.22.8
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/bundles/sumaris-net.ngx-components.umd.js +11 -143
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/social/user-event/notification/user-event-notification.component.js +3 -3
- package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +3 -3
- package/esm2015/src/app/social/user-event/user-event.model.js +5 -1
- package/esm2015/src/app/social/user-event/user-event.module.js +3 -3
- package/esm2015/src/app/social/user-event/user-event.service.js +5 -96
- package/esm2015/src/app/social/user-event/user-events.table.js +3 -31
- package/fesm2015/sumaris-net.ngx-components.js +11 -124
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/social/user-event/user-event.model.d.ts +2 -0
- package/src/app/social/user-event/user-event.service.d.ts +2 -14
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector, Input } from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { USER_EVENT_SERVICE } from './user-event.service';
|
|
4
4
|
import { AccountService } from '../../core/services/account.service';
|
|
5
5
|
import { UserEvent, UserEventFilter, UserEventTypes } from './user-event.model';
|
|
6
6
|
import { toBoolean } from '../../shared/functions';
|
|
@@ -12,29 +12,6 @@ const ICONS_MAP = {
|
|
|
12
12
|
DEBUG_DATA: { matIcon: 'bug_report' },
|
|
13
13
|
INBOX_MESSAGE: { matIcon: 'mail' }
|
|
14
14
|
};
|
|
15
|
-
// TODO: refactor with a registration done by data service:
|
|
16
|
-
// - userEventService.registerEventAction({__typename: 'TripVO', ...})
|
|
17
|
-
// - userEventService.getActionsFor(__typename): UserEventDetailAction
|
|
18
|
-
/*const DETAILS_MAP: {[key: string]: UserEventAction<RootDataEntity<any>>} = {
|
|
19
|
-
"TripVO": {
|
|
20
|
-
icon: null,
|
|
21
|
-
matIcon: "content_copy",
|
|
22
|
-
action: 'copyToLocal',
|
|
23
|
-
actionTitle: 'SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL',
|
|
24
|
-
actionColor: 'primary',
|
|
25
|
-
fromObject: Trip.fromObject,
|
|
26
|
-
childrenFields: ['operation', 'landing']
|
|
27
|
-
},
|
|
28
|
-
"ObservedLocationVO": {
|
|
29
|
-
icon: null,
|
|
30
|
-
matIcon: "content_copy",
|
|
31
|
-
action: 'copyToLocal',
|
|
32
|
-
actionTitle: 'SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL',
|
|
33
|
-
actionColor: 'primary',
|
|
34
|
-
fromObject: ObservedLocation.fromObject,
|
|
35
|
-
childrenFields: ['landings']
|
|
36
|
-
}
|
|
37
|
-
}*/
|
|
38
15
|
export class UserEventsTable extends AppTable {
|
|
39
16
|
constructor(injector, accountService, service, entities, cd, environment) {
|
|
40
17
|
super(injector,
|
|
@@ -134,18 +111,13 @@ UserEventsTable.decorators = [
|
|
|
134
111
|
selector: 'app-user-events-table',
|
|
135
112
|
template: "\n<!-- Type = options menu -->\n<mat-menu #optionsMenu=\"matMenu\" xPosition=\"after\">\n\n <!-- display columns -->\n <button mat-menu-item\n (click)=\"openSelectColumnsModal($event)\">\n <mat-icon>view_column</mat-icon>\n <ion-label translate>COMMON.DISPLAYED_COLUMNS_DOTS</ion-label>\n </button>\n\n</mat-menu>\n\n<!-- top header -->\n<mat-toolbar>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n\n <button mat-icon-button [title]=\"'COMMON.BTN_REFRESH'|translate\" (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button class=\"hidden-xs hidden-sm\" *ngIf=\"canDelete\"\n [title]=\"'COMMON.BTN_DELETE'|translate\" (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" hidden-xs hidden-sm hidden-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"toolbar-spacer\"></div>\n\n <button mat-icon-button\n [title]=\"'COMMON.BTN_OPTIONS'|translate\"\n [matMenuTriggerFor]=\"optionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n</mat-toolbar>\n\n\n<mat-table [dataSource]=\"dataSource\" matSort\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <!-- select -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <!-- id -->\n <ng-container matColumnDef=\"id\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [class.cdk-visually-hidden]=\"!isAdmin\">\n <app-loading-spinner [loading]=\"loadingSubject|async\"><ion-label>#</ion-label></app-loading-spinner>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!isAdmin\">{{ row.currentData.id | mathAbs }}</mat-cell>\n </ng-container>\n\n <!-- creationDate -->\n <ng-container matColumnDef=\"creationDate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.CREATION_DATE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ion-text>\n {{row.currentData.creationDate | dateFromNow }}<br/>\n <ion-text color=\"medium\"><small>{{row.currentData.creationDate | dateFormat: {time: true} }}</small></ion-text>\n </ion-text>\n </mat-cell>\n </ng-container>\n\n <!-- icon -->\n <ng-container matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getIcon(row.currentData); let details\">\n <ion-icon slot=\"start\" *ngIf=\"details.icon\" [name]=\"details.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"details.matIcon\">{{details.matIcon}}</mat-icon>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- event type -->\n <ng-container matColumnDef=\"eventType\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.EVENT_TYPE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <span>{{'SOCIAL.USER_EVENT.TYPE_ENUM.' + row.currentData.eventType | translate}}</span>\n </mat-cell>\n </ng-container>\n\n <!-- message -->\n <ng-container matColumnDef=\"message\">\n <mat-header-cell *matHeaderCellDef>\n <ion-label translate>SOCIAL.USER_EVENT.MESSAGE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <ion-text [innerHTML]=\"details.title|translate\">\n </ion-text>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- Actions buttons column -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <button mat-icon-button color=\"light\"\n *ngFor=\"let action of details.actions\"\n [title]=\"action.title |translate\"\n [color]=\"action.color\"\n (click)=\"doAction(action, row)\">\n <app-icon slot=\"start\" *ngIf=\"action.iconRef\" [ref]=\"action.iconRef\"></app-icon>\n </button>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n class=\"mat-row-disabled\"\n (click)=\"clickRow($event, row)\"></mat-row>\n\n</mat-table>\n\n<ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col class=\"ion-no-padding\" size=\"auto\">\n <mat-paginator [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n </ion-col>\n</ion-row>\n",
|
|
136
113
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
137
|
-
providers: [
|
|
138
|
-
{
|
|
139
|
-
provide: UserEventServiceToken, useClass: UserEventService
|
|
140
|
-
}
|
|
141
|
-
],
|
|
142
114
|
styles: [".mat-header-row .mat-column-icon,.mat-row .mat-column-icon{max-width:40px;padding-left:0}.mat-header-row .mat-column-icon ion-icon,.mat-header-row .mat-column-icon mat-icon,.mat-row .mat-column-icon ion-icon,.mat-row .mat-column-icon mat-icon{font-size:1.2em;height:1.2em;width:1.2em}.mat-header-row .mat-column-creationDate,.mat-row .mat-column-creationDate{min-width:100px;max-width:120px}"]
|
|
143
115
|
},] }
|
|
144
116
|
];
|
|
145
117
|
UserEventsTable.ctorParameters = () => [
|
|
146
118
|
{ type: Injector },
|
|
147
119
|
{ type: AccountService },
|
|
148
|
-
{ type: undefined, decorators: [{ type: Inject, args: [
|
|
120
|
+
{ type: undefined, decorators: [{ type: Inject, args: [USER_EVENT_SERVICE,] }] },
|
|
149
121
|
{ type: EntitiesStorage },
|
|
150
122
|
{ type: ChangeDetectorRef },
|
|
151
123
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
|
|
@@ -156,4 +128,4 @@ UserEventsTable.propDecorators = {
|
|
|
156
128
|
defaultSortBy: [{ type: Input }],
|
|
157
129
|
defaultSortDirection: [{ type: Input }]
|
|
158
130
|
};
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudHMudGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3VzZXItZXZlbnRzLnRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXZILE9BQU8sRUFBcUIsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBbUIsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQWlDdEUsTUFBTSxTQUFTLEdBQXFDO0lBQ2xELFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUU7SUFDckMsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtDQUNuQyxDQUFDO0FBRUYsMkRBQTJEO0FBQzNELHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFlSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxRQUFvQztJQWN2RSxZQUNFLFFBQWtCLEVBQ1Is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RyxDQUFDLENBQUM7b0JBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLE1BQU0sQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzFHO3dCQUFTO29CQUNSLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDckI7YUFDRjtRQUNILENBQUM7S0FBQTs7O1lBeElGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUVqQywwd0xBQXVDO2dCQUN2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCO3FCQUMzRDtpQkFDRjs7YUFDRjs7O1lBdEZ1RSxRQUFRO1lBR3ZFLGNBQWM7NENBc0dsQixNQUFNLFNBQUMscUJBQXFCO1lBL0Z4QixlQUFlO1lBVlUsaUJBQWlCOzRDQTRHOUMsTUFBTSxTQUFDLFdBQVc7Ozt3QkFacEIsS0FBSzswQkFFTCxLQUFLOzRCQUNMLEtBQUs7bUNBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgSVVzZXJFdmVudFNlcnZpY2UsIFVzZXJFdmVudFNlcnZpY2UsIFVzZXJFdmVudFNlcnZpY2VUb2tlbiB9IGZyb20gJy4vdXNlci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckV2ZW50LCBVc2VyRXZlbnRBY3Rpb24sIFVzZXJFdmVudEZpbHRlciwgVXNlckV2ZW50VHlwZXMgfSBmcm9tICcuL3VzZXItZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQXBwVGFibGUsIFJFU0VSVkVEX0VORF9DT0xVTU5TLCBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TIH0gZnJvbSAnLi4vLi4vY29yZS90YWJsZS90YWJsZS5jbGFzcyc7XG5pbXBvcnQgeyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NvcmUvdGFibGUvZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBFbnRpdGllc1N0b3JhZ2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZWRlZmluZWRDb2xvcnMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckV2ZW50RGV0YWlsPFQgZXh0ZW5kcyBJRW50aXR5PFQ+PiB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIGFjdGlvbj86IHN0cmluZyB8IGFueTtcbiAgYWN0aW9uVGl0bGU/OiBzdHJpbmc7XG4gIGFjdGlvbkNvbG9yPzogUHJlZGVmaW5lZENvbG9ycztcblxuICBpY29uPzogc3RyaW5nO1xuICBtYXRJY29uPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG4gIHRpbWU/OiBNb21lbnQ7XG5cbiAgLy8gQSBjb25maWcgcHJvcGVydHksIHRvIG92ZXJyaWRlIHRoZSB0aXRsZVxuICB0aXRsZVByb3BlcnR5Pzogc3RyaW5nO1xuICB0aXRsZUFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8vIGNvbnZlcnNpb25cbiAgZnJvbU9iamVjdD86IChzb3VyY2U6IGFueSkgPT4gVDtcbiAgY2hpbGRyZW5GaWVsZHM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRXZlbnRJY29uIHtcbiAgaWNvbj86IHN0cmluZztcbiAgbWF0SWNvbj86IHN0cmluZztcbiAgY29sb3I/OiBQcmVkZWZpbmVkQ29sb3JzO1xufVxuXG5jb25zdCBJQ09OU19NQVA6IHsgW2tleTogc3RyaW5nXTogVXNlckV2ZW50SWNvbiB9ID0ge1xuICBERUJVR19EQVRBOiB7IG1hdEljb246ICdidWdfcmVwb3J0JyB9LFxuICBJTkJPWF9NRVNTQUdFOiB7IG1hdEljb246ICdtYWlsJyB9XG59O1xuXG4vLyBUT0RPOiByZWZhY3RvciB3aXRoIGEgcmVnaXN0cmF0aW9uIGRvbmUgYnkgZGF0YSBzZXJ2aWNlOlxuLy8gLSB1c2VyRXZlbnRTZXJ2aWNlLnJlZ2lzdGVyRXZlbnRBY3Rpb24oe19fdHlwZW5hbWU6ICdUcmlwVk8nLCAuLi59KVxuLy8gLSB1c2VyRXZlbnRTZXJ2aWNlLmdldEFjdGlvbnNGb3IoX190eXBlbmFtZSk6IFVzZXJFdmVudERldGFpbEFjdGlvblxuLypjb25zdCBERVRBSUxTX01BUDoge1trZXk6IHN0cmluZ106IFVzZXJFdmVudEFjdGlvbjxSb290RGF0YUVudGl0eTxhbnk+Pn0gPSB7XG4gIFwiVHJpcFZPXCI6IHtcbiAgICBpY29uOiBudWxsLFxuICAgIG1hdEljb246IFwiY29udGVudF9jb3B5XCIsXG4gICAgYWN0aW9uOiAnY29weVRvTG9jYWwnLFxuICAgIGFjdGlvblRpdGxlOiAnU09DSUFMLlVTRVJfRVZFTlQuQlROX0NPUFlfVE9fTE9DQUwnLFxuICAgIGFjdGlvbkNvbG9yOiAncHJpbWFyeScsXG4gICAgZnJvbU9iamVjdDogVHJpcC5mcm9tT2JqZWN0LFxuICAgIGNoaWxkcmVuRmllbGRzOiBbJ29wZXJhdGlvbicsICdsYW5kaW5nJ11cbiAgfSxcbiAgXCJPYnNlcnZlZExvY2F0aW9uVk9cIjoge1xuICAgIGljb246IG51bGwsXG4gICAgbWF0SWNvbjogXCJjb250ZW50X2NvcHlcIixcbiAgICBhY3Rpb246ICdjb3B5VG9Mb2NhbCcsXG4gICAgYWN0aW9uVGl0bGU6ICdTT0NJQUwuVVNFUl9FVkVOVC5CVE5fQ09QWV9UT19MT0NBTCcsXG4gICAgYWN0aW9uQ29sb3I6ICdwcmltYXJ5JyxcbiAgICBmcm9tT2JqZWN0OiBPYnNlcnZlZExvY2F0aW9uLmZyb21PYmplY3QsXG4gICAgY2hpbGRyZW5GaWVsZHM6IFsnbGFuZGluZ3MnXVxuICB9XG59Ki9cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1ldmVudHMtdGFibGUnLFxuICBzdHlsZVVybHM6IFsndXNlci1ldmVudHMudGFibGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1ldmVudHMudGFibGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBVc2VyRXZlbnRTZXJ2aWNlVG9rZW4sIHVzZUNsYXNzOiBVc2VyRXZlbnRTZXJ2aWNlXG4gICAgfVxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgVXNlckV2ZW50c1RhYmxlIGV4dGVuZHMgQXBwVGFibGU8VXNlckV2ZW50LCBVc2VyRXZlbnRGaWx0ZXI+XG4gIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBkYXRlVGltZVBhdHRlcm46IHN0cmluZztcbiAgY2FuRWRpdDogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICBpc0FkbWluOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHJlY2lwaWVudDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHdpdGhDb250ZW50OiBib29sZWFuO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoVXNlckV2ZW50U2VydmljZVRva2VuKSBwcm90ZWN0ZWQgc2VydmljZTogSVVzZXJFdmVudFNlcnZpY2U8VXNlckV2ZW50LCBVc2VyRXZlbnRGaWx0ZXI+LFxuICAgIHByb3RlY3RlZCBlbnRpdGllczogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50XG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLFxuICAgICAgLy8gY29sdW1uc1xuICAgICAgUkVTRVJWRURfU1RBUlRfQ09MVU1OU1xuICAgICAgICAuY29uY2F0KFtcbiAgICAgICAgICAnY3JlYXRpb25EYXRlJyxcbiAgICAgICAgICAnaWNvbicsXG4gICAgICAgICAgJ2V2ZW50VHlwZScsXG4gICAgICAgICAgJ21lc3NhZ2UnXG4gICAgICAgIF0pXG4gICAgICAgIC5jb25jYXQoUkVTRVJWRURfRU5EX0NPTFVNTlMpLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwpO1xuXG4gICAgdGhpcy5pMThuQ29sdW1uUHJlZml4ID0gJ1NPQ0lBTC5VU0VSX0VWRU5ULic7XG4gICAgdGhpcy5hdXRvTG9hZCA9IGZhbHNlOyAvLyB0aGlzLnN0YXJ0KClcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSAnY3JlYXRpb25EYXRlJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gTG9hZCBkYXRlL3RpbWUgcGF0dGVyblxuICAgIHRoaXMuZGF0ZVRpbWVQYXR0ZXJuID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJyk7XG4gICAgdGhpcy53aXRoQ29udGVudCA9IHRvQm9vbGVhbih0aGlzLndpdGhDb250ZW50LCBmYWxzZSk7XG5cbiAgICBjb25zdCBhY2NvdW50ID0gdGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50O1xuICAgIGNvbnN0IHB1YmtleSA9IGFjY291bnQgJiYgYWNjb3VudC5wdWJrZXk7XG4gICAgdGhpcy5pc0FkbWluID0gdGhpcy5hY2NvdW50U2VydmljZS5pc0FkbWluKCk7XG4gICAgdGhpcy5jYW5FZGl0ID0gdGhpcy5pc0FkbWluIHx8IHB1YmtleSA9PT0gdGhpcy5yZWNpcGllbnQ7XG4gICAgdGhpcy5jYW5EZWxldGUgPSB0aGlzLmNhbkVkaXQ7XG5cbiAgICB0aGlzLnNldERhdGFzb3VyY2UobmV3IEVudGl0aWVzVGFibGVEYXRhU291cmNlKFVzZXJFdmVudCxcbiAgICAgIHRoaXMuc2VydmljZSxcbiAgICAgIG51bGwsXG4gICAgICB7XG4gICAgICAgIHByZXBlbmROZXdFbGVtZW50czogZmFsc2UsXG4gICAgICAgIHN1cHByZXNzRXJyb3JzOiB0cnVlLFxuICAgICAgICBkYXRhU2VydmljZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aXRoQ29udGVudDogdGhpcy53aXRoQ29udGVudFxuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlciB8fCBuZXcgVXNlckV2ZW50RmlsdGVyKCk7XG4gICAgZmlsdGVyLnJlY2lwaWVudHMgPSBbdGhpcy5yZWNpcGllbnRdO1xuICAgIHRoaXMuc2V0RmlsdGVyKGZpbHRlciwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbdXNlci1ldmVudF0gU3RhcnRpbmcuLi4nKTtcblxuICAgIC8vIFdhaXRpbmcgYWNjb3VudCB0byBiZSByZWFkeVxuICAgIGF3YWl0IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKTtcblxuICAgIC8vIExvYWQgZGF0YVxuICAgIHRoaXMub25SZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIGdldEljb24oc291cmNlOiBVc2VyRXZlbnQpOiBVc2VyRXZlbnRJY29uIHtcbiAgICByZXR1cm4gSUNPTlNfTUFQW3NvdXJjZS50eXBlXTtcbiAgfVxuXG4gIGdldERldGFpbChzb3VyY2U6IFVzZXJFdmVudCk6IFBhcnRpYWw8VXNlckV2ZW50RGV0YWlsPElFbnRpdHk8YW55Pj4gJiB7IGFjdGlvbnM6IFVzZXJFdmVudEFjdGlvbltdIH0+IHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChzb3VyY2UuY29udGVudCAmJiBzb3VyY2UudHlwZSA9PT0gVXNlckV2ZW50VHlwZXMuREVCVUdfREFUQSkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHNvdXJjZS5jb250ZW50LmNvbnRleHQ7XG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9fdHlwZW5hbWUpIHtcbiAgICAgICAgLy8gY29uc3QgYWN0aW9ucyA9IHRoaXMuc2VydmljZS5nZXRBY3Rpb25zQnlUeXBlbmFtZShjb250ZXh0Ll9fdHlwZW5hbWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vIGFjdGlvbnMsXG4gICAgICAgICAgdGl0bGU6IHNvdXJjZS5jb250ZW50LmVycm9yICYmIHNvdXJjZS5jb250ZW50LmVycm9yLm1lc3NhZ2UgfHwgc291cmNlLmNvbnRlbnQubWVzc2FnZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc291cmNlLmNvbnRlbnQuZXJyb3IgJiYgc291cmNlLmNvbnRlbnQuZXJyb3IuZGV0YWlscyB8fCB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmRlYnVnKCdUT0RPOiBpbXBsZW1lbnQgZ2V0RGV0YWlsKCkgZm9yIGV2ZW50OiAnLCBzb3VyY2UpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG5cbiAgYXN5bmMgZG9BY3Rpb24oYWN0aW9uOiBVc2VyRXZlbnRBY3Rpb24sIHJvdzogVGFibGVFbGVtZW50PFVzZXJFdmVudD4pIHtcblxuICAgIGNvbnN0IGV2ZW50ID0gcm93LmN1cnJlbnREYXRhO1xuICAgIC8vIGNvbnN0IGNvbnRleHQgPSBldmVudC5jb250ZW50ICYmIGV2ZW50LmNvbnRlbnQuY29udGV4dDtcblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgaWYgKGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLmV4ZWN1dGVBY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCByZXMgPSBhY3Rpb24uZXhlY3V0ZUFjdGlvbihldmVudC8qLCBjb250ZXh0Ki8pO1xuICAgICAgICByZXMgPSAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgPyBhd2FpdCByZXMgOiByZXM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3VzZXItZXZlbnRdIEZhaWxlZCB0byBleGVjdXRlIGFjdGlvbiAke2FjdGlvbi5uYW1lfTogJHtlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudHMudGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3VzZXItZXZlbnRzLnRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRXJILE9BQU8sRUFBb0Isa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFDLFNBQVMsRUFBbUIsZUFBZSxFQUFFLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRCxPQUFPLEVBQUMsUUFBUSxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDcEcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFFekYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBR3JGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQWlDcEUsTUFBTSxTQUFTLEdBQXFDO0lBQ2xELFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUU7SUFDckMsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtDQUNuQyxDQUFDO0FBU0YsTUFBTSxPQUFPLGVBQWdCLFNBQVEsUUFBb0M7SUFjdkUsWUFDRSxRQUFrQixFQUNSLGNBQThCLEVBQ0YsT0FBc0QsRUFDbEYsUUFBeUIsRUFDekIsRUFBcUIsRUFDQSxXQUFXO1FBRTFDLEtBQUssQ0FBQyxRQUFRO1FBQ1osVUFB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LENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUMxRzt3QkFBUztvQkFDUixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQ3JCO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7OztZQW5JRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFFakMsMHdMQUF1QztnQkFDdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUF4RHNFLFFBQVE7WUFHdkUsY0FBYzs0Q0F3RWpCLE1BQU0sU0FBQyxrQkFBa0I7WUFqRXRCLGVBQWU7WUFWVSxpQkFBaUI7NENBOEU3QyxNQUFNLFNBQUMsV0FBVzs7O3dCQVpwQixLQUFLOzBCQUVMLEtBQUs7NEJBQ0wsS0FBSzttQ0FDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7SVVzZXJFdmVudFNlcnZpY2UsIFVTRVJfRVZFTlRfU0VSVklDRX0gZnJvbSAnLi91c2VyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyRXZlbnQsIFVzZXJFdmVudEFjdGlvbiwgVXNlckV2ZW50RmlsdGVyLCBVc2VyRXZlbnRUeXBlc30gZnJvbSAnLi91c2VyLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7dG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtBcHBUYWJsZSwgUkVTRVJWRURfRU5EX0NPTFVNTlMsIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlN9IGZyb20gJy4uLy4uL2NvcmUvdGFibGUvdGFibGUuY2xhc3MnO1xuaW1wb3J0IHtFbnRpdGllc1RhYmxlRGF0YVNvdXJjZX0gZnJvbSAnLi4vLi4vY29yZS90YWJsZS9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzJztcbmltcG9ydCB7U29ydERpcmVjdGlvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0VudGl0aWVzU3RvcmFnZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9zdG9yYWdlL2VudGl0aWVzLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1ByZWRlZmluZWRDb2xvcnN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7SUVudGl0eX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFdmVudERldGFpbDxUIGV4dGVuZHMgSUVudGl0eTxUPj4ge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcblxuICBhY3Rpb24/OiBzdHJpbmcgfCBhbnk7XG4gIGFjdGlvblRpdGxlPzogc3RyaW5nO1xuICBhY3Rpb25Db2xvcj86IFByZWRlZmluZWRDb2xvcnM7XG5cbiAgaWNvbj86IHN0cmluZztcbiAgbWF0SWNvbj86IHN0cmluZztcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuICB0aW1lPzogTW9tZW50O1xuXG4gIC8vIEEgY29uZmlnIHByb3BlcnR5LCB0byBvdmVycmlkZSB0aGUgdGl0bGVcbiAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZztcbiAgdGl0bGVBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvLyBjb252ZXJzaW9uXG4gIGZyb21PYmplY3Q/OiAoc291cmNlOiBhbnkpID0+IFQ7XG4gIGNoaWxkcmVuRmllbGRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckV2ZW50SWNvbiB7XG4gIGljb24/OiBzdHJpbmc7XG4gIG1hdEljb24/OiBzdHJpbmc7XG4gIGNvbG9yPzogUHJlZGVmaW5lZENvbG9ycztcbn1cblxuY29uc3QgSUNPTlNfTUFQOiB7IFtrZXk6IHN0cmluZ106IFVzZXJFdmVudEljb24gfSA9IHtcbiAgREVCVUdfREFUQTogeyBtYXRJY29uOiAnYnVnX3JlcG9ydCcgfSxcbiAgSU5CT1hfTUVTU0FHRTogeyBtYXRJY29uOiAnbWFpbCcgfVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItZXZlbnRzLXRhYmxlJyxcbiAgc3R5bGVVcmxzOiBbJ3VzZXItZXZlbnRzLnRhYmxlLnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZXZlbnRzLnRhYmxlLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcblxuZXhwb3J0IGNsYXNzIFVzZXJFdmVudHNUYWJsZSBleHRlbmRzIEFwcFRhYmxlPFVzZXJFdmVudCwgVXNlckV2ZW50RmlsdGVyPlxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZGF0ZVRpbWVQYXR0ZXJuOiBzdHJpbmc7XG4gIGNhbkVkaXQ6IGJvb2xlYW47XG4gIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgaXNBZG1pbjogYm9vbGVhbjtcblxuICBASW5wdXQoKSByZWNpcGllbnQ6IHN0cmluZztcblxuICBASW5wdXQoKSB3aXRoQ29udGVudDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVmYXVsdFNvcnRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBASW5qZWN0KFVTRVJfRVZFTlRfU0VSVklDRSkgcHJvdGVjdGVkIHNlcnZpY2U6IElVc2VyRXZlbnRTZXJ2aWNlPFVzZXJFdmVudCwgVXNlckV2ZW50RmlsdGVyPixcbiAgICBwcm90ZWN0ZWQgZW50aXRpZXM6IEVudGl0aWVzU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvcixcbiAgICAgIC8vIGNvbHVtbnNcbiAgICAgIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlNcbiAgICAgICAgLmNvbmNhdChbXG4gICAgICAgICAgJ2NyZWF0aW9uRGF0ZScsXG4gICAgICAgICAgJ2ljb24nLFxuICAgICAgICAgICdldmVudFR5cGUnLFxuICAgICAgICAgICdtZXNzYWdlJ1xuICAgICAgICBdKVxuICAgICAgICAuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKSxcbiAgICAgIG51bGwsXG4gICAgICBudWxsKTtcblxuICAgIHRoaXMuaTE4bkNvbHVtblByZWZpeCA9ICdTT0NJQUwuVVNFUl9FVkVOVC4nO1xuICAgIHRoaXMuYXV0b0xvYWQgPSBmYWxzZTsgLy8gdGhpcy5zdGFydCgpXG4gICAgdGhpcy5pbmxpbmVFZGl0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gJ2NyZWF0aW9uRGF0ZSc7XG4gICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9ICdkZXNjJztcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIExvYWQgZGF0ZS90aW1lIHBhdHRlcm5cbiAgICB0aGlzLmRhdGVUaW1lUGF0dGVybiA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTicpO1xuICAgIHRoaXMud2l0aENvbnRlbnQgPSB0b0Jvb2xlYW4odGhpcy53aXRoQ29udGVudCwgZmFsc2UpO1xuXG4gICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcbiAgICBjb25zdCBwdWJrZXkgPSBhY2NvdW50ICYmIGFjY291bnQucHVia2V5O1xuICAgIHRoaXMuaXNBZG1pbiA9IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNBZG1pbigpO1xuICAgIHRoaXMuY2FuRWRpdCA9IHRoaXMuaXNBZG1pbiB8fCBwdWJrZXkgPT09IHRoaXMucmVjaXBpZW50O1xuICAgIHRoaXMuY2FuRGVsZXRlID0gdGhpcy5jYW5FZGl0O1xuXG4gICAgdGhpcy5zZXREYXRhc291cmNlKG5ldyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZShVc2VyRXZlbnQsXG4gICAgICB0aGlzLnNlcnZpY2UsXG4gICAgICBudWxsLFxuICAgICAge1xuICAgICAgICBwcmVwZW5kTmV3RWxlbWVudHM6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Vycm9yczogdHJ1ZSxcbiAgICAgICAgZGF0YVNlcnZpY2VPcHRpb25zOiB7XG4gICAgICAgICAgd2l0aENvbnRlbnQ6IHRoaXMud2l0aENvbnRlbnRcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5maWx0ZXIgfHwgbmV3IFVzZXJFdmVudEZpbHRlcigpO1xuICAgIGZpbHRlci5yZWNpcGllbnRzID0gW3RoaXMucmVjaXBpZW50XTtcbiAgICB0aGlzLnNldEZpbHRlcihmaWx0ZXIsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW3VzZXItZXZlbnRdIFN0YXJ0aW5nLi4uJyk7XG5cbiAgICAvLyBXYWl0aW5nIGFjY291bnQgdG8gYmUgcmVhZHlcbiAgICBhd2FpdCB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gIH1cblxuICBnZXRJY29uKHNvdXJjZTogVXNlckV2ZW50KTogVXNlckV2ZW50SWNvbiB7XG4gICAgcmV0dXJuIElDT05TX01BUFtzb3VyY2UudHlwZV07XG4gIH1cblxuICBnZXREZXRhaWwoc291cmNlOiBVc2VyRXZlbnQpOiBQYXJ0aWFsPFVzZXJFdmVudERldGFpbDxJRW50aXR5PGFueT4+ICYgeyBhY3Rpb25zOiBVc2VyRXZlbnRBY3Rpb25bXSB9PiB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoc291cmNlLmNvbnRlbnQgJiYgc291cmNlLnR5cGUgPT09IFVzZXJFdmVudFR5cGVzLkRFQlVHX0RBVEEpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzb3VyY2UuY29udGVudC5jb250ZXh0O1xuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fX3R5cGVuYW1lKSB7XG4gICAgICAgIC8vIGNvbnN0IGFjdGlvbnMgPSB0aGlzLnNlcnZpY2UuZ2V0QWN0aW9uc0J5VHlwZW5hbWUoY29udGV4dC5fX3R5cGVuYW1lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyBhY3Rpb25zLFxuICAgICAgICAgIHRpdGxlOiBzb3VyY2UuY29udGVudC5lcnJvciAmJiBzb3VyY2UuY29udGVudC5lcnJvci5tZXNzYWdlIHx8IHNvdXJjZS5jb250ZW50Lm1lc3NhZ2UsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHNvdXJjZS5jb250ZW50LmVycm9yICYmIHNvdXJjZS5jb250ZW50LmVycm9yLmRldGFpbHMgfHwgdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnVE9ETzogaW1wbGVtZW50IGdldERldGFpbCgpIGZvciBldmVudDogJywgc291cmNlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuXG4gIGFzeW5jIGRvQWN0aW9uKGFjdGlvbjogVXNlckV2ZW50QWN0aW9uLCByb3c6IFRhYmxlRWxlbWVudDxVc2VyRXZlbnQ+KSB7XG5cbiAgICBjb25zdCBldmVudCA9IHJvdy5jdXJyZW50RGF0YTtcbiAgICAvLyBjb25zdCBjb250ZXh0ID0gZXZlbnQuY29udGVudCAmJiBldmVudC5jb250ZW50LmNvbnRleHQ7XG5cbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIGlmIChhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbi5leGVjdXRlQWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgcmVzID0gYWN0aW9uLmV4ZWN1dGVBY3Rpb24oZXZlbnQvKiwgY29udGV4dCovKTtcbiAgICAgICAgcmVzID0gKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpID8gYXdhaXQgcmVzIDogcmVzO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFt1c2VyLWV2ZW50XSBGYWlsZWQgdG8gZXhlY3V0ZSBhY3Rpb24gJHthY3Rpb24ubmFtZX06ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19
|
|
@@ -26047,6 +26047,10 @@ let UserEventFilter = class UserEventFilter extends EntityFilter {
|
|
|
26047
26047
|
}
|
|
26048
26048
|
return filterFns;
|
|
26049
26049
|
}
|
|
26050
|
+
asObject(opts) {
|
|
26051
|
+
const target = super.asObject(opts);
|
|
26052
|
+
return target;
|
|
26053
|
+
}
|
|
26050
26054
|
};
|
|
26051
26055
|
UserEventFilter = __decorate([
|
|
26052
26056
|
EntityClass({ typename: 'UserEventFilterVO' })
|
|
@@ -26079,7 +26083,7 @@ const UserEventFragments = {
|
|
|
26079
26083
|
};
|
|
26080
26084
|
|
|
26081
26085
|
const moment$6 = momentImported;
|
|
26082
|
-
const
|
|
26086
|
+
const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
26083
26087
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
26084
26088
|
constructor(graphql, accountService, network, translate, options) {
|
|
26085
26089
|
super(graphql, options);
|
|
@@ -26537,7 +26541,7 @@ const userEventMutations = {
|
|
|
26537
26541
|
`
|
|
26538
26542
|
};
|
|
26539
26543
|
class UserEventService extends AbstractUserEventService {
|
|
26540
|
-
constructor(graphql, accountService, network, translate,
|
|
26544
|
+
constructor(graphql, accountService, network, translate, environment) {
|
|
26541
26545
|
super(graphql, accountService, network, translate, {
|
|
26542
26546
|
queries: userEventQueries,
|
|
26543
26547
|
mutations: userEventMutations,
|
|
@@ -26547,75 +26551,8 @@ class UserEventService extends AbstractUserEventService {
|
|
|
26547
26551
|
this.accountService = accountService;
|
|
26548
26552
|
this.network = network;
|
|
26549
26553
|
this.translate = translate;
|
|
26550
|
-
this.toastController = toastController;
|
|
26551
26554
|
this.environment = environment;
|
|
26552
26555
|
}
|
|
26553
|
-
showToastErrorWithContext(opts) {
|
|
26554
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
26555
|
-
let message = opts.message || (opts.error && opts.error.message || opts.error);
|
|
26556
|
-
// Make sure message a string
|
|
26557
|
-
if (!message || typeof message !== 'string') {
|
|
26558
|
-
message = 'ERROR.UNKNOWN_TECHNICAL_ERROR';
|
|
26559
|
-
}
|
|
26560
|
-
// If offline, display a simple alert
|
|
26561
|
-
if (this.network.offline) {
|
|
26562
|
-
this.showToast({ message, type: 'error' });
|
|
26563
|
-
return;
|
|
26564
|
-
}
|
|
26565
|
-
// Translate the message (to be able to extract details content)
|
|
26566
|
-
message = this.translate.instant(message);
|
|
26567
|
-
// Clean details parts
|
|
26568
|
-
if (message && message.indexOf('<small>') !== -1) {
|
|
26569
|
-
message = message.substr(0, message.indexOf('<small>') - 1);
|
|
26570
|
-
}
|
|
26571
|
-
const res = yield this.showToast({
|
|
26572
|
-
type: 'error',
|
|
26573
|
-
duration: 15000,
|
|
26574
|
-
message: message + '<br/><br/><b>' + this.translate.instant('CONFIRM.SEND_DEBUG_DATA') + '</b>',
|
|
26575
|
-
buttons: [{
|
|
26576
|
-
icon: 'bug',
|
|
26577
|
-
text: this.translate.instant('COMMON.BTN_SEND'),
|
|
26578
|
-
role: 'send'
|
|
26579
|
-
}]
|
|
26580
|
-
});
|
|
26581
|
-
if (!res || res.role !== 'send')
|
|
26582
|
-
return;
|
|
26583
|
-
// Send debug data
|
|
26584
|
-
try {
|
|
26585
|
-
if (this._debug)
|
|
26586
|
-
console.debug('Sending debug data...');
|
|
26587
|
-
// Call content factory
|
|
26588
|
-
let context = opts && opts.context;
|
|
26589
|
-
if (typeof context === 'function') {
|
|
26590
|
-
context = context();
|
|
26591
|
-
}
|
|
26592
|
-
if (context instanceof Promise) {
|
|
26593
|
-
context = yield context;
|
|
26594
|
-
}
|
|
26595
|
-
// Send the message
|
|
26596
|
-
const userEvent = yield this.sendDataForDebug({
|
|
26597
|
-
message,
|
|
26598
|
-
error: opts.error || undefined,
|
|
26599
|
-
context: this.convertObjectToString(context)
|
|
26600
|
-
});
|
|
26601
|
-
console.info('Debug data successfully sent to admin', userEvent);
|
|
26602
|
-
this.showToast({
|
|
26603
|
-
type: 'info',
|
|
26604
|
-
message: 'INFO.DEBUG_DATA_SEND',
|
|
26605
|
-
showCloseButton: true
|
|
26606
|
-
});
|
|
26607
|
-
}
|
|
26608
|
-
catch (err) {
|
|
26609
|
-
console.error('Error while sending debug data:', err);
|
|
26610
|
-
}
|
|
26611
|
-
});
|
|
26612
|
-
}
|
|
26613
|
-
sendDataForDebug(data) {
|
|
26614
|
-
const userEvent = new UserEvent();
|
|
26615
|
-
userEvent.type = UserEventTypes.DEBUG_DATA;
|
|
26616
|
-
userEvent.content = this.convertObjectToString(data);
|
|
26617
|
-
return this.save(userEvent);
|
|
26618
|
-
}
|
|
26619
26556
|
asFilter(filter) {
|
|
26620
26557
|
return UserEventFilter.fromObject(filter);
|
|
26621
26558
|
}
|
|
@@ -26623,27 +26560,6 @@ class UserEventService extends AbstractUserEventService {
|
|
|
26623
26560
|
return UserEvent.fromObject(source);
|
|
26624
26561
|
}
|
|
26625
26562
|
/* -- protected methods -- */
|
|
26626
|
-
convertObjectToString(data) {
|
|
26627
|
-
if (typeof data === 'string') {
|
|
26628
|
-
return data;
|
|
26629
|
-
}
|
|
26630
|
-
// Serialize content into string
|
|
26631
|
-
else if (typeof data === 'object') {
|
|
26632
|
-
if (data instanceof Entity) {
|
|
26633
|
-
return JSON.stringify(data.asObject({ keepTypename: true, keepLocalId: true, minify: false }));
|
|
26634
|
-
}
|
|
26635
|
-
else {
|
|
26636
|
-
return JSON.stringify(data);
|
|
26637
|
-
}
|
|
26638
|
-
}
|
|
26639
|
-
}
|
|
26640
|
-
showToast(opts) {
|
|
26641
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
26642
|
-
if (!this.toastController)
|
|
26643
|
-
throw new Error('Missing toastController in component\'s constructor');
|
|
26644
|
-
return yield Toasts.show(this.toastController, this.translate, opts);
|
|
26645
|
-
});
|
|
26646
|
-
}
|
|
26647
26563
|
fillDefaultProperties(entity) {
|
|
26648
26564
|
entity.issuer = this.accountService.account.pubkey;
|
|
26649
26565
|
// TODO: compute hash (using cryptoService)
|
|
@@ -26659,7 +26575,6 @@ UserEventService.ctorParameters = () => [
|
|
|
26659
26575
|
{ type: AccountService },
|
|
26660
26576
|
{ type: NetworkService },
|
|
26661
26577
|
{ type: TranslateService },
|
|
26662
|
-
{ type: ToastController },
|
|
26663
26578
|
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
26664
26579
|
];
|
|
26665
26580
|
|
|
@@ -26667,29 +26582,6 @@ const ICONS_MAP = {
|
|
|
26667
26582
|
DEBUG_DATA: { matIcon: 'bug_report' },
|
|
26668
26583
|
INBOX_MESSAGE: { matIcon: 'mail' }
|
|
26669
26584
|
};
|
|
26670
|
-
// TODO: refactor with a registration done by data service:
|
|
26671
|
-
// - userEventService.registerEventAction({__typename: 'TripVO', ...})
|
|
26672
|
-
// - userEventService.getActionsFor(__typename): UserEventDetailAction
|
|
26673
|
-
/*const DETAILS_MAP: {[key: string]: UserEventAction<RootDataEntity<any>>} = {
|
|
26674
|
-
"TripVO": {
|
|
26675
|
-
icon: null,
|
|
26676
|
-
matIcon: "content_copy",
|
|
26677
|
-
action: 'copyToLocal',
|
|
26678
|
-
actionTitle: 'SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL',
|
|
26679
|
-
actionColor: 'primary',
|
|
26680
|
-
fromObject: Trip.fromObject,
|
|
26681
|
-
childrenFields: ['operation', 'landing']
|
|
26682
|
-
},
|
|
26683
|
-
"ObservedLocationVO": {
|
|
26684
|
-
icon: null,
|
|
26685
|
-
matIcon: "content_copy",
|
|
26686
|
-
action: 'copyToLocal',
|
|
26687
|
-
actionTitle: 'SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL',
|
|
26688
|
-
actionColor: 'primary',
|
|
26689
|
-
fromObject: ObservedLocation.fromObject,
|
|
26690
|
-
childrenFields: ['landings']
|
|
26691
|
-
}
|
|
26692
|
-
}*/
|
|
26693
26585
|
class UserEventsTable extends AppTable {
|
|
26694
26586
|
constructor(injector, accountService, service, entities, cd, environment) {
|
|
26695
26587
|
super(injector,
|
|
@@ -26789,18 +26681,13 @@ UserEventsTable.decorators = [
|
|
|
26789
26681
|
selector: 'app-user-events-table',
|
|
26790
26682
|
template: "\n<!-- Type = options menu -->\n<mat-menu #optionsMenu=\"matMenu\" xPosition=\"after\">\n\n <!-- display columns -->\n <button mat-menu-item\n (click)=\"openSelectColumnsModal($event)\">\n <mat-icon>view_column</mat-icon>\n <ion-label translate>COMMON.DISPLAYED_COLUMNS_DOTS</ion-label>\n </button>\n\n</mat-menu>\n\n<!-- top header -->\n<mat-toolbar>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n\n <button mat-icon-button [title]=\"'COMMON.BTN_REFRESH'|translate\" (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button class=\"hidden-xs hidden-sm\" *ngIf=\"canDelete\"\n [title]=\"'COMMON.BTN_DELETE'|translate\" (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" hidden-xs hidden-sm hidden-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"toolbar-spacer\"></div>\n\n <button mat-icon-button\n [title]=\"'COMMON.BTN_OPTIONS'|translate\"\n [matMenuTriggerFor]=\"optionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n</mat-toolbar>\n\n\n<mat-table [dataSource]=\"dataSource\" matSort\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <!-- select -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <!-- id -->\n <ng-container matColumnDef=\"id\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [class.cdk-visually-hidden]=\"!isAdmin\">\n <app-loading-spinner [loading]=\"loadingSubject|async\"><ion-label>#</ion-label></app-loading-spinner>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!isAdmin\">{{ row.currentData.id | mathAbs }}</mat-cell>\n </ng-container>\n\n <!-- creationDate -->\n <ng-container matColumnDef=\"creationDate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.CREATION_DATE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ion-text>\n {{row.currentData.creationDate | dateFromNow }}<br/>\n <ion-text color=\"medium\"><small>{{row.currentData.creationDate | dateFormat: {time: true} }}</small></ion-text>\n </ion-text>\n </mat-cell>\n </ng-container>\n\n <!-- icon -->\n <ng-container matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getIcon(row.currentData); let details\">\n <ion-icon slot=\"start\" *ngIf=\"details.icon\" [name]=\"details.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"details.matIcon\">{{details.matIcon}}</mat-icon>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- event type -->\n <ng-container matColumnDef=\"eventType\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.EVENT_TYPE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <span>{{'SOCIAL.USER_EVENT.TYPE_ENUM.' + row.currentData.eventType | translate}}</span>\n </mat-cell>\n </ng-container>\n\n <!-- message -->\n <ng-container matColumnDef=\"message\">\n <mat-header-cell *matHeaderCellDef>\n <ion-label translate>SOCIAL.USER_EVENT.MESSAGE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <ion-text [innerHTML]=\"details.title|translate\">\n </ion-text>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- Actions buttons column -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <button mat-icon-button color=\"light\"\n *ngFor=\"let action of details.actions\"\n [title]=\"action.title |translate\"\n [color]=\"action.color\"\n (click)=\"doAction(action, row)\">\n <app-icon slot=\"start\" *ngIf=\"action.iconRef\" [ref]=\"action.iconRef\"></app-icon>\n </button>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n class=\"mat-row-disabled\"\n (click)=\"clickRow($event, row)\"></mat-row>\n\n</mat-table>\n\n<ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col class=\"ion-no-padding\" size=\"auto\">\n <mat-paginator [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n </ion-col>\n</ion-row>\n",
|
|
26791
26683
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
26792
|
-
providers: [
|
|
26793
|
-
{
|
|
26794
|
-
provide: UserEventServiceToken, useClass: UserEventService
|
|
26795
|
-
}
|
|
26796
|
-
],
|
|
26797
26684
|
styles: [".mat-header-row .mat-column-icon,.mat-row .mat-column-icon{max-width:40px;padding-left:0}.mat-header-row .mat-column-icon ion-icon,.mat-header-row .mat-column-icon mat-icon,.mat-row .mat-column-icon ion-icon,.mat-row .mat-column-icon mat-icon{font-size:1.2em;height:1.2em;width:1.2em}.mat-header-row .mat-column-creationDate,.mat-row .mat-column-creationDate{min-width:100px;max-width:120px}"]
|
|
26798
26685
|
},] }
|
|
26799
26686
|
];
|
|
26800
26687
|
UserEventsTable.ctorParameters = () => [
|
|
26801
26688
|
{ type: Injector },
|
|
26802
26689
|
{ type: AccountService },
|
|
26803
|
-
{ type: undefined, decorators: [{ type: Inject, args: [
|
|
26690
|
+
{ type: undefined, decorators: [{ type: Inject, args: [USER_EVENT_SERVICE,] }] },
|
|
26804
26691
|
{ type: EntitiesStorage },
|
|
26805
26692
|
{ type: ChangeDetectorRef },
|
|
26806
26693
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
|
|
@@ -26877,7 +26764,7 @@ UserEventNotificationList.decorators = [
|
|
|
26877
26764
|
UserEventNotificationList.ctorParameters = () => [
|
|
26878
26765
|
{ type: ChangeDetectorRef },
|
|
26879
26766
|
{ type: PopoverController },
|
|
26880
|
-
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [
|
|
26767
|
+
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [USER_EVENT_SERVICE,] }] }
|
|
26881
26768
|
];
|
|
26882
26769
|
UserEventNotificationList.propDecorators = {
|
|
26883
26770
|
debug: [{ type: Input }],
|
|
@@ -26957,7 +26844,7 @@ UserEventNotificationComponent.decorators = [
|
|
|
26957
26844
|
},] }
|
|
26958
26845
|
];
|
|
26959
26846
|
UserEventNotificationComponent.ctorParameters = () => [
|
|
26960
|
-
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [
|
|
26847
|
+
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [USER_EVENT_SERVICE,] }] },
|
|
26961
26848
|
{ type: AccountService },
|
|
26962
26849
|
{ type: PopoverController }
|
|
26963
26850
|
];
|
|
@@ -27055,7 +26942,7 @@ UserEventModule.decorators = [
|
|
|
27055
26942
|
UserEventNotificationComponent
|
|
27056
26943
|
],
|
|
27057
26944
|
providers: [
|
|
27058
|
-
{ provide:
|
|
26945
|
+
{ provide: USER_EVENT_SERVICE, useClass: UserEventTestService }
|
|
27059
26946
|
]
|
|
27060
26947
|
},] }
|
|
27061
26948
|
];
|
|
@@ -29533,5 +29420,5 @@ CoreTestingModule.decorators = [
|
|
|
29533
29420
|
* Generated bundle index. Do not edit.
|
|
29534
29421
|
*/
|
|
29535
29422
|
|
|
29536
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionComponent, JobProgressionService, JobProgressionServiceToken, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, ResizableComponent, ResizableDirective, ResizableModule, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventModule, UserEventNotificationComponent, UserEventService,
|
|
29423
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionComponent, JobProgressionService, JobProgressionServiceToken, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, ResizableComponent, ResizableDirective, ResizableModule, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, USER_EVENT_SERVICE, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventModule, UserEventNotificationComponent, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, UserEventNotificationList as ɵj, UserEventTestService as ɵk, JobProgressionList as ɵl, DateTestPage as ɵm, NumpadTestPage as ɵn, MatBadgeIconTestPage as ɵo, ToastTestingModule as ɵp, ToastTestingPage as ɵq };
|
|
29537
29424
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|