@sumaris-net/ngx-components 1.22.9 → 1.22.11-rc2

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.
Files changed (33) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +480 -49
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
  5. package/doc/changelog.md +6 -0
  6. package/esm2015/public_api.js +11 -2
  7. package/esm2015/src/app/core/menu/menu.component.js +2 -2
  8. package/esm2015/src/app/social/job/testing/job-progression.testing.js +48 -0
  9. package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +30 -0
  10. package/esm2015/src/app/social/job/testing/job.testing.module.js +25 -0
  11. package/esm2015/src/app/social/social.module.js +6 -1
  12. package/esm2015/src/app/social/social.testing.module.js +39 -0
  13. package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +94 -0
  14. package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +17 -15
  15. package/esm2015/src/app/social/user-event/testing/user-event.testing.js +162 -0
  16. package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +25 -0
  17. package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +6 -3
  18. package/esm2015/src/app/social/user-event/user-event.module.js +4 -4
  19. package/esm2015/src/app/social/user-event/user-event.service.js +8 -8
  20. package/fesm2015/sumaris-net.ngx-components.js +414 -38
  21. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  22. package/package.json +1 -1
  23. package/public_api.d.ts +8 -1
  24. package/src/app/social/job/testing/job-progression.testing.d.ts +11 -0
  25. package/src/app/social/job/testing/job-progression.testing.service.d.ts +10 -0
  26. package/src/app/social/job/testing/job.testing.module.d.ts +2 -0
  27. package/src/app/social/social.testing.module.d.ts +4 -0
  28. package/src/app/social/user-event/notification/{user-event-notification.component.d.ts → user-event-notification.icon.d.ts} +3 -2
  29. package/src/app/social/user-event/testing/user-event.testing.d.ts +22 -0
  30. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +2 -0
  31. package/src/app/social/user-event/user-event.service.d.ts +4 -4
  32. package/sumaris-net.ngx-components.metadata.json +1 -1
  33. package/esm2015/src/app/social/user-event/notification/user-event-notification.component.js +0 -89
@@ -32,7 +32,7 @@ import { MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteModule, MAT_AUT
32
32
  import { __awaiter, __decorate } from 'tslib';
33
33
  import { Validators, NG_VALUE_ACCESSOR, FormGroupDirective, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, FormBuilder } from '@angular/forms';
34
34
  import { timer, merge, fromEvent, BehaviorSubject, Subscription, Subject, isObservable, from, of, noop as noop$9, Observable, defer, forkJoin, interval, combineLatest, EMPTY } from 'rxjs';
35
- import { filter, first, map, takeUntil, switchMap, tap, debounceTime, startWith, distinctUntilChanged, mergeMap, catchError, throttleTime, skip, bufferWhen } from 'rxjs/operators';
35
+ import { filter, first, map, takeUntil, switchMap, tap, debounceTime, startWith, distinctUntilChanged, mergeMap, catchError, throttleTime, skip, bufferWhen, take } from 'rxjs/operators';
36
36
  import { trigger, transition, style, animate, state } from '@angular/animations';
37
37
  import { TranslateService, TranslateModule } from '@ngx-translate/core';
38
38
  import { IonicModule, Platform, IonRouterOutlet, ModalController, PopoverController, IonicSafeString, createAnimation, ToastController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent, IonInfiniteScroll } from '@ionic/angular';
@@ -21485,7 +21485,7 @@ class MenuComponent {
21485
21485
  MenuComponent.decorators = [
21486
21486
  { type: Component, args: [{
21487
21487
  selector: 'app-menu',
21488
- template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <span *ngIf=\"!logo\" style=\"width: 108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion slot='header-bottom-right' -->\n <ion-col size=\"auto\">\n <ng-content select=\"[slot=header-bottom-right]\"></ng-content>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ion-menu-toggle auto-hide=\"false\"\n [class.flex-spacer]=\"item.cssClass == 'flex-spacer'\"\n *ngFor=\"let item of $items | async\">\n\n <!-- link -->\n <ion-item *ngIf=\"!loading && item.path\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/')}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"!loading && item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!loading && !item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n </ion-menu-toggle>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '&#xab;' : '&#xbb;'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n",
21488
+ template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <span *ngIf=\"!logo\" style=\"width: 108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ion-menu-toggle auto-hide=\"false\"\n [class.flex-spacer]=\"item.cssClass == 'flex-spacer'\"\n *ngFor=\"let item of $items | async\">\n\n <!-- link -->\n <ion-item *ngIf=\"!loading && item.path\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/')}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"!loading && item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!loading && !item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n </ion-menu-toggle>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '&#xab;' : '&#xbb;'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n",
21489
21489
  animations: [fadeInAnimation],
21490
21490
  changeDetection: ChangeDetectionStrategy.OnPush,
21491
21491
  styles: ["ion-menu{--ion-item-background:transparent;--ion-item-divider-background:transparent;--ion-item-icon-color:var(--ion-color-primary-tint);--ion-item-text-color:var(--ion-color-primary-tint);--ion-item-background-selected:var(--ion-color-secondary100);--ion-item-text-color-selected:var(--ion-color-primary);--ion-item-icon-color-selected:var(--ion-color-primary);--ion-item-text-color-disable:var(--ion-color-medium);--ion-item-icon-color-disable:var(--ion-color-medium)}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header .user-avatar{background-size:cover;background-repeat:no-repeat;background-position:50%;background-color:var(--ion-color-secondary);border:1px solid var(--ion-color-primary);overflow:hidden!important;font-size:var(--avatar-size,60px)!important;line-height:var(--avatar-size,60px);height:var(--avatar-size,60px)!important;width:var(--avatar-size,60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:2px solid var(--ion-color-primary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size,60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;text-align:start!important;width:100%}ion-menu .scroll-content{margin-top:79px!important}ion-menu .has-user-header .scroll-content{margin-top:188px!important}ion-menu ion-content.has-profile-header{--offset-top:188px}ion-menu ion-content.no-profile-header{--offset-top:79px}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color:var(--ion-color-primary-tint);--ion-item-text-color:var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color:var(--ion-color-secondary-tint);--ion-item-text-color:var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color:var(--ion-color-tertiary-tint);--ion-item-text-color:var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color:var(--ion-color-danger-tint);--ion-item-text-color:var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color:var(--ion-color-medium-shade);--ion-item-text-color:var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color:var(--ion-color-dark-tint);--ion-item-text-color:var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item ion-icon,ion-menu ion-content ion-list ion-item mat-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-label,ion-menu ion-content ion-list ion-item ion-text{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover:var(--ion-item-background-selected)!important}ion-menu ion-content ion-list ion-item.selected ion-icon,ion-menu ion-content ion-list ion-item.selected mat-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-label,ion-menu ion-content ion-list ion-item.selected ion-text{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover:var(--ion-item-background-selected)!important;--ion-item-icon-color-selected:var(--ion-item-icon-color)!important;--ion-item-text-color-selected:var(--ion-item-text-color)!important}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width:40px}@media screen and (max-width:767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width:768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size,80px)!important;line-height:var(--avatar-size,80px);height:var(--avatar-size,80px)!important;width:var(--avatar-size,80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size,80px)}}"]
@@ -25968,7 +25968,7 @@ class AbstractUserEventService extends BaseGraphqlService {
25968
25968
  this.network = network;
25969
25969
  this.translate = translate;
25970
25970
  this.options = options;
25971
- this.count$ = new BehaviorSubject(0);
25971
+ this._countSubject = new BehaviorSubject(0);
25972
25972
  this.listeners = [];
25973
25973
  this._subscriptions = new Subscription();
25974
25974
  this.queries = options.queries;
@@ -25976,8 +25976,8 @@ class AbstractUserEventService extends BaseGraphqlService {
25976
25976
  this.subscriptions = options.subscriptions || {};
25977
25977
  this._logPrefix = '[user-event-service] ';
25978
25978
  }
25979
- get userEventCount() {
25980
- return this.count$.asObservable();
25979
+ get countSubject() {
25980
+ return this._countSubject;
25981
25981
  }
25982
25982
  ngOnStart() {
25983
25983
  return __awaiter(this, void 0, void 0, function* () {
@@ -26057,7 +26057,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26057
26057
  data: entity
26058
26058
  });
26059
26059
  // Update count
26060
- this.count$.next(this.count$.value + 1);
26060
+ this._countSubject.next(this._countSubject.value + 1);
26061
26061
  }
26062
26062
  count(filter, options) {
26063
26063
  var _a;
@@ -26109,7 +26109,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26109
26109
  if (total && this._debug)
26110
26110
  console.debug(`${this._logPrefix}Received new user events count:`, total);
26111
26111
  // update count
26112
- this.count$.next(total);
26112
+ this._countSubject.next(total);
26113
26113
  return total;
26114
26114
  }));
26115
26115
  }
@@ -26255,7 +26255,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26255
26255
  this.listeners.push(listener);
26256
26256
  }
26257
26257
  resetCount() {
26258
- this.count$.next(undefined);
26258
+ this._countSubject.next(undefined);
26259
26259
  this.resetCountDate = moment$6();
26260
26260
  // restart listening count changes
26261
26261
  this.startListenCountChanges();
@@ -26268,7 +26268,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26268
26268
  if (this._debug)
26269
26269
  console.debug(`${this._logPrefix}Receiving user events count`, count);
26270
26270
  // Update count
26271
- this.count$.next(count);
26271
+ this._countSubject.next(count);
26272
26272
  // Then listen changes
26273
26273
  this.startListenCountChanges();
26274
26274
  });
@@ -26391,20 +26391,22 @@ class UserEventNotificationList {
26391
26391
  }
26392
26392
  ngOnInit() {
26393
26393
  // Watch all user events
26394
- this.subscriptions.add(this.userEventService
26395
- .watchAll(0, 10, 'creationDate', "desc", undefined)
26396
- .subscribe(result => {
26397
- if (this.debug)
26398
- console.debug(`[user-event-notification-list] receiving ${result.total} user events`, result.data);
26399
- this.userEvents.next(result.data);
26400
- this.markForCheck();
26401
- }));
26402
- // Listen changes
26403
- this.subscriptions.add(this.userEventService.listenChanges(undefined)
26404
- .subscribe(data => {
26405
- if (this.debug)
26406
- console.debug(`[user-event-notification-list] receiving ${data.length} new user events`, data);
26407
- }));
26394
+ if (this.userEventService) {
26395
+ this.subscriptions.add(this.userEventService
26396
+ .watchAll(0, 10, 'creationDate', 'desc', undefined)
26397
+ .subscribe(result => {
26398
+ if (this.debug)
26399
+ console.debug(`[user-event-notification-list] receiving ${result.total} user events`, result.data);
26400
+ this.userEvents.next(result.data);
26401
+ this.markForCheck();
26402
+ }));
26403
+ // Listen changes
26404
+ this.subscriptions.add(this.userEventService.listenChanges(undefined)
26405
+ .subscribe(data => {
26406
+ if (this.debug)
26407
+ console.debug(`[user-event-notification-list] receiving ${data.length} new user events`, data);
26408
+ }));
26409
+ }
26408
26410
  }
26409
26411
  ngOnDestroy() {
26410
26412
  this.subscriptions.unsubscribe();
@@ -26454,7 +26456,7 @@ UserEventNotificationList.propDecorators = {
26454
26456
  readEvents: [{ type: Output }]
26455
26457
  };
26456
26458
 
26457
- class UserEventNotificationComponent {
26459
+ class AppUserEventNotificationIcon {
26458
26460
  constructor(userEventService, accountService, popoverController) {
26459
26461
  this.userEventService = userEventService;
26460
26462
  this.accountService = accountService;
@@ -26462,13 +26464,17 @@ class UserEventNotificationComponent {
26462
26464
  this.debug = false;
26463
26465
  this.titleI18n = 'SOCIAL.USER_EVENT.NOTIFICATION.TITLE';
26464
26466
  this.disabled = false;
26467
+ this.filter = null;
26465
26468
  this._logPrefix = '[user-event-notification] ';
26466
26469
  this._readEvent = new EventEmitter();
26467
26470
  this._readEvents = new EventEmitter();
26468
26471
  }
26469
- get count() {
26470
- var _a;
26471
- return (_a = this.userEventService) === null || _a === void 0 ? void 0 : _a.userEventCount.pipe(map(value => value === 0 ? undefined : value));
26472
+ get countChanges() {
26473
+ if (!this.userEventService)
26474
+ return of();
26475
+ return this.userEventService
26476
+ .countSubject
26477
+ .pipe(map(value => value === 0 ? undefined : value));
26472
26478
  }
26473
26479
  ngOnInit() {
26474
26480
  return __awaiter(this, void 0, void 0, function* () {
@@ -26516,23 +26522,23 @@ class UserEventNotificationComponent {
26516
26522
  }
26517
26523
  }
26518
26524
  }
26519
- UserEventNotificationComponent.decorators = [
26525
+ AppUserEventNotificationIcon.decorators = [
26520
26526
  { type: Component, args: [{
26521
- selector: 'app-user-event-notification-component',
26522
- template: "<button\n #button\n mat-icon-button\n [title]=\"titleI18n | translate\"\n [disabled]=\"disabled\"\n (click)=\"showList($event)\"\n>\n <mat-icon\n [matBadge]=\"count | async\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >notifications\n </mat-icon>\n</button>\n\n",
26523
- changeDetection: ChangeDetectionStrategy.OnPush,
26524
- styles: [""]
26527
+ selector: 'app-user-event-notification-icon',
26528
+ template: "<button\n #button\n mat-icon-button\n [title]=\"titleI18n | translate\"\n [disabled]=\"disabled\"\n (click)=\"showList($event)\"\n>\n <mat-icon\n [matBadge]=\"countChanges | async\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >notifications\n </mat-icon>\n</button>\n\n",
26529
+ changeDetection: ChangeDetectionStrategy.OnPush
26525
26530
  },] }
26526
26531
  ];
26527
- UserEventNotificationComponent.ctorParameters = () => [
26532
+ AppUserEventNotificationIcon.ctorParameters = () => [
26528
26533
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [USER_EVENT_SERVICE,] }] },
26529
26534
  { type: AccountService },
26530
26535
  { type: PopoverController }
26531
26536
  ];
26532
- UserEventNotificationComponent.propDecorators = {
26537
+ AppUserEventNotificationIcon.propDecorators = {
26533
26538
  debug: [{ type: Input }],
26534
26539
  titleI18n: [{ type: Input }],
26535
- disabled: [{ type: Input }]
26540
+ disabled: [{ type: Input }],
26541
+ filter: [{ type: Input }]
26536
26542
  };
26537
26543
 
26538
26544
  class UserEventModule {
@@ -26545,11 +26551,11 @@ UserEventModule.decorators = [
26545
26551
  AppIconModule
26546
26552
  ],
26547
26553
  declarations: [
26548
- UserEventNotificationComponent,
26554
+ AppUserEventNotificationIcon,
26549
26555
  UserEventNotificationList
26550
26556
  ],
26551
26557
  exports: [
26552
- UserEventNotificationComponent
26558
+ AppUserEventNotificationIcon
26553
26559
  ]
26554
26560
  },] }
26555
26561
  ];
@@ -27093,6 +27099,11 @@ SocialModule.decorators = [
27093
27099
  JobModule,
27094
27100
  MessageModule
27095
27101
  ],
27102
+ exports: [
27103
+ UserEventModule,
27104
+ JobModule,
27105
+ MessageModule
27106
+ ]
27096
27107
  },] }
27097
27108
  ];
27098
27109
 
@@ -29145,11 +29156,376 @@ CoreTestingModule.decorators = [
29145
29156
  },] }
29146
29157
  ];
29147
29158
 
29159
+ class JobProgressionTestService {
29160
+ listenChanges(id, options) {
29161
+ return interval(100).pipe(take(111), map(value => {
29162
+ if (value <= 10) {
29163
+ return {
29164
+ id: id,
29165
+ name: `Job #${id}`,
29166
+ current: 0,
29167
+ total: 0,
29168
+ message: `Progression pending`
29169
+ };
29170
+ }
29171
+ value = value - 10;
29172
+ return {
29173
+ id: id,
29174
+ name: `Job #${id}`,
29175
+ current: value,
29176
+ total: 100,
29177
+ message: `Progression ${value}/100`
29178
+ };
29179
+ }));
29180
+ }
29181
+ }
29182
+ JobProgressionTestService.decorators = [
29183
+ { type: Injectable }
29184
+ ];
29185
+
29186
+ class JobProgressionTestingPage {
29187
+ constructor() {
29188
+ this.nJob = 0;
29189
+ this.options = {
29190
+ autoHide: true
29191
+ };
29192
+ this.job = new JobProgression();
29193
+ this.job.id = 0;
29194
+ this.job.name = 'test';
29195
+ this.job.current = 0;
29196
+ this.job.total = 100;
29197
+ }
29198
+ incrementJob(value) {
29199
+ this.job.current = Math.max(0, this.job.current + value);
29200
+ this.job.message = `Fake progression (very long message very long message very long message very long message) ${this.job.current}/100`;
29201
+ if (this.job.current > this.job.total) {
29202
+ this.jobProgression.removeJob(0);
29203
+ this.job.current = 0;
29204
+ }
29205
+ else if (!this.jobProgression.getProgression(0)) {
29206
+ this.jobProgression.jobProgressions.push(this.job);
29207
+ }
29208
+ this.jobProgression.updateValue();
29209
+ }
29210
+ addJob() {
29211
+ // Add fake job
29212
+ this.nJob++;
29213
+ this.jobProgression.addJob(this.nJob);
29214
+ }
29215
+ }
29216
+ JobProgressionTestingPage.decorators = [
29217
+ { type: Component, args: [{
29218
+ selector: 'job-progression-testing',
29219
+ template: "<ion-toolbar color=\"primary\">\n <ion-title>Job progression</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <app-job-progression #jobProgression [debug]=\"true\" [options]=\"options\" ></app-job-progression>\n\n <p>\n <ion-button (click)=\"incrementJob(10)\">\n +10\n </ion-button>\n <ion-button (click)=\"incrementJob(-10)\">\n -10\n </ion-button>\n </p>\n <p>\n <ion-button (click)=\"addJob()\">Add Job</ion-button>\n </p>\n</ion-content>\n",
29220
+ providers: [
29221
+ { provide: JobProgressionServiceToken, useClass: JobProgressionTestService }
29222
+ ]
29223
+ },] }
29224
+ ];
29225
+ JobProgressionTestingPage.ctorParameters = () => [];
29226
+ JobProgressionTestingPage.propDecorators = {
29227
+ jobProgression: [{ type: ViewChild, args: ['jobProgression',] }]
29228
+ };
29229
+
29230
+ class JobTestingModule {
29231
+ }
29232
+ JobTestingModule.decorators = [
29233
+ { type: NgModule, args: [{
29234
+ imports: [
29235
+ CommonModule,
29236
+ TranslateModule.forChild(),
29237
+ SharedModule,
29238
+ JobModule
29239
+ ],
29240
+ declarations: [
29241
+ JobProgressionTestingPage
29242
+ ],
29243
+ exports: [
29244
+ JobProgressionTestingPage
29245
+ ]
29246
+ },] }
29247
+ ];
29248
+
29249
+ class UserEventTestService extends AbstractUserEventService {
29250
+ constructor(graphql, accountService, network, translate, environment) {
29251
+ super(graphql, accountService, network, translate, {
29252
+ queries: {
29253
+ loadAll: null,
29254
+ loadAllWithContent: null
29255
+ },
29256
+ production: environment === null || environment === void 0 ? void 0 : environment.production
29257
+ });
29258
+ this.graphql = graphql;
29259
+ this.accountService = accountService;
29260
+ this.network = network;
29261
+ this.translate = translate;
29262
+ this.environment = environment;
29263
+ this.userEvents = [];
29264
+ }
29265
+ fromObject(source) {
29266
+ return UserEvent.fromObject(source);
29267
+ }
29268
+ add(entity) {
29269
+ entity = this.processUserEvent(entity);
29270
+ entity.id = this.userEvents.length + 1;
29271
+ this.userEvents = [
29272
+ entity,
29273
+ ...this.userEvents
29274
+ ];
29275
+ this._countSubject.next((this._countSubject.value || 0) + 1);
29276
+ }
29277
+ asFilter(filter) {
29278
+ return filter;
29279
+ }
29280
+ count(filter, options) {
29281
+ return Promise.resolve(this.userEvents.length);
29282
+ }
29283
+ delete(entity) {
29284
+ return Promise.resolve(undefined);
29285
+ }
29286
+ deleteAll(data, opts) {
29287
+ return Promise.resolve(undefined);
29288
+ }
29289
+ listenChanges(filter, options) {
29290
+ return of();
29291
+ }
29292
+ save(entity, options) {
29293
+ var _a;
29294
+ const toSave = (_a = this.userEvents) === null || _a === void 0 ? void 0 : _a.find(value => value.id == (entity === null || entity === void 0 ? void 0 : entity.id));
29295
+ Object.assign(toSave, entity);
29296
+ return entity;
29297
+ }
29298
+ saveAll(data, opts) {
29299
+ return __awaiter(this, void 0, void 0, function* () {
29300
+ for (const entity of (data || [])) {
29301
+ yield this.save(entity);
29302
+ }
29303
+ return Promise.resolve(this.userEvents);
29304
+ });
29305
+ }
29306
+ watchAll(offset, size, sortBy, sortDirection, filter, options) {
29307
+ return of({ data: this.userEvents });
29308
+ }
29309
+ }
29310
+ UserEventTestService.decorators = [
29311
+ { type: Injectable }
29312
+ ];
29313
+ UserEventTestService.ctorParameters = () => [
29314
+ { type: GraphqlService },
29315
+ { type: AccountService },
29316
+ { type: NetworkService },
29317
+ { type: TranslateService },
29318
+ { type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
29319
+ ];
29320
+
29321
+ const moment$a = momentImported;
29322
+ class UserEventTestingPage {
29323
+ constructor(userEventService, router, alertController, translateService) {
29324
+ this.userEventService = userEventService;
29325
+ this.router = router;
29326
+ this.alertController = alertController;
29327
+ this.translateService = translateService;
29328
+ userEventService.registerListener({
29329
+ accept: (userEvent) => { return true; },
29330
+ onReceived: (userEvent) => {
29331
+ this.customize(userEvent);
29332
+ return userEvent;
29333
+ }
29334
+ });
29335
+ userEventService.registerListener({
29336
+ accept: (userEvent) => { return userEvent.level == "DEBUG"; },
29337
+ onRead: (userEvent) => { this.showMessage("debug message read "); }
29338
+ });
29339
+ }
29340
+ customize(userEvent) {
29341
+ // Choose avatarIcon
29342
+ switch (userEvent.level) {
29343
+ case 'ERROR':
29344
+ userEvent.avatarIcon = { icon: 'close-outline', color: 'danger' };
29345
+ break;
29346
+ case 'WARNING':
29347
+ userEvent.avatarIcon = { icon: 'warning-outline', color: 'warning' };
29348
+ break;
29349
+ case 'INFO':
29350
+ userEvent.avatarIcon = { icon: 'information-circle-outline' };
29351
+ break;
29352
+ case 'DEBUG':
29353
+ userEvent.avatarIcon = { icon: 'cog', color: "medium" };
29354
+ break;
29355
+ }
29356
+ // Choose icon
29357
+ switch (userEvent.type) {
29358
+ case 'message':
29359
+ userEvent.icon = { matIcon: 'inbox', color: 'accent' };
29360
+ break;
29361
+ case 'upload':
29362
+ userEvent.icon = { matIcon: 'file_upload' };
29363
+ break;
29364
+ case 'download':
29365
+ userEvent.icon = { matIcon: 'file_download' };
29366
+ break;
29367
+ }
29368
+ }
29369
+ addNotification() {
29370
+ this.userEventService.add(UserEvent.fromObject({
29371
+ issuer: 'system',
29372
+ recipient: 'me',
29373
+ type: 'message',
29374
+ level: 'INFO',
29375
+ message: 'message test message test message test message test message test message test message test message test',
29376
+ creationDate: moment$a(),
29377
+ }));
29378
+ }
29379
+ addError() {
29380
+ this.userEventService.add(UserEvent.fromObject({
29381
+ issuer: 'system',
29382
+ recipient: 'me',
29383
+ type: 'upload',
29384
+ level: 'ERROR',
29385
+ message: 'message error',
29386
+ creationDate: moment$a(),
29387
+ }));
29388
+ }
29389
+ addWarning() {
29390
+ this.userEventService.add(UserEvent.fromObject({
29391
+ issuer: 'system',
29392
+ recipient: 'me',
29393
+ type: 'download',
29394
+ level: 'WARNING',
29395
+ message: 'message warning',
29396
+ creationDate: moment$a(),
29397
+ }));
29398
+ }
29399
+ addDebug() {
29400
+ this.userEventService.add(UserEvent.fromObject({
29401
+ issuer: 'system',
29402
+ recipient: 'me',
29403
+ type: 'debug',
29404
+ level: 'DEBUG',
29405
+ message: 'message DEBUG',
29406
+ creationDate: moment$a(),
29407
+ }));
29408
+ }
29409
+ addNotificationWithLink() {
29410
+ this.userEventService.add(UserEvent.fromObject({
29411
+ issuer: 'system',
29412
+ recipient: 'me',
29413
+ type: 'message',
29414
+ level: 'INFO',
29415
+ message: 'message with link',
29416
+ creationDate: moment$a(),
29417
+ actions: [{
29418
+ name: 'click here',
29419
+ iconRef: {
29420
+ icon: 'arrow-forward-outline'
29421
+ },
29422
+ executeAction: event => { this.router.navigateByUrl('/'); }
29423
+ }]
29424
+ }));
29425
+ }
29426
+ addNotificationWithAction() {
29427
+ this.userEventService.add(UserEvent.fromObject({
29428
+ issuer: 'system',
29429
+ recipient: 'me',
29430
+ type: 'message',
29431
+ level: 'INFO',
29432
+ message: 'message with action',
29433
+ creationDate: moment$a(),
29434
+ actions: [
29435
+ {
29436
+ name: 'click here',
29437
+ iconRef: {
29438
+ icon: 'arrow-forward-outline',
29439
+ color: 'warning'
29440
+ },
29441
+ executeAction: event => { this.showMessage('action 1'); }
29442
+ },
29443
+ {
29444
+ name: 'click here 2',
29445
+ iconRef: {
29446
+ matIcon: 'settings_applications',
29447
+ color: 'secondary'
29448
+ },
29449
+ executeAction: event => { this.showMessage('action 2'); }
29450
+ }
29451
+ ]
29452
+ }));
29453
+ }
29454
+ showMessage(text) {
29455
+ return Alerts.showError(text, this.alertController, this.translateService);
29456
+ }
29457
+ }
29458
+ UserEventTestingPage.decorators = [
29459
+ { type: Component, args: [{
29460
+ selector: 'job-progression-testing',
29461
+ template: "<ion-toolbar color=\"primary\">\n <ion-title>User events</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <app-user-event-notification-icon #notification [debug]=\"true\"></app-user-event-notification-icon>\n\n <p>\n <ion-button (click)=\"addNotification()\">Add notification</ion-button>\n <ion-button (click)=\"addError()\">Add error</ion-button>\n <ion-button (click)=\"addWarning()\">Add warning</ion-button>\n <ion-button (click)=\"addDebug()\">Add debug</ion-button>\n </p>\n <p>\n <ion-button (click)=\"addNotificationWithLink()\">Add notification with link</ion-button>\n <ion-button (click)=\"addNotificationWithAction()\">Add notification with action</ion-button>\n </p>\n</ion-content>\n"
29462
+ },] }
29463
+ ];
29464
+ UserEventTestingPage.ctorParameters = () => [
29465
+ { type: UserEventTestService, decorators: [{ type: Inject, args: [USER_EVENT_SERVICE,] }] },
29466
+ { type: Router },
29467
+ { type: AlertController },
29468
+ { type: TranslateService }
29469
+ ];
29470
+ UserEventTestingPage.propDecorators = {
29471
+ notification: [{ type: ViewChild, args: ['notification',] }]
29472
+ };
29473
+
29474
+ class UserEventTestingModule {
29475
+ }
29476
+ UserEventTestingModule.decorators = [
29477
+ { type: NgModule, args: [{
29478
+ imports: [
29479
+ CommonModule,
29480
+ TranslateModule.forChild(),
29481
+ SharedModule,
29482
+ UserEventModule
29483
+ ],
29484
+ declarations: [
29485
+ UserEventTestingPage
29486
+ ],
29487
+ exports: [
29488
+ UserEventTestingPage
29489
+ ]
29490
+ },] }
29491
+ ];
29492
+
29493
+ const SOCIAL_TESTING_PAGES = [
29494
+ { label: 'Social components', divider: true },
29495
+ { label: 'User event', page: '/testing/social/user-event' },
29496
+ { label: 'Job progression', page: '/testing/social/job-progression' }
29497
+ ];
29498
+ const routes$6 = [
29499
+ {
29500
+ path: 'job-progression',
29501
+ pathMatch: 'full',
29502
+ component: JobProgressionTestingPage
29503
+ },
29504
+ {
29505
+ path: 'user-event',
29506
+ pathMatch: 'full',
29507
+ component: UserEventTestingPage
29508
+ },
29509
+ ];
29510
+ class SocialTestingModule {
29511
+ }
29512
+ SocialTestingModule.decorators = [
29513
+ { type: NgModule, args: [{
29514
+ imports: [
29515
+ CommonModule,
29516
+ TranslateModule.forChild(),
29517
+ RouterModule.forChild(routes$6),
29518
+ JobTestingModule,
29519
+ UserEventTestingModule
29520
+ ],
29521
+ },] }
29522
+ ];
29523
+
29148
29524
  // Environment
29149
29525
 
29150
29526
  /**
29151
29527
  * Generated bundle index. Do not edit.
29152
29528
  */
29153
29529
 
29154
- 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, UserEventTypes, 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, JobProgressionList as ɵk, DateTestPage as ɵl, NumpadTestPage as ɵm, MatBadgeIconTestPage as ɵn, ToastTestingModule as ɵo, ToastTestingPage as ɵp };
29530
+ 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, AppUserEventNotificationIcon, 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, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, 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, SOCIAL_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, SocialTestingModule, 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, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserEventTypes, 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, JobProgressionList as ɵk, DateTestPage as ɵl, NumpadTestPage as ɵm, MatBadgeIconTestPage as ɵn, ToastTestingModule as ɵo, ToastTestingPage as ɵp };
29155
29531
  //# sourceMappingURL=sumaris-net.ngx-components.js.map