@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
@@ -24829,7 +24829,7 @@
24829
24829
  MenuComponent.decorators = [
24830
24830
  { type: i0.Component, args: [{
24831
24831
  selector: 'app-menu',
24832
- 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",
24832
+ 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",
24833
24833
  animations: [fadeInAnimation],
24834
24834
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
24835
24835
  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)}}"]
@@ -30245,7 +30245,7 @@
30245
30245
  _this.network = network;
30246
30246
  _this.translate = translate;
30247
30247
  _this.options = options;
30248
- _this.count$ = new rxjs.BehaviorSubject(0);
30248
+ _this._countSubject = new rxjs.BehaviorSubject(0);
30249
30249
  _this.listeners = [];
30250
30250
  _this._subscriptions = new rxjs.Subscription();
30251
30251
  _this.queries = options.queries;
@@ -30254,9 +30254,9 @@
30254
30254
  _this._logPrefix = '[user-event-service] ';
30255
30255
  return _this;
30256
30256
  }
30257
- Object.defineProperty(AbstractUserEventService.prototype, "userEventCount", {
30257
+ Object.defineProperty(AbstractUserEventService.prototype, "countSubject", {
30258
30258
  get: function () {
30259
- return this.count$.asObservable();
30259
+ return this._countSubject;
30260
30260
  },
30261
30261
  enumerable: false,
30262
30262
  configurable: true
@@ -30345,7 +30345,7 @@
30345
30345
  data: entity
30346
30346
  });
30347
30347
  // Update count
30348
- this.count$.next(this.count$.value + 1);
30348
+ this._countSubject.next(this._countSubject.value + 1);
30349
30349
  };
30350
30350
  AbstractUserEventService.prototype.count = function (filter, options) {
30351
30351
  var _a;
@@ -30407,7 +30407,7 @@
30407
30407
  if (total && _this._debug)
30408
30408
  console.debug(_this._logPrefix + "Received new user events count:", total);
30409
30409
  // update count
30410
- _this.count$.next(total);
30410
+ _this._countSubject.next(total);
30411
30411
  return total;
30412
30412
  }));
30413
30413
  };
@@ -30654,7 +30654,7 @@
30654
30654
  this.listeners.push(listener);
30655
30655
  };
30656
30656
  AbstractUserEventService.prototype.resetCount = function () {
30657
- this.count$.next(undefined);
30657
+ this._countSubject.next(undefined);
30658
30658
  this.resetCountDate = moment$6();
30659
30659
  // restart listening count changes
30660
30660
  this.startListenCountChanges();
@@ -30671,7 +30671,7 @@
30671
30671
  if (this._debug)
30672
30672
  console.debug(this._logPrefix + "Receiving user events count", count);
30673
30673
  // Update count
30674
- this.count$.next(count);
30674
+ this._countSubject.next(count);
30675
30675
  // Then listen changes
30676
30676
  this.startListenCountChanges();
30677
30677
  return [2 /*return*/];
@@ -30816,20 +30816,22 @@
30816
30816
  UserEventNotificationList.prototype.ngOnInit = function () {
30817
30817
  var _this = this;
30818
30818
  // Watch all user events
30819
- this.subscriptions.add(this.userEventService
30820
- .watchAll(0, 10, 'creationDate', "desc", undefined)
30821
- .subscribe(function (result) {
30822
- if (_this.debug)
30823
- console.debug("[user-event-notification-list] receiving " + result.total + " user events", result.data);
30824
- _this.userEvents.next(result.data);
30825
- _this.markForCheck();
30826
- }));
30827
- // Listen changes
30828
- this.subscriptions.add(this.userEventService.listenChanges(undefined)
30829
- .subscribe(function (data) {
30830
- if (_this.debug)
30831
- console.debug("[user-event-notification-list] receiving " + data.length + " new user events", data);
30832
- }));
30819
+ if (this.userEventService) {
30820
+ this.subscriptions.add(this.userEventService
30821
+ .watchAll(0, 10, 'creationDate', 'desc', undefined)
30822
+ .subscribe(function (result) {
30823
+ if (_this.debug)
30824
+ console.debug("[user-event-notification-list] receiving " + result.total + " user events", result.data);
30825
+ _this.userEvents.next(result.data);
30826
+ _this.markForCheck();
30827
+ }));
30828
+ // Listen changes
30829
+ this.subscriptions.add(this.userEventService.listenChanges(undefined)
30830
+ .subscribe(function (data) {
30831
+ if (_this.debug)
30832
+ console.debug("[user-event-notification-list] receiving " + data.length + " new user events", data);
30833
+ }));
30834
+ }
30833
30835
  };
30834
30836
  UserEventNotificationList.prototype.ngOnDestroy = function () {
30835
30837
  this.subscriptions.unsubscribe();
@@ -30880,31 +30882,35 @@
30880
30882
  readEvents: [{ type: i0.Output }]
30881
30883
  };
30882
30884
 
30883
- var UserEventNotificationComponent = /** @class */ (function () {
30884
- function UserEventNotificationComponent(userEventService, accountService, popoverController) {
30885
+ var AppUserEventNotificationIcon = /** @class */ (function () {
30886
+ function AppUserEventNotificationIcon(userEventService, accountService, popoverController) {
30885
30887
  this.userEventService = userEventService;
30886
30888
  this.accountService = accountService;
30887
30889
  this.popoverController = popoverController;
30888
30890
  this.debug = false;
30889
30891
  this.titleI18n = 'SOCIAL.USER_EVENT.NOTIFICATION.TITLE';
30890
30892
  this.disabled = false;
30893
+ this.filter = null;
30891
30894
  this._logPrefix = '[user-event-notification] ';
30892
30895
  this._readEvent = new i0.EventEmitter();
30893
30896
  this._readEvents = new i0.EventEmitter();
30894
30897
  }
30895
- Object.defineProperty(UserEventNotificationComponent.prototype, "count", {
30898
+ Object.defineProperty(AppUserEventNotificationIcon.prototype, "countChanges", {
30896
30899
  get: function () {
30897
- var _a;
30898
- return (_a = this.userEventService) === null || _a === void 0 ? void 0 : _a.userEventCount.pipe(operators.map(function (value) { return value === 0 ? undefined : value; }));
30900
+ if (!this.userEventService)
30901
+ return rxjs.of();
30902
+ return this.userEventService
30903
+ .countSubject
30904
+ .pipe(operators.map(function (value) { return value === 0 ? undefined : value; }));
30899
30905
  },
30900
30906
  enumerable: false,
30901
30907
  configurable: true
30902
30908
  });
30903
- UserEventNotificationComponent.prototype.ngOnInit = function () {
30909
+ AppUserEventNotificationIcon.prototype.ngOnInit = function () {
30904
30910
  return __awaiter(this, void 0, void 0, function () {
30905
30911
  var _this = this;
30906
- return __generator(this, function (_b) {
30907
- switch (_b.label) {
30912
+ return __generator(this, function (_a) {
30913
+ switch (_a.label) {
30908
30914
  case 0:
30909
30915
  if (isNil(this.userEventService)) {
30910
30916
  console.warn(this._logPrefix + "No service injected");
@@ -30915,7 +30921,7 @@
30915
30921
  return [4 /*yield*/, this.userEventService.ready()];
30916
30922
  case 1:
30917
30923
  // Wait service
30918
- _b.sent();
30924
+ _a.sent();
30919
30925
  // Subscribe to read event
30920
30926
  this._readEvent.subscribe(function (value) {
30921
30927
  // default: mark event as read
@@ -30929,11 +30935,11 @@
30929
30935
  });
30930
30936
  });
30931
30937
  };
30932
- UserEventNotificationComponent.prototype.showList = function (event) {
30938
+ AppUserEventNotificationIcon.prototype.showList = function (event) {
30933
30939
  return __awaiter(this, void 0, void 0, function () {
30934
30940
  var popover;
30935
- return __generator(this, function (_b) {
30936
- switch (_b.label) {
30941
+ return __generator(this, function (_a) {
30942
+ switch (_a.label) {
30937
30943
  case 0:
30938
30944
  // Reset count
30939
30945
  this.userEventService.resetCount();
@@ -30952,39 +30958,39 @@
30952
30958
  cssClass: 'popover-large'
30953
30959
  })];
30954
30960
  case 1:
30955
- popover = _b.sent();
30961
+ popover = _a.sent();
30956
30962
  return [4 /*yield*/, popover.present()];
30957
30963
  case 2:
30958
- _b.sent();
30964
+ _a.sent();
30959
30965
  return [2 /*return*/];
30960
30966
  }
30961
30967
  });
30962
30968
  });
30963
30969
  };
30964
- UserEventNotificationComponent.prototype.ngOnDestroy = function () {
30970
+ AppUserEventNotificationIcon.prototype.ngOnDestroy = function () {
30965
30971
  if (this.debug) {
30966
30972
  console.debug(this._logPrefix + "Destroying");
30967
30973
  }
30968
30974
  };
30969
- return UserEventNotificationComponent;
30975
+ return AppUserEventNotificationIcon;
30970
30976
  }());
30971
- UserEventNotificationComponent.decorators = [
30977
+ AppUserEventNotificationIcon.decorators = [
30972
30978
  { type: i0.Component, args: [{
30973
- selector: 'app-user-event-notification-component',
30974
- 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",
30975
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
30976
- styles: [""]
30979
+ selector: 'app-user-event-notification-icon',
30980
+ 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",
30981
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
30977
30982
  },] }
30978
30983
  ];
30979
- UserEventNotificationComponent.ctorParameters = function () { return [
30984
+ AppUserEventNotificationIcon.ctorParameters = function () { return [
30980
30985
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [USER_EVENT_SERVICE,] }] },
30981
30986
  { type: AccountService },
30982
30987
  { type: i1$5.PopoverController }
30983
30988
  ]; };
30984
- UserEventNotificationComponent.propDecorators = {
30989
+ AppUserEventNotificationIcon.propDecorators = {
30985
30990
  debug: [{ type: i0.Input }],
30986
30991
  titleI18n: [{ type: i0.Input }],
30987
- disabled: [{ type: i0.Input }]
30992
+ disabled: [{ type: i0.Input }],
30993
+ filter: [{ type: i0.Input }]
30988
30994
  };
30989
30995
 
30990
30996
  var UserEventModule = /** @class */ (function () {
@@ -31000,11 +31006,11 @@
31000
31006
  AppIconModule
31001
31007
  ],
31002
31008
  declarations: [
31003
- UserEventNotificationComponent,
31009
+ AppUserEventNotificationIcon,
31004
31010
  UserEventNotificationList
31005
31011
  ],
31006
31012
  exports: [
31007
- UserEventNotificationComponent
31013
+ AppUserEventNotificationIcon
31008
31014
  ]
31009
31015
  },] }
31010
31016
  ];
@@ -31603,6 +31609,11 @@
31603
31609
  JobModule,
31604
31610
  MessageModule
31605
31611
  ],
31612
+ exports: [
31613
+ UserEventModule,
31614
+ JobModule,
31615
+ MessageModule
31616
+ ]
31606
31617
  },] }
31607
31618
  ];
31608
31619
 
@@ -33842,6 +33853,418 @@
33842
33853
  },] }
33843
33854
  ];
33844
33855
 
33856
+ var JobProgressionTestService = /** @class */ (function () {
33857
+ function JobProgressionTestService() {
33858
+ }
33859
+ JobProgressionTestService.prototype.listenChanges = function (id, options) {
33860
+ return rxjs.interval(100).pipe(operators.take(111), operators.map(function (value) {
33861
+ if (value <= 10) {
33862
+ return {
33863
+ id: id,
33864
+ name: "Job #" + id,
33865
+ current: 0,
33866
+ total: 0,
33867
+ message: "Progression pending"
33868
+ };
33869
+ }
33870
+ value = value - 10;
33871
+ return {
33872
+ id: id,
33873
+ name: "Job #" + id,
33874
+ current: value,
33875
+ total: 100,
33876
+ message: "Progression " + value + "/100"
33877
+ };
33878
+ }));
33879
+ };
33880
+ return JobProgressionTestService;
33881
+ }());
33882
+ JobProgressionTestService.decorators = [
33883
+ { type: i0.Injectable }
33884
+ ];
33885
+
33886
+ var JobProgressionTestingPage = /** @class */ (function () {
33887
+ function JobProgressionTestingPage() {
33888
+ this.nJob = 0;
33889
+ this.options = {
33890
+ autoHide: true
33891
+ };
33892
+ this.job = new exports.JobProgression();
33893
+ this.job.id = 0;
33894
+ this.job.name = 'test';
33895
+ this.job.current = 0;
33896
+ this.job.total = 100;
33897
+ }
33898
+ JobProgressionTestingPage.prototype.incrementJob = function (value) {
33899
+ this.job.current = Math.max(0, this.job.current + value);
33900
+ this.job.message = "Fake progression (very long message very long message very long message very long message) " + this.job.current + "/100";
33901
+ if (this.job.current > this.job.total) {
33902
+ this.jobProgression.removeJob(0);
33903
+ this.job.current = 0;
33904
+ }
33905
+ else if (!this.jobProgression.getProgression(0)) {
33906
+ this.jobProgression.jobProgressions.push(this.job);
33907
+ }
33908
+ this.jobProgression.updateValue();
33909
+ };
33910
+ JobProgressionTestingPage.prototype.addJob = function () {
33911
+ // Add fake job
33912
+ this.nJob++;
33913
+ this.jobProgression.addJob(this.nJob);
33914
+ };
33915
+ return JobProgressionTestingPage;
33916
+ }());
33917
+ JobProgressionTestingPage.decorators = [
33918
+ { type: i0.Component, args: [{
33919
+ selector: 'job-progression-testing',
33920
+ 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",
33921
+ providers: [
33922
+ { provide: JobProgressionServiceToken, useClass: JobProgressionTestService }
33923
+ ]
33924
+ },] }
33925
+ ];
33926
+ JobProgressionTestingPage.ctorParameters = function () { return []; };
33927
+ JobProgressionTestingPage.propDecorators = {
33928
+ jobProgression: [{ type: i0.ViewChild, args: ['jobProgression',] }]
33929
+ };
33930
+
33931
+ var JobTestingModule = /** @class */ (function () {
33932
+ function JobTestingModule() {
33933
+ }
33934
+ return JobTestingModule;
33935
+ }());
33936
+ JobTestingModule.decorators = [
33937
+ { type: i0.NgModule, args: [{
33938
+ imports: [
33939
+ i1$4.CommonModule,
33940
+ i1$2.TranslateModule.forChild(),
33941
+ SharedModule,
33942
+ JobModule
33943
+ ],
33944
+ declarations: [
33945
+ JobProgressionTestingPage
33946
+ ],
33947
+ exports: [
33948
+ JobProgressionTestingPage
33949
+ ]
33950
+ },] }
33951
+ ];
33952
+
33953
+ var UserEventTestService = /** @class */ (function (_super) {
33954
+ __extends(UserEventTestService, _super);
33955
+ function UserEventTestService(graphql, accountService, network, translate, environment) {
33956
+ var _this = _super.call(this, graphql, accountService, network, translate, {
33957
+ queries: {
33958
+ loadAll: null,
33959
+ loadAllWithContent: null
33960
+ },
33961
+ production: environment === null || environment === void 0 ? void 0 : environment.production
33962
+ }) || this;
33963
+ _this.graphql = graphql;
33964
+ _this.accountService = accountService;
33965
+ _this.network = network;
33966
+ _this.translate = translate;
33967
+ _this.environment = environment;
33968
+ _this.userEvents = [];
33969
+ return _this;
33970
+ }
33971
+ UserEventTestService.prototype.fromObject = function (source) {
33972
+ return exports.UserEvent.fromObject(source);
33973
+ };
33974
+ UserEventTestService.prototype.add = function (entity) {
33975
+ entity = this.processUserEvent(entity);
33976
+ entity.id = this.userEvents.length + 1;
33977
+ this.userEvents = __spread([
33978
+ entity
33979
+ ], this.userEvents);
33980
+ this._countSubject.next((this._countSubject.value || 0) + 1);
33981
+ };
33982
+ UserEventTestService.prototype.asFilter = function (filter) {
33983
+ return filter;
33984
+ };
33985
+ UserEventTestService.prototype.count = function (filter, options) {
33986
+ return Promise.resolve(this.userEvents.length);
33987
+ };
33988
+ UserEventTestService.prototype.delete = function (entity) {
33989
+ return Promise.resolve(undefined);
33990
+ };
33991
+ UserEventTestService.prototype.deleteAll = function (data, opts) {
33992
+ return Promise.resolve(undefined);
33993
+ };
33994
+ UserEventTestService.prototype.listenChanges = function (filter, options) {
33995
+ return rxjs.of();
33996
+ };
33997
+ UserEventTestService.prototype.save = function (entity, options) {
33998
+ var _a;
33999
+ var toSave = (_a = this.userEvents) === null || _a === void 0 ? void 0 : _a.find(function (value) { return value.id == (entity === null || entity === void 0 ? void 0 : entity.id); });
34000
+ Object.assign(toSave, entity);
34001
+ return entity;
34002
+ };
34003
+ UserEventTestService.prototype.saveAll = function (data, opts) {
34004
+ return __awaiter(this, void 0, void 0, function () {
34005
+ var _b, _c, entity, e_1_1;
34006
+ var e_1, _d;
34007
+ return __generator(this, function (_e) {
34008
+ switch (_e.label) {
34009
+ case 0:
34010
+ _e.trys.push([0, 5, 6, 7]);
34011
+ _b = __values((data || [])), _c = _b.next();
34012
+ _e.label = 1;
34013
+ case 1:
34014
+ if (!!_c.done) return [3 /*break*/, 4];
34015
+ entity = _c.value;
34016
+ return [4 /*yield*/, this.save(entity)];
34017
+ case 2:
34018
+ _e.sent();
34019
+ _e.label = 3;
34020
+ case 3:
34021
+ _c = _b.next();
34022
+ return [3 /*break*/, 1];
34023
+ case 4: return [3 /*break*/, 7];
34024
+ case 5:
34025
+ e_1_1 = _e.sent();
34026
+ e_1 = { error: e_1_1 };
34027
+ return [3 /*break*/, 7];
34028
+ case 6:
34029
+ try {
34030
+ if (_c && !_c.done && (_d = _b.return)) _d.call(_b);
34031
+ }
34032
+ finally { if (e_1) throw e_1.error; }
34033
+ return [7 /*endfinally*/];
34034
+ case 7: return [2 /*return*/, Promise.resolve(this.userEvents)];
34035
+ }
34036
+ });
34037
+ });
34038
+ };
34039
+ UserEventTestService.prototype.watchAll = function (offset, size, sortBy, sortDirection, filter, options) {
34040
+ return rxjs.of({ data: this.userEvents });
34041
+ };
34042
+ return UserEventTestService;
34043
+ }(AbstractUserEventService));
34044
+ UserEventTestService.decorators = [
34045
+ { type: i0.Injectable }
34046
+ ];
34047
+ UserEventTestService.ctorParameters = function () { return [
34048
+ { type: GraphqlService },
34049
+ { type: AccountService },
34050
+ { type: NetworkService },
34051
+ { type: i1$2.TranslateService },
34052
+ { type: Environment, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [ENVIRONMENT,] }] }
34053
+ ]; };
34054
+
34055
+ var moment$a = momentImported__namespace;
34056
+ var UserEventTestingPage = /** @class */ (function () {
34057
+ function UserEventTestingPage(userEventService, router, alertController, translateService) {
34058
+ var _this = this;
34059
+ this.userEventService = userEventService;
34060
+ this.router = router;
34061
+ this.alertController = alertController;
34062
+ this.translateService = translateService;
34063
+ userEventService.registerListener({
34064
+ accept: function (userEvent) { return true; },
34065
+ onReceived: function (userEvent) {
34066
+ _this.customize(userEvent);
34067
+ return userEvent;
34068
+ }
34069
+ });
34070
+ userEventService.registerListener({
34071
+ accept: function (userEvent) { return userEvent.level == "DEBUG"; },
34072
+ onRead: function (userEvent) { _this.showMessage("debug message read "); }
34073
+ });
34074
+ }
34075
+ UserEventTestingPage.prototype.customize = function (userEvent) {
34076
+ // Choose avatarIcon
34077
+ switch (userEvent.level) {
34078
+ case 'ERROR':
34079
+ userEvent.avatarIcon = { icon: 'close-outline', color: 'danger' };
34080
+ break;
34081
+ case 'WARNING':
34082
+ userEvent.avatarIcon = { icon: 'warning-outline', color: 'warning' };
34083
+ break;
34084
+ case 'INFO':
34085
+ userEvent.avatarIcon = { icon: 'information-circle-outline' };
34086
+ break;
34087
+ case 'DEBUG':
34088
+ userEvent.avatarIcon = { icon: 'cog', color: "medium" };
34089
+ break;
34090
+ }
34091
+ // Choose icon
34092
+ switch (userEvent.type) {
34093
+ case 'message':
34094
+ userEvent.icon = { matIcon: 'inbox', color: 'accent' };
34095
+ break;
34096
+ case 'upload':
34097
+ userEvent.icon = { matIcon: 'file_upload' };
34098
+ break;
34099
+ case 'download':
34100
+ userEvent.icon = { matIcon: 'file_download' };
34101
+ break;
34102
+ }
34103
+ };
34104
+ UserEventTestingPage.prototype.addNotification = function () {
34105
+ this.userEventService.add(exports.UserEvent.fromObject({
34106
+ issuer: 'system',
34107
+ recipient: 'me',
34108
+ type: 'message',
34109
+ level: 'INFO',
34110
+ message: 'message test message test message test message test message test message test message test message test',
34111
+ creationDate: moment$a(),
34112
+ }));
34113
+ };
34114
+ UserEventTestingPage.prototype.addError = function () {
34115
+ this.userEventService.add(exports.UserEvent.fromObject({
34116
+ issuer: 'system',
34117
+ recipient: 'me',
34118
+ type: 'upload',
34119
+ level: 'ERROR',
34120
+ message: 'message error',
34121
+ creationDate: moment$a(),
34122
+ }));
34123
+ };
34124
+ UserEventTestingPage.prototype.addWarning = function () {
34125
+ this.userEventService.add(exports.UserEvent.fromObject({
34126
+ issuer: 'system',
34127
+ recipient: 'me',
34128
+ type: 'download',
34129
+ level: 'WARNING',
34130
+ message: 'message warning',
34131
+ creationDate: moment$a(),
34132
+ }));
34133
+ };
34134
+ UserEventTestingPage.prototype.addDebug = function () {
34135
+ this.userEventService.add(exports.UserEvent.fromObject({
34136
+ issuer: 'system',
34137
+ recipient: 'me',
34138
+ type: 'debug',
34139
+ level: 'DEBUG',
34140
+ message: 'message DEBUG',
34141
+ creationDate: moment$a(),
34142
+ }));
34143
+ };
34144
+ UserEventTestingPage.prototype.addNotificationWithLink = function () {
34145
+ var _this = this;
34146
+ this.userEventService.add(exports.UserEvent.fromObject({
34147
+ issuer: 'system',
34148
+ recipient: 'me',
34149
+ type: 'message',
34150
+ level: 'INFO',
34151
+ message: 'message with link',
34152
+ creationDate: moment$a(),
34153
+ actions: [{
34154
+ name: 'click here',
34155
+ iconRef: {
34156
+ icon: 'arrow-forward-outline'
34157
+ },
34158
+ executeAction: function (event) { _this.router.navigateByUrl('/'); }
34159
+ }]
34160
+ }));
34161
+ };
34162
+ UserEventTestingPage.prototype.addNotificationWithAction = function () {
34163
+ var _this = this;
34164
+ this.userEventService.add(exports.UserEvent.fromObject({
34165
+ issuer: 'system',
34166
+ recipient: 'me',
34167
+ type: 'message',
34168
+ level: 'INFO',
34169
+ message: 'message with action',
34170
+ creationDate: moment$a(),
34171
+ actions: [
34172
+ {
34173
+ name: 'click here',
34174
+ iconRef: {
34175
+ icon: 'arrow-forward-outline',
34176
+ color: 'warning'
34177
+ },
34178
+ executeAction: function (event) { _this.showMessage('action 1'); }
34179
+ },
34180
+ {
34181
+ name: 'click here 2',
34182
+ iconRef: {
34183
+ matIcon: 'settings_applications',
34184
+ color: 'secondary'
34185
+ },
34186
+ executeAction: function (event) { _this.showMessage('action 2'); }
34187
+ }
34188
+ ]
34189
+ }));
34190
+ };
34191
+ UserEventTestingPage.prototype.showMessage = function (text) {
34192
+ return Alerts.showError(text, this.alertController, this.translateService);
34193
+ };
34194
+ return UserEventTestingPage;
34195
+ }());
34196
+ UserEventTestingPage.decorators = [
34197
+ { type: i0.Component, args: [{
34198
+ selector: 'job-progression-testing',
34199
+ 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"
34200
+ },] }
34201
+ ];
34202
+ UserEventTestingPage.ctorParameters = function () { return [
34203
+ { type: UserEventTestService, decorators: [{ type: i0.Inject, args: [USER_EVENT_SERVICE,] }] },
34204
+ { type: i3.Router },
34205
+ { type: i1$5.AlertController },
34206
+ { type: i1$2.TranslateService }
34207
+ ]; };
34208
+ UserEventTestingPage.propDecorators = {
34209
+ notification: [{ type: i0.ViewChild, args: ['notification',] }]
34210
+ };
34211
+
34212
+ var UserEventTestingModule = /** @class */ (function () {
34213
+ function UserEventTestingModule() {
34214
+ }
34215
+ return UserEventTestingModule;
34216
+ }());
34217
+ UserEventTestingModule.decorators = [
34218
+ { type: i0.NgModule, args: [{
34219
+ imports: [
34220
+ i1$4.CommonModule,
34221
+ i1$2.TranslateModule.forChild(),
34222
+ SharedModule,
34223
+ UserEventModule
34224
+ ],
34225
+ declarations: [
34226
+ UserEventTestingPage
34227
+ ],
34228
+ exports: [
34229
+ UserEventTestingPage
34230
+ ]
34231
+ },] }
34232
+ ];
34233
+
34234
+ var SOCIAL_TESTING_PAGES = [
34235
+ { label: 'Social components', divider: true },
34236
+ { label: 'User event', page: '/testing/social/user-event' },
34237
+ { label: 'Job progression', page: '/testing/social/job-progression' }
34238
+ ];
34239
+ var routes$6 = [
34240
+ {
34241
+ path: 'job-progression',
34242
+ pathMatch: 'full',
34243
+ component: JobProgressionTestingPage
34244
+ },
34245
+ {
34246
+ path: 'user-event',
34247
+ pathMatch: 'full',
34248
+ component: UserEventTestingPage
34249
+ },
34250
+ ];
34251
+ var SocialTestingModule = /** @class */ (function () {
34252
+ function SocialTestingModule() {
34253
+ }
34254
+ return SocialTestingModule;
34255
+ }());
34256
+ SocialTestingModule.decorators = [
34257
+ { type: i0.NgModule, args: [{
34258
+ imports: [
34259
+ i1$4.CommonModule,
34260
+ i1$2.TranslateModule.forChild(),
34261
+ i3.RouterModule.forChild(routes$6),
34262
+ JobTestingModule,
34263
+ UserEventTestingModule
34264
+ ],
34265
+ },] }
34266
+ ];
34267
+
33845
34268
  // Environment
33846
34269
 
33847
34270
  /**
@@ -33897,6 +34320,7 @@
33897
34320
  exports.AppTable = AppTable;
33898
34321
  exports.AppTableDataSourceOptions = AppTableDataSourceOptions;
33899
34322
  exports.AppTableUtils = AppTableUtils;
34323
+ exports.AppUserEventNotificationIcon = AppUserEventNotificationIcon;
33900
34324
  exports.AppValidatorService = AppValidatorService;
33901
34325
  exports.AppendToInputDirective = AppendToInputDirective;
33902
34326
  exports.ArrayFilterPipe = ArrayFilterPipe;
@@ -33996,6 +34420,9 @@
33996
34420
  exports.JobProgressionComponent = JobProgressionComponent;
33997
34421
  exports.JobProgressionService = JobProgressionService;
33998
34422
  exports.JobProgressionServiceToken = JobProgressionServiceToken;
34423
+ exports.JobProgressionTestService = JobProgressionTestService;
34424
+ exports.JobProgressionTestingPage = JobProgressionTestingPage;
34425
+ exports.JobTestingModule = JobTestingModule;
33999
34426
  exports.JobUtils = JobUtils;
34000
34427
  exports.KEYBOARD_HIDE_DELAY_MS = KEYBOARD_HIDE_DELAY_MS;
34001
34428
  exports.LAT_LONG_DEFAULT_MAX_DECIMALS = LAT_LONG_DEFAULT_MAX_DECIMALS;
@@ -34075,6 +34502,7 @@
34075
34502
  exports.SETTINGS_TRANSIENT_PROPERTIES = SETTINGS_TRANSIENT_PROPERTIES;
34076
34503
  exports.SHARED_MATERIAL_TESTING_PAGES = SHARED_MATERIAL_TESTING_PAGES;
34077
34504
  exports.SHARED_TESTING_PAGES = SHARED_TESTING_PAGES;
34505
+ exports.SOCIAL_TESTING_PAGES = SOCIAL_TESTING_PAGES;
34078
34506
  exports.SPACE_PLACEHOLDER_CHAR = SPACE_PLACEHOLDER_CHAR;
34079
34507
  exports.SelectPeerModal = SelectPeerModal;
34080
34508
  exports.ServerErrorCodes = ServerErrorCodes;
@@ -34103,6 +34531,7 @@
34103
34531
  exports.SocialErrorCodes = SocialErrorCodes;
34104
34532
  exports.SocialModule = SocialModule;
34105
34533
  exports.SocialModuleOptionsToken = SocialModuleOptionsToken;
34534
+ exports.SocialTestingModule = SocialTestingModule;
34106
34535
  exports.StartableService = StartableService;
34107
34536
  exports.StatusById = StatusById;
34108
34537
  exports.StatusIds = StatusIds;
@@ -34133,7 +34562,9 @@
34133
34562
  exports.UriUtils = UriUtils;
34134
34563
  exports.UserEventFragments = UserEventFragments;
34135
34564
  exports.UserEventModule = UserEventModule;
34136
- exports.UserEventNotificationComponent = UserEventNotificationComponent;
34565
+ exports.UserEventTestService = UserEventTestService;
34566
+ exports.UserEventTestingModule = UserEventTestingModule;
34567
+ exports.UserEventTestingPage = UserEventTestingPage;
34137
34568
  exports.UserEventTypes = UserEventTypes;
34138
34569
  exports.UsersPage = UsersPage;
34139
34570
  exports.accountToString = accountToString;