@sumaris-net/ngx-components 1.22.8 → 1.22.11-rc1

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 (25) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +202 -509
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +1 -1
  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 +2 -3
  7. package/esm2015/src/app/core/menu/menu.component.js +2 -2
  8. package/esm2015/src/app/social/social.module.js +7 -2
  9. package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +94 -0
  10. package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +17 -15
  11. package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +6 -3
  12. package/esm2015/src/app/social/user-event/user-event.module.js +5 -13
  13. package/esm2015/src/app/social/user-event/user-event.service.js +11 -89
  14. package/esm2015/sumaris-net.ngx-components.js +7 -8
  15. package/fesm2015/sumaris-net.ngx-components.js +176 -434
  16. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  17. package/package.json +1 -1
  18. package/public_api.d.ts +1 -2
  19. package/src/app/social/user-event/notification/{user-event-notification.component.d.ts → user-event-notification.icon.d.ts} +3 -2
  20. package/src/app/social/user-event/user-event.service.d.ts +5 -17
  21. package/sumaris-net.ngx-components.d.ts +6 -7
  22. package/sumaris-net.ngx-components.metadata.json +1 -1
  23. package/esm2015/src/app/social/user-event/notification/user-event-notification.component.js +0 -89
  24. package/esm2015/src/app/social/user-event/user-events.table.js +0 -131
  25. package/src/app/social/user-event/user-events.table.d.ts +0 -58
@@ -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)}}"]
@@ -25958,130 +25958,6 @@ const SocialErrorCodes = {
25958
25958
  SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
25959
25959
  };
25960
25960
 
25961
- var UserEvent_1;
25962
- const UserEventTypes = {
25963
- DEBUG_DATA: 'DEBUG_DATA',
25964
- INBOX_MESSAGE: 'INBOX_MESSAGE'
25965
- };
25966
- // @dynamic
25967
- let UserEvent = UserEvent_1 = class UserEvent extends Entity {
25968
- constructor() {
25969
- super(UserEvent_1.TYPENAME);
25970
- }
25971
- asObject(opts) {
25972
- const target = super.asObject(opts);
25973
- target.creationDate = toDateISOString(this.creationDate);
25974
- target.readDate = toDateISOString(this.readDate);
25975
- // Serialize content
25976
- if (typeof target.content === 'object') {
25977
- target.content = JSON.stringify(target.content);
25978
- }
25979
- delete target.avatar;
25980
- delete target.avatarIcon;
25981
- delete target.icon;
25982
- delete target.actions;
25983
- return target;
25984
- }
25985
- fromObject(source) {
25986
- Object.assign(this, source); // Copy all properties
25987
- super.fromObject(source);
25988
- this.creationDate = fromDateISOString(source.creationDate);
25989
- this.readDate = fromDateISOString(source.readDate);
25990
- try {
25991
- // Deserialize content
25992
- if (typeof source.content === 'string' && source.content.startsWith('{')) {
25993
- this.content = JSON.parse(source.content);
25994
- }
25995
- // Deserialize content.context
25996
- if (this.content && typeof this.content.context === 'string' && this.content.context.startsWith('{')) {
25997
- this.content.context = JSON.parse(this.content.context);
25998
- }
25999
- }
26000
- catch (err) {
26001
- console.error('Error during UserEvent deserialization', err);
26002
- }
26003
- }
26004
- };
26005
- UserEvent = UserEvent_1 = __decorate([
26006
- EntityClass({ typename: 'UserEventVO' })
26007
- ], UserEvent);
26008
- // @dynamic
26009
- let UserEventFilter = class UserEventFilter extends EntityFilter {
26010
- constructor() {
26011
- super(...arguments);
26012
- this.types = [];
26013
- this.levels = [];
26014
- this.issuers = [];
26015
- this.recipients = [];
26016
- this.startDate = null;
26017
- this.excludeRead = false;
26018
- }
26019
- fromObject(source, opts) {
26020
- super.fromObject(source, opts);
26021
- this.types = source.types || [];
26022
- this.levels = source.levels || [];
26023
- this.issuers = source.issuers || [];
26024
- this.recipients = source.recipients || [];
26025
- this.startDate = fromDateISOString(source.startDate);
26026
- this.excludeRead = source.excludeRead || false;
26027
- }
26028
- buildFilter() {
26029
- const filterFns = super.buildFilter();
26030
- if (isNotEmptyArray(this.types)) {
26031
- filterFns.push(t => this.types.includes(t.type));
26032
- }
26033
- if (isNotEmptyArray(this.levels)) {
26034
- filterFns.push(t => this.levels.includes(t.level));
26035
- }
26036
- if (isNotEmptyArray(this.issuers)) {
26037
- filterFns.push(t => this.issuers.includes(t.issuer));
26038
- }
26039
- if (isNotEmptyArray(this.recipients)) {
26040
- filterFns.push(t => this.recipients.includes(t.recipient));
26041
- }
26042
- if (isNotNil(this.startDate)) {
26043
- filterFns.push(t => this.startDate.isSameOrBefore(t.creationDate));
26044
- }
26045
- if (this.excludeRead === true) {
26046
- filterFns.push(t => isNil(t.readSignature)); // todo or t.signature ?
26047
- }
26048
- return filterFns;
26049
- }
26050
- asObject(opts) {
26051
- const target = super.asObject(opts);
26052
- return target;
26053
- }
26054
- };
26055
- UserEventFilter = __decorate([
26056
- EntityClass({ typename: 'UserEventFilterVO' })
26057
- ], UserEventFilter);
26058
-
26059
- const UserEventFragments = {
26060
- userEvent: gql `fragment UserEventFragment on UserEventVO {
26061
- id
26062
- issuer
26063
- updateDate
26064
- creationDate
26065
- eventType
26066
- recipient
26067
- content
26068
- hash
26069
- signature
26070
- readSignature
26071
- __typename
26072
- }`,
26073
- lightUserEvent: gql `fragment LightUserEventFragment on UserEventVO {
26074
- id
26075
- issuer
26076
- recipient
26077
- updateDate
26078
- creationDate
26079
- eventType
26080
- readSignature
26081
- __typename
26082
- }`
26083
- };
26084
-
26085
25961
  const moment$6 = momentImported;
26086
25962
  const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
26087
25963
  class AbstractUserEventService extends BaseGraphqlService {
@@ -26092,7 +25968,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26092
25968
  this.network = network;
26093
25969
  this.translate = translate;
26094
25970
  this.options = options;
26095
- this.count$ = new BehaviorSubject(0);
25971
+ this._countSubject = new BehaviorSubject(0);
26096
25972
  this.listeners = [];
26097
25973
  this._subscriptions = new Subscription();
26098
25974
  this.queries = options.queries;
@@ -26100,13 +25976,14 @@ class AbstractUserEventService extends BaseGraphqlService {
26100
25976
  this.subscriptions = options.subscriptions || {};
26101
25977
  this._logPrefix = '[user-event-service] ';
26102
25978
  }
26103
- get userEventCount() {
26104
- return this.count$.asObservable();
25979
+ get countSubject() {
25980
+ return this._countSubject;
26105
25981
  }
26106
25982
  ngOnStart() {
26107
25983
  return __awaiter(this, void 0, void 0, function* () {
26108
25984
  // Update component when refresh is need (=login events)
26109
- this._subscriptions.add(merge(this.accountService.onLogin, this.accountService.onLogout)
25985
+ this._subscriptions.add(merge(this.accountService.onLogin, this.accountService.onLogout, of() // Starts with - first attempt if account is ready
25986
+ )
26110
25987
  .pipe(
26111
25988
  // Wait account service ready (can be restarted)
26112
25989
  mergeMap(() => this.accountService.ready()), map(() => this.accountService.isLogin()), distinctUntilChanged())
@@ -26118,11 +25995,6 @@ class AbstractUserEventService extends BaseGraphqlService {
26118
25995
  this.onLogout();
26119
25996
  }
26120
25997
  }));
26121
- // First attempt if account is ready
26122
- yield this.accountService.ready();
26123
- if (this.accountService.isLogin()) {
26124
- setTimeout(() => this.onLogin());
26125
- }
26126
25998
  });
26127
25999
  }
26128
26000
  ngOnDestroy() {
@@ -26185,7 +26057,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26185
26057
  data: entity
26186
26058
  });
26187
26059
  // Update count
26188
- this.count$.next(this.count$.value + 1);
26060
+ this._countSubject.next(this._countSubject.value + 1);
26189
26061
  }
26190
26062
  count(filter, options) {
26191
26063
  var _a;
@@ -26237,7 +26109,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26237
26109
  if (total && this._debug)
26238
26110
  console.debug(`${this._logPrefix}Received new user events count:`, total);
26239
26111
  // update count
26240
- this.count$.next(total);
26112
+ this._countSubject.next(total);
26241
26113
  return total;
26242
26114
  }));
26243
26115
  }
@@ -26383,7 +26255,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26383
26255
  this.listeners.push(listener);
26384
26256
  }
26385
26257
  resetCount() {
26386
- this.count$.next(undefined);
26258
+ this._countSubject.next(undefined);
26387
26259
  this.resetCountDate = moment$6();
26388
26260
  // restart listening count changes
26389
26261
  this.startListenCountChanges();
@@ -26396,7 +26268,7 @@ class AbstractUserEventService extends BaseGraphqlService {
26396
26268
  if (this._debug)
26397
26269
  console.debug(`${this._logPrefix}Receiving user events count`, count);
26398
26270
  // Update count
26399
- this.count$.next(count);
26271
+ this._countSubject.next(count);
26400
26272
  // Then listen changes
26401
26273
  this.startListenCountChanges();
26402
26274
  });
@@ -26507,197 +26379,6 @@ AbstractUserEventService.ctorParameters = () => [
26507
26379
  { type: TranslateService },
26508
26380
  { type: undefined }
26509
26381
  ];
26510
- const userEventQueries = {
26511
- loadAll: gql `
26512
- query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){
26513
- data: userEvents(filter: $filter, page: $page){
26514
- ...LightUserEventFragment
26515
- }
26516
- }
26517
- ${UserEventFragments.lightUserEvent}
26518
- `,
26519
- loadAllWithContent: gql `
26520
- query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){
26521
- data: userEvents(filter: $filter, page: $page){
26522
- ...UserEventFragment
26523
- }
26524
- }
26525
- ${UserEventFragments.userEvent}
26526
- `
26527
- };
26528
- const userEventMutations = {
26529
- deleteByIds: gql `
26530
- mutation DeleteUserEvents($ids:[Int]){
26531
- deleteUserEvents(ids: $ids)
26532
- }
26533
- `,
26534
- save: gql `
26535
- mutation SaveUserEvent($data: UserEventVOInput){
26536
- data: saveUserEvent(userEvent: $data){
26537
- ...UserEventFragment
26538
- }
26539
- }
26540
- ${UserEventFragments.userEvent}
26541
- `
26542
- };
26543
- class UserEventService extends AbstractUserEventService {
26544
- constructor(graphql, accountService, network, translate, environment) {
26545
- super(graphql, accountService, network, translate, {
26546
- queries: userEventQueries,
26547
- mutations: userEventMutations,
26548
- production: environment === null || environment === void 0 ? void 0 : environment.production
26549
- });
26550
- this.graphql = graphql;
26551
- this.accountService = accountService;
26552
- this.network = network;
26553
- this.translate = translate;
26554
- this.environment = environment;
26555
- }
26556
- asFilter(filter) {
26557
- return UserEventFilter.fromObject(filter);
26558
- }
26559
- fromObject(source) {
26560
- return UserEvent.fromObject(source);
26561
- }
26562
- /* -- protected methods -- */
26563
- fillDefaultProperties(entity) {
26564
- entity.issuer = this.accountService.account.pubkey;
26565
- // TODO: compute hash (using cryptoService)
26566
- // TODO: compute sign
26567
- console.warn('TODO: sign user event before sending');
26568
- }
26569
- }
26570
- UserEventService.decorators = [
26571
- { type: Injectable }
26572
- ];
26573
- UserEventService.ctorParameters = () => [
26574
- { type: GraphqlService },
26575
- { type: AccountService },
26576
- { type: NetworkService },
26577
- { type: TranslateService },
26578
- { type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
26579
- ];
26580
-
26581
- const ICONS_MAP = {
26582
- DEBUG_DATA: { matIcon: 'bug_report' },
26583
- INBOX_MESSAGE: { matIcon: 'mail' }
26584
- };
26585
- class UserEventsTable extends AppTable {
26586
- constructor(injector, accountService, service, entities, cd, environment) {
26587
- super(injector,
26588
- // columns
26589
- RESERVED_START_COLUMNS
26590
- .concat([
26591
- 'creationDate',
26592
- 'icon',
26593
- 'eventType',
26594
- 'message'
26595
- ])
26596
- .concat(RESERVED_END_COLUMNS), null, null);
26597
- this.accountService = accountService;
26598
- this.service = service;
26599
- this.entities = entities;
26600
- this.cd = cd;
26601
- this.environment = environment;
26602
- this.i18nColumnPrefix = 'SOCIAL.USER_EVENT.';
26603
- this.autoLoad = false; // this.start()
26604
- this.inlineEdition = false;
26605
- this.defaultSortBy = 'creationDate';
26606
- this.defaultSortDirection = 'desc';
26607
- }
26608
- ngOnInit() {
26609
- super.ngOnInit();
26610
- // Load date/time pattern
26611
- this.dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN');
26612
- this.withContent = toBoolean(this.withContent, false);
26613
- const account = this.accountService.account;
26614
- const pubkey = account && account.pubkey;
26615
- this.isAdmin = this.accountService.isAdmin();
26616
- this.canEdit = this.isAdmin || pubkey === this.recipient;
26617
- this.canDelete = this.canEdit;
26618
- this.setDatasource(new EntitiesTableDataSource(UserEvent, this.service, null, {
26619
- prependNewElements: false,
26620
- suppressErrors: true,
26621
- dataServiceOptions: {
26622
- withContent: this.withContent
26623
- }
26624
- }));
26625
- const filter = this.filter || new UserEventFilter();
26626
- filter.recipients = [this.recipient];
26627
- this.setFilter(filter, { emitEvent: true });
26628
- }
26629
- start() {
26630
- return __awaiter(this, void 0, void 0, function* () {
26631
- console.debug('[user-event] Starting...');
26632
- // Waiting account to be ready
26633
- yield this.accountService.ready();
26634
- // Load data
26635
- this.onRefresh.emit();
26636
- });
26637
- }
26638
- getIcon(source) {
26639
- return ICONS_MAP[source.type];
26640
- }
26641
- getDetail(source) {
26642
- if (!source)
26643
- return undefined;
26644
- if (source.content && source.type === UserEventTypes.DEBUG_DATA) {
26645
- const context = source.content.context;
26646
- if (context && context.__typename) {
26647
- // const actions = this.service.getActionsByTypename(context.__typename);
26648
- return {
26649
- // actions,
26650
- title: source.content.error && source.content.error.message || source.content.message,
26651
- description: source.content.error && source.content.error.details || undefined
26652
- };
26653
- }
26654
- }
26655
- console.debug('TODO: implement getDetail() for event: ', source);
26656
- return {};
26657
- }
26658
- doAction(action, row) {
26659
- return __awaiter(this, void 0, void 0, function* () {
26660
- const event = row.currentData;
26661
- // const context = event.content && event.content.context;
26662
- this.markAsLoading();
26663
- if (action && typeof action.executeAction === 'function') {
26664
- try {
26665
- let res = action.executeAction(event /*, context*/);
26666
- res = (res instanceof Promise) ? yield res : res;
26667
- }
26668
- catch (err) {
26669
- this.setError(err && err.message || err);
26670
- console.error(`[user-event] Failed to execute action ${action.name}: ${err && err.message || err}`, err);
26671
- }
26672
- finally {
26673
- this.markAsLoaded();
26674
- }
26675
- }
26676
- });
26677
- }
26678
- }
26679
- UserEventsTable.decorators = [
26680
- { type: Component, args: [{
26681
- selector: 'app-user-events-table',
26682
- template: "\n<!-- Type = options menu -->\n<mat-menu #optionsMenu=\"matMenu\" xPosition=\"after\">\n\n <!-- display columns -->\n <button mat-menu-item\n (click)=\"openSelectColumnsModal($event)\">\n <mat-icon>view_column</mat-icon>\n <ion-label translate>COMMON.DISPLAYED_COLUMNS_DOTS</ion-label>\n </button>\n\n</mat-menu>\n\n<!-- top header -->\n<mat-toolbar>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n\n <button mat-icon-button [title]=\"'COMMON.BTN_REFRESH'|translate\" (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button class=\"hidden-xs hidden-sm\" *ngIf=\"canDelete\"\n [title]=\"'COMMON.BTN_DELETE'|translate\" (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" hidden-xs hidden-sm hidden-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"toolbar-spacer\"></div>\n\n <button mat-icon-button\n [title]=\"'COMMON.BTN_OPTIONS'|translate\"\n [matMenuTriggerFor]=\"optionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n</mat-toolbar>\n\n\n<mat-table [dataSource]=\"dataSource\" matSort\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <!-- select -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <!-- id -->\n <ng-container matColumnDef=\"id\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [class.cdk-visually-hidden]=\"!isAdmin\">\n <app-loading-spinner [loading]=\"loadingSubject|async\"><ion-label>#</ion-label></app-loading-spinner>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!isAdmin\">{{ row.currentData.id | mathAbs }}</mat-cell>\n </ng-container>\n\n <!-- creationDate -->\n <ng-container matColumnDef=\"creationDate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.CREATION_DATE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ion-text>\n {{row.currentData.creationDate | dateFromNow }}<br/>\n <ion-text color=\"medium\"><small>{{row.currentData.creationDate | dateFormat: {time: true} }}</small></ion-text>\n </ion-text>\n </mat-cell>\n </ng-container>\n\n <!-- icon -->\n <ng-container matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getIcon(row.currentData); let details\">\n <ion-icon slot=\"start\" *ngIf=\"details.icon\" [name]=\"details.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"details.matIcon\">{{details.matIcon}}</mat-icon>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- event type -->\n <ng-container matColumnDef=\"eventType\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>SOCIAL.USER_EVENT.EVENT_TYPE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <span>{{'SOCIAL.USER_EVENT.TYPE_ENUM.' + row.currentData.eventType | translate}}</span>\n </mat-cell>\n </ng-container>\n\n <!-- message -->\n <ng-container matColumnDef=\"message\">\n <mat-header-cell *matHeaderCellDef>\n <ion-label translate>SOCIAL.USER_EVENT.MESSAGE</ion-label>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row;\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <ion-text [innerHTML]=\"details.title|translate\">\n </ion-text>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <!-- Actions buttons column -->\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getDetail(row.currentData); let details\">\n <button mat-icon-button color=\"light\"\n *ngFor=\"let action of details.actions\"\n [title]=\"action.title |translate\"\n [color]=\"action.color\"\n (click)=\"doAction(action, row)\">\n <app-icon slot=\"start\" *ngIf=\"action.iconRef\" [ref]=\"action.iconRef\"></app-icon>\n </button>\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n class=\"mat-row-disabled\"\n (click)=\"clickRow($event, row)\"></mat-row>\n\n</mat-table>\n\n<ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col class=\"ion-no-padding\" size=\"auto\">\n <mat-paginator [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n </ion-col>\n</ion-row>\n",
26683
- changeDetection: ChangeDetectionStrategy.OnPush,
26684
- styles: [".mat-header-row .mat-column-icon,.mat-row .mat-column-icon{max-width:40px;padding-left:0}.mat-header-row .mat-column-icon ion-icon,.mat-header-row .mat-column-icon mat-icon,.mat-row .mat-column-icon ion-icon,.mat-row .mat-column-icon mat-icon{font-size:1.2em;height:1.2em;width:1.2em}.mat-header-row .mat-column-creationDate,.mat-row .mat-column-creationDate{min-width:100px;max-width:120px}"]
26685
- },] }
26686
- ];
26687
- UserEventsTable.ctorParameters = () => [
26688
- { type: Injector },
26689
- { type: AccountService },
26690
- { type: undefined, decorators: [{ type: Inject, args: [USER_EVENT_SERVICE,] }] },
26691
- { type: EntitiesStorage },
26692
- { type: ChangeDetectorRef },
26693
- { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
26694
- ];
26695
- UserEventsTable.propDecorators = {
26696
- recipient: [{ type: Input }],
26697
- withContent: [{ type: Input }],
26698
- defaultSortBy: [{ type: Input }],
26699
- defaultSortDirection: [{ type: Input }]
26700
- };
26701
26382
 
26702
26383
  class UserEventNotificationList {
26703
26384
  constructor(cd, popoverController, userEventService) {
@@ -26710,20 +26391,22 @@ class UserEventNotificationList {
26710
26391
  }
26711
26392
  ngOnInit() {
26712
26393
  // Watch all user events
26713
- this.subscriptions.add(this.userEventService
26714
- .watchAll(0, 10, 'creationDate', "desc", undefined)
26715
- .subscribe(result => {
26716
- if (this.debug)
26717
- console.debug(`[user-event-notification-list] receiving ${result.total} user events`, result.data);
26718
- this.userEvents.next(result.data);
26719
- this.markForCheck();
26720
- }));
26721
- // Listen changes
26722
- this.subscriptions.add(this.userEventService.listenChanges(undefined)
26723
- .subscribe(data => {
26724
- if (this.debug)
26725
- console.debug(`[user-event-notification-list] receiving ${data.length} new user events`, data);
26726
- }));
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
+ }
26727
26410
  }
26728
26411
  ngOnDestroy() {
26729
26412
  this.subscriptions.unsubscribe();
@@ -26773,7 +26456,7 @@ UserEventNotificationList.propDecorators = {
26773
26456
  readEvents: [{ type: Output }]
26774
26457
  };
26775
26458
 
26776
- class UserEventNotificationComponent {
26459
+ class AppUserEventNotificationIcon {
26777
26460
  constructor(userEventService, accountService, popoverController) {
26778
26461
  this.userEventService = userEventService;
26779
26462
  this.accountService = accountService;
@@ -26781,13 +26464,17 @@ class UserEventNotificationComponent {
26781
26464
  this.debug = false;
26782
26465
  this.titleI18n = 'SOCIAL.USER_EVENT.NOTIFICATION.TITLE';
26783
26466
  this.disabled = false;
26467
+ this.filter = null;
26784
26468
  this._logPrefix = '[user-event-notification] ';
26785
26469
  this._readEvent = new EventEmitter();
26786
26470
  this._readEvents = new EventEmitter();
26787
26471
  }
26788
- get count() {
26789
- var _a;
26790
- 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));
26791
26478
  }
26792
26479
  ngOnInit() {
26793
26480
  return __awaiter(this, void 0, void 0, function* () {
@@ -26835,94 +26522,25 @@ class UserEventNotificationComponent {
26835
26522
  }
26836
26523
  }
26837
26524
  }
26838
- UserEventNotificationComponent.decorators = [
26525
+ AppUserEventNotificationIcon.decorators = [
26839
26526
  { type: Component, args: [{
26840
- selector: 'app-user-event-notification-component',
26841
- 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",
26842
- changeDetection: ChangeDetectionStrategy.OnPush,
26843
- 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
26844
26530
  },] }
26845
26531
  ];
26846
- UserEventNotificationComponent.ctorParameters = () => [
26532
+ AppUserEventNotificationIcon.ctorParameters = () => [
26847
26533
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [USER_EVENT_SERVICE,] }] },
26848
26534
  { type: AccountService },
26849
26535
  { type: PopoverController }
26850
26536
  ];
26851
- UserEventNotificationComponent.propDecorators = {
26537
+ AppUserEventNotificationIcon.propDecorators = {
26852
26538
  debug: [{ type: Input }],
26853
26539
  titleI18n: [{ type: Input }],
26854
- disabled: [{ type: Input }]
26540
+ disabled: [{ type: Input }],
26541
+ filter: [{ type: Input }]
26855
26542
  };
26856
26543
 
26857
- class UserEventTestService extends AbstractUserEventService {
26858
- constructor(graphql, accountService, network, translate, environment) {
26859
- super(graphql, accountService, network, translate, {
26860
- queries: {
26861
- loadAll: null,
26862
- loadAllWithContent: null
26863
- },
26864
- production: environment === null || environment === void 0 ? void 0 : environment.production
26865
- });
26866
- this.graphql = graphql;
26867
- this.accountService = accountService;
26868
- this.network = network;
26869
- this.translate = translate;
26870
- this.environment = environment;
26871
- this.userEvents = [];
26872
- }
26873
- fromObject(source) {
26874
- return UserEvent.fromObject(source);
26875
- }
26876
- add(entity) {
26877
- entity = this.processUserEvent(entity);
26878
- entity.id = this.userEvents.length + 1;
26879
- this.userEvents.push(entity);
26880
- this.count$.next(this.userEvents.length);
26881
- }
26882
- asFilter(filter) {
26883
- return filter;
26884
- }
26885
- count(filter, options) {
26886
- return Promise.resolve(this.userEvents.length);
26887
- }
26888
- delete(entity) {
26889
- return Promise.resolve(undefined);
26890
- }
26891
- deleteAll(data, opts) {
26892
- return Promise.resolve(undefined);
26893
- }
26894
- listenChanges(filter, options) {
26895
- return of();
26896
- }
26897
- save(entity, options) {
26898
- var _a;
26899
- 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));
26900
- Object.assign(toSave, entity);
26901
- return entity;
26902
- }
26903
- saveAll(data, opts) {
26904
- return __awaiter(this, void 0, void 0, function* () {
26905
- for (const entity of (data || [])) {
26906
- yield this.save(entity);
26907
- }
26908
- return Promise.resolve(this.userEvents);
26909
- });
26910
- }
26911
- watchAll(offset, size, sortBy, sortDirection, filter, options) {
26912
- return of({ data: this.userEvents });
26913
- }
26914
- }
26915
- UserEventTestService.decorators = [
26916
- { type: Injectable }
26917
- ];
26918
- UserEventTestService.ctorParameters = () => [
26919
- { type: GraphqlService },
26920
- { type: AccountService },
26921
- { type: NetworkService },
26922
- { type: TranslateService },
26923
- { type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
26924
- ];
26925
-
26926
26544
  class UserEventModule {
26927
26545
  }
26928
26546
  UserEventModule.decorators = [
@@ -26933,16 +26551,11 @@ UserEventModule.decorators = [
26933
26551
  AppIconModule
26934
26552
  ],
26935
26553
  declarations: [
26936
- UserEventsTable,
26937
- UserEventNotificationComponent,
26938
- UserEventNotificationList,
26554
+ AppUserEventNotificationIcon,
26555
+ UserEventNotificationList
26939
26556
  ],
26940
26557
  exports: [
26941
- UserEventsTable,
26942
- UserEventNotificationComponent
26943
- ],
26944
- providers: [
26945
- { provide: USER_EVENT_SERVICE, useClass: UserEventTestService }
26558
+ AppUserEventNotificationIcon
26946
26559
  ]
26947
26560
  },] }
26948
26561
  ];
@@ -27484,11 +27097,140 @@ SocialModule.decorators = [
27484
27097
  SharedModule,
27485
27098
  UserEventModule,
27486
27099
  JobModule,
27487
- MessageModule,
27100
+ MessageModule
27488
27101
  ],
27102
+ exports: [
27103
+ UserEventModule,
27104
+ JobModule,
27105
+ MessageModule
27106
+ ]
27489
27107
  },] }
27490
27108
  ];
27491
27109
 
27110
+ var UserEvent_1;
27111
+ const UserEventTypes = {
27112
+ DEBUG_DATA: 'DEBUG_DATA',
27113
+ INBOX_MESSAGE: 'INBOX_MESSAGE'
27114
+ };
27115
+ // @dynamic
27116
+ let UserEvent = UserEvent_1 = class UserEvent extends Entity {
27117
+ constructor() {
27118
+ super(UserEvent_1.TYPENAME);
27119
+ }
27120
+ asObject(opts) {
27121
+ const target = super.asObject(opts);
27122
+ target.creationDate = toDateISOString(this.creationDate);
27123
+ target.readDate = toDateISOString(this.readDate);
27124
+ // Serialize content
27125
+ if (typeof target.content === 'object') {
27126
+ target.content = JSON.stringify(target.content);
27127
+ }
27128
+ delete target.avatar;
27129
+ delete target.avatarIcon;
27130
+ delete target.icon;
27131
+ delete target.actions;
27132
+ return target;
27133
+ }
27134
+ fromObject(source) {
27135
+ Object.assign(this, source); // Copy all properties
27136
+ super.fromObject(source);
27137
+ this.creationDate = fromDateISOString(source.creationDate);
27138
+ this.readDate = fromDateISOString(source.readDate);
27139
+ try {
27140
+ // Deserialize content
27141
+ if (typeof source.content === 'string' && source.content.startsWith('{')) {
27142
+ this.content = JSON.parse(source.content);
27143
+ }
27144
+ // Deserialize content.context
27145
+ if (this.content && typeof this.content.context === 'string' && this.content.context.startsWith('{')) {
27146
+ this.content.context = JSON.parse(this.content.context);
27147
+ }
27148
+ }
27149
+ catch (err) {
27150
+ console.error('Error during UserEvent deserialization', err);
27151
+ }
27152
+ }
27153
+ };
27154
+ UserEvent = UserEvent_1 = __decorate([
27155
+ EntityClass({ typename: 'UserEventVO' })
27156
+ ], UserEvent);
27157
+ // @dynamic
27158
+ let UserEventFilter = class UserEventFilter extends EntityFilter {
27159
+ constructor() {
27160
+ super(...arguments);
27161
+ this.types = [];
27162
+ this.levels = [];
27163
+ this.issuers = [];
27164
+ this.recipients = [];
27165
+ this.startDate = null;
27166
+ this.excludeRead = false;
27167
+ }
27168
+ fromObject(source, opts) {
27169
+ super.fromObject(source, opts);
27170
+ this.types = source.types || [];
27171
+ this.levels = source.levels || [];
27172
+ this.issuers = source.issuers || [];
27173
+ this.recipients = source.recipients || [];
27174
+ this.startDate = fromDateISOString(source.startDate);
27175
+ this.excludeRead = source.excludeRead || false;
27176
+ }
27177
+ buildFilter() {
27178
+ const filterFns = super.buildFilter();
27179
+ if (isNotEmptyArray(this.types)) {
27180
+ filterFns.push(t => this.types.includes(t.type));
27181
+ }
27182
+ if (isNotEmptyArray(this.levels)) {
27183
+ filterFns.push(t => this.levels.includes(t.level));
27184
+ }
27185
+ if (isNotEmptyArray(this.issuers)) {
27186
+ filterFns.push(t => this.issuers.includes(t.issuer));
27187
+ }
27188
+ if (isNotEmptyArray(this.recipients)) {
27189
+ filterFns.push(t => this.recipients.includes(t.recipient));
27190
+ }
27191
+ if (isNotNil(this.startDate)) {
27192
+ filterFns.push(t => this.startDate.isSameOrBefore(t.creationDate));
27193
+ }
27194
+ if (this.excludeRead === true) {
27195
+ filterFns.push(t => isNil(t.readSignature)); // todo or t.signature ?
27196
+ }
27197
+ return filterFns;
27198
+ }
27199
+ asObject(opts) {
27200
+ const target = super.asObject(opts);
27201
+ return target;
27202
+ }
27203
+ };
27204
+ UserEventFilter = __decorate([
27205
+ EntityClass({ typename: 'UserEventFilterVO' })
27206
+ ], UserEventFilter);
27207
+
27208
+ const UserEventFragments = {
27209
+ userEvent: gql `fragment UserEventFragment on UserEventVO {
27210
+ id
27211
+ issuer
27212
+ updateDate
27213
+ creationDate
27214
+ eventType
27215
+ recipient
27216
+ content
27217
+ hash
27218
+ signature
27219
+ readSignature
27220
+ __typename
27221
+ }`,
27222
+ lightUserEvent: gql `fragment LightUserEventFragment on UserEventVO {
27223
+ id
27224
+ issuer
27225
+ recipient
27226
+ updateDate
27227
+ creationDate
27228
+ eventType
27229
+ readSignature
27230
+ __typename
27231
+ }`
27232
+ };
27233
+
27492
27234
  const Mutations = {
27493
27235
  send: gql `mutation SendMessage($data: MessageVOInput){
27494
27236
  done: sendMessage(message: $data)
@@ -29420,5 +29162,5 @@ CoreTestingModule.decorators = [
29420
29162
  * Generated bundle index. Do not edit.
29421
29163
  */
29422
29164
 
29423
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionComponent, JobProgressionService, JobProgressionServiceToken, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, ResizableComponent, ResizableDirective, ResizableModule, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, USER_EVENT_SERVICE, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventModule, UserEventNotificationComponent, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, UserEventNotificationList as ɵj, UserEventTestService as ɵk, JobProgressionList as ɵl, DateTestPage as ɵm, NumpadTestPage as ɵn, MatBadgeIconTestPage as ɵo, ToastTestingModule as ɵp, ToastTestingPage as ɵq };
29165
+ 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, 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, 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 };
29424
29166
  //# sourceMappingURL=sumaris-net.ngx-components.js.map