@sumaris-net/ngx-components 1.23.53 → 1.23.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +55 -36
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/form/editor.class.js +2 -2
- package/esm2015/src/app/core/form/form.class.js +2 -2
- package/esm2015/src/app/core/home/home.js +1 -1
- package/esm2015/src/app/core/services/storage/entity-store.class.js +15 -9
- package/esm2015/src/app/core/table/table.class.js +4 -12
- package/esm2015/src/app/core/text-popover/text-form.component.js +2 -2
- package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +1 -1
- package/esm2015/src/app/social/job/progression/job-progression.list.js +1 -1
- package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +1 -1
- package/fesm2015/sumaris-net.ngx-components.js +23 -25
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/editor.class.d.ts +1 -1
- package/src/app/core/form/form.class.d.ts +1 -1
- package/src/app/core/table/table.class.d.ts +1 -1
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
var SPACE_PLACEHOLDER_CHAR = '\u2000';
|
|
48
48
|
var KEYBOARD_HIDE_DELAY_MS = 250; // 1s
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
/******************************************************************************
|
|
51
51
|
Copyright (c) Microsoft Corporation.
|
|
52
52
|
|
|
53
53
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
function step(op) {
|
|
146
146
|
if (f)
|
|
147
147
|
throw new TypeError("Generator is already executing.");
|
|
148
|
-
while (_)
|
|
148
|
+
while (g && (g = 0, op[0] && (_ = 0)), _)
|
|
149
149
|
try {
|
|
150
150
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
|
|
151
151
|
return t;
|
|
@@ -209,7 +209,11 @@
|
|
|
209
209
|
var __createBinding = Object.create ? (function (o, m, k, k2) {
|
|
210
210
|
if (k2 === undefined)
|
|
211
211
|
k2 = k;
|
|
212
|
-
Object.
|
|
212
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
213
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
214
|
+
desc = { enumerable: true, get: function () { return m[k]; } };
|
|
215
|
+
}
|
|
216
|
+
Object.defineProperty(o, k2, desc);
|
|
213
217
|
}) : (function (o, m, k, k2) {
|
|
214
218
|
if (k2 === undefined)
|
|
215
219
|
k2 = k;
|
|
@@ -364,6 +368,11 @@
|
|
|
364
368
|
throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
365
369
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
366
370
|
}
|
|
371
|
+
function __classPrivateFieldIn(state, receiver) {
|
|
372
|
+
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function"))
|
|
373
|
+
throw new TypeError("Cannot use 'in' operator on non-object");
|
|
374
|
+
return typeof state === "function" ? receiver === state : state.has(receiver);
|
|
375
|
+
}
|
|
367
376
|
|
|
368
377
|
function isNil(obj) {
|
|
369
378
|
return obj === undefined || obj === null;
|
|
@@ -13809,7 +13818,7 @@
|
|
|
13809
13818
|
function EntityStore(name, storage, policy) {
|
|
13810
13819
|
this.name = name;
|
|
13811
13820
|
this.storage = storage;
|
|
13812
|
-
this._onChange = new rxjs.BehaviorSubject(
|
|
13821
|
+
this._onChange = new rxjs.BehaviorSubject(false);
|
|
13813
13822
|
this._dirty = false;
|
|
13814
13823
|
this.policy = policy || {};
|
|
13815
13824
|
this.reset({ emitEvent: false });
|
|
@@ -13888,7 +13897,9 @@
|
|
|
13888
13897
|
console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');
|
|
13889
13898
|
return this._onChange
|
|
13890
13899
|
.pipe(
|
|
13891
|
-
//
|
|
13900
|
+
// Wait data loaded
|
|
13901
|
+
operators.filter(function (_) { return _this._loaded; }),
|
|
13902
|
+
// Apply filter and sort
|
|
13892
13903
|
operators.map(function (_) { return _this.reduceAndSort(_this._cache, variables); }),
|
|
13893
13904
|
// Then convert into full entities (using parallel jobs - /!\ can use lot of memory)
|
|
13894
13905
|
operators.mergeMap(function (res) { return Promise.all((res.data || [])
|
|
@@ -13899,7 +13910,11 @@
|
|
|
13899
13910
|
}
|
|
13900
13911
|
// Load using entities array
|
|
13901
13912
|
return this._onChange
|
|
13902
|
-
.pipe(
|
|
13913
|
+
.pipe(
|
|
13914
|
+
// Wait data loaded
|
|
13915
|
+
operators.filter(function (_) { return _this._loaded; }),
|
|
13916
|
+
// Apply filter and sort
|
|
13917
|
+
operators.map(function (_) { return _this.reduceAndSort(_this._cache, variables); }));
|
|
13903
13918
|
};
|
|
13904
13919
|
/**
|
|
13905
13920
|
* WIll apply a filter, then a sort, then a page slice
|
|
@@ -13967,7 +13982,7 @@
|
|
|
13967
13982
|
var result;
|
|
13968
13983
|
console.info("[entity-storage] Saving " + entities.length + " " + this.name + "(s)");
|
|
13969
13984
|
// First save, or reset using given entities
|
|
13970
|
-
if (
|
|
13985
|
+
if (!this._loaded || !this._cache || (opts === null || opts === void 0 ? void 0 : opts.reset)) {
|
|
13971
13986
|
this.setEntities(entities, { emitEvent: false });
|
|
13972
13987
|
}
|
|
13973
13988
|
else {
|
|
@@ -14237,11 +14252,11 @@
|
|
|
14237
14252
|
case 1:
|
|
14238
14253
|
fullData = _b.sent();
|
|
14239
14254
|
if (fullData)
|
|
14240
|
-
return [2 /*return*/, fullData];
|
|
14255
|
+
return [2 /*return*/, Object.freeze(fullData)];
|
|
14241
14256
|
_b.label = 2;
|
|
14242
14257
|
case 2:
|
|
14243
|
-
// Load from the cache, if dirty OR if storage is not
|
|
14244
|
-
return [2 /*return*/, this._cache[index]];
|
|
14258
|
+
// Load from the cache, if dirty OR if storage is not splitted by id
|
|
14259
|
+
return [2 /*return*/, Object.freeze(this._cache[index])];
|
|
14245
14260
|
}
|
|
14246
14261
|
});
|
|
14247
14262
|
});
|
|
@@ -18623,7 +18638,7 @@
|
|
|
18623
18638
|
template: "\n<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <div class=\"modal-content\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n ></app-upload-file>\n </div>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n <div *ngIf=\"importing\" class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label translate>COMMON.BTN_IMPORT</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n",
|
|
18624
18639
|
encapsulation: i0.ViewEncapsulation.None,
|
|
18625
18640
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
18626
|
-
styles: [".importing-info{
|
|
18641
|
+
styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}"]
|
|
18627
18642
|
},] }
|
|
18628
18643
|
];
|
|
18629
18644
|
UploadFilePopover.ctorParameters = function () { return [
|
|
@@ -20458,10 +20473,14 @@
|
|
|
20458
20473
|
this.markForCheck();
|
|
20459
20474
|
}
|
|
20460
20475
|
};
|
|
20461
|
-
AppForm.prototype
|
|
20462
|
-
|
|
20463
|
-
|
|
20464
|
-
|
|
20476
|
+
Object.defineProperty(AppForm.prototype, "destroyed", {
|
|
20477
|
+
get: function () {
|
|
20478
|
+
var _a;
|
|
20479
|
+
return ((_a = this.destroySubject) === null || _a === void 0 ? void 0 : _a.closed) !== false;
|
|
20480
|
+
},
|
|
20481
|
+
enumerable: false,
|
|
20482
|
+
configurable: true
|
|
20483
|
+
});
|
|
20465
20484
|
Object.defineProperty(AppForm.prototype, "form", {
|
|
20466
20485
|
get: function () {
|
|
20467
20486
|
return this._form;
|
|
@@ -20745,7 +20764,7 @@
|
|
|
20745
20764
|
TextForm.decorators = [
|
|
20746
20765
|
{ type: i0.Component, args: [{
|
|
20747
20766
|
selector: 'app-text-form',
|
|
20748
|
-
template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"
|
|
20767
|
+
template: "<form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"onSubmit.emit($event)\">\n <mat-form-field *ngIf=\"multiline; else monoline\">\n <textarea\n #textArea\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"control.disabled\"\n [class.fixed-height]=\"!autoHeight\"\n [cdkTextareaAutosize]=\"autoHeight\"\n (keyup)=\"textAreaChanged($event)\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n [autofocus]=\"autofocus\"\n ></textarea>\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textArea.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n <ng-template #monoline>\n <mat-form-field>\n <input\n #textInput\n matInput\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"autofocus\"\n (keydown.control.enter)=\"onSubmit.emit($event)\"\n />\n <mat-error *ngIf=\"control.hasError('maxlength')\">\n {{ 'ERROR.FIELD_MAX_LENGTH' | translate: control.errors['maxlength'] }}\n </mat-error>\n <mat-hint *ngIf=\"maxLength\" align=\"end\">\n {{ 'INFO.TEXT_PROGRESS' | translate: { current: textInput.value?.length || 0, max: maxLength } }}\n </mat-hint>\n </mat-form-field>\n </ng-template>\n</form>\n",
|
|
20749
20768
|
styles: ["textarea.fixed-height{height:11.5em}"]
|
|
20750
20769
|
},] }
|
|
20751
20770
|
];
|
|
@@ -22588,7 +22607,7 @@
|
|
|
22588
22607
|
template: "<app-toolbar [canGoBack]=\"false\"\n visible-xs visible-sm visible-mobile>\n\n <!-- change locale button -->\n <ion-button slot=\"end\" *ngIf=\"currentLocaleCode; let code\"\n [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <button *ngFor=\"let item of locales\"\n mat-menu-item\n (click)=\"changeLanguage(item.key)\">\n <ion-label>{{item.value}}</ion-label>\n </button>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!loading\">\n <div class=\"spinner\" *ngIf=\"loading && showSpinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS'|translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n <ion-button color=\"secondary\" fill=\"solid\"\n *ngIf=\"currentLocaleCode; let code\"\n [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\"\n showInstallButton=\"true\">\n </app-install-upgrade-card>\n\n <!-- Welcome card -->\n <ion-card *ngIf=\"!loading\"\n class=\"main welcome ion-padding ion-text-center ion-align-self-center\"\n @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB'|translate: {appName: appName}\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP'|translate: {appName: appName}\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\">\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img class=\"logo\" *ngIf=\"logo\" src=\"{{ logo }}\">\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br/>\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n </ion-card-content>\n\n <ion-footer class=\"ion-padding-top\">\n\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons;\">\n\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n\n <!-- Feature buttons -->\n <ng-container *ngIf=\"$filteredButtons | async as buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button *ngIf=\"item.path\"\n expand=\"block\" color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-text>{{'HOME.BTN_DATA_ENTRY'|translate: {name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{item.title}} </ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\"> </p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: {displayName: accountName }\"></ion-text>\n <br/>\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n\n\n </ng-template>\n\n </ion-footer>\n </ion-card>\n\n <!-- Page history -->\n <ion-grid *ngIf=\"!loading && isLogin && pageHistory.length; else bottomBanner\"\n class=\"history-container ion-align-self-center\">\n <ion-row>\n <ion-col size=\"12\" size-xl=\"\" *ngFor=\"let page of pageHistory; trackBy: getPagePath\"\n class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button type=\"button\" tabindex=\"-1\"\n (click)=\"settings.removePageHistory(page.path)\"\n mat-icon-button class=\"ion-float-start ion-no-margin\">\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle|translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time|dateFormat:{time: true}\">\n <small><ion-icon name=\"time-outline\"></ion-icon> {{ page.time|dateFromNow }}</small> \n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item detail=\"true\"\n tappable class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\" lines=\"none\">\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{page.matIcon}}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n <ion-card-content class=\"ion-no-padding ion-padding-start\" *ngIf=\"page.children?.length\">\n <ion-list class=\"ion-no-padding\">\n <ion-item detail=\"true\"\n *ngFor=\"let childPage of page.children\"\n tappable class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\">\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">{{childPage.matIcon}}</mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n </ion-list>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Display configured Departments logos -->\n <ng-template #bottomBanner>\n <div class=\"bottom-banner ion-text-center ion-padding\" *ngIf=\"!loadingBanner\" @fadeInAnimation>\n <a href=\"{{ item.siteUrl }}\" *ngFor=\"let item of $partners | async \">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{item.label}}\" [title]=\"item.label\" />\n </a>\n </div>\n </ng-template>\n\n\n</ion-content>\n",
|
|
22589
22608
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
22590
22609
|
animations: [fadeInAnimation, slideUpDownAnimation],
|
|
22591
|
-
styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background:transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;display:inline-block;padding:15px}ion-content,ion-content .loading-page{background-color:var(--ion-color-primary)}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:hsla(0,0%,100%,.7)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:hsla(0,0%,100%,.7)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{--ion-item-background:$transparent;--ion-item-icon-color:var(--ion-color-primary);--ion-item-text-color:var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset
|
|
22610
|
+
styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background:transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;display:inline-block;padding:15px}ion-content,ion-content .loading-page{background-color:var(--ion-color-primary)}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:hsla(0,0%,100%,.7)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:hsla(0,0%,100%,.7)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{--ion-item-background:$transparent;--ion-item-icon-color:var(--ion-color-primary);--ion-item-text-color:var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text{color:var(--ion-item-text-color)!important;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background:var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color:var(--ion-color-dark);--ion-item-text-color:var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:hsla(0,0%,100%,.7);min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width:575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width:767px) and (min-width:576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width:768px){ion-content{min-height:calc(100% - 100px)}}"]
|
|
22592
22611
|
},] }
|
|
22593
22612
|
];
|
|
22594
22613
|
HomePage.ctorParameters = function () { return [
|
|
@@ -26969,10 +26988,14 @@
|
|
|
26969
26988
|
enumerable: false,
|
|
26970
26989
|
configurable: true
|
|
26971
26990
|
});
|
|
26972
|
-
AppTable.prototype
|
|
26973
|
-
|
|
26974
|
-
|
|
26975
|
-
|
|
26991
|
+
Object.defineProperty(AppTable.prototype, "destroyed", {
|
|
26992
|
+
get: function () {
|
|
26993
|
+
var _a;
|
|
26994
|
+
return ((_a = this.destroySubject) === null || _a === void 0 ? void 0 : _a.closed) !== false;
|
|
26995
|
+
},
|
|
26996
|
+
enumerable: false,
|
|
26997
|
+
configurable: true
|
|
26998
|
+
});
|
|
26976
26999
|
AppTable.prototype.ngOnInit = function () {
|
|
26977
27000
|
var _this = this;
|
|
26978
27001
|
var _a;
|
|
@@ -27013,15 +27036,7 @@
|
|
|
27013
27036
|
// DEBUG
|
|
27014
27037
|
//tap(() => console.debug("Propagate row's dirty to table..."))
|
|
27015
27038
|
// Stop if next another row, or destroying
|
|
27016
|
-
operators.takeUntil(
|
|
27017
|
-
_this.onStartEditingRow,
|
|
27018
|
-
_this.destroySubject
|
|
27019
|
-
]))
|
|
27020
|
-
// DEBUG
|
|
27021
|
-
//.pipe(
|
|
27022
|
-
// tap(() => console.debug('TODO stopping previous row listener'))
|
|
27023
|
-
//)
|
|
27024
|
-
); }))
|
|
27039
|
+
operators.takeUntil(_this.onStartEditingRow), operators.takeUntil(_this.destroySubject)); }))
|
|
27025
27040
|
.subscribe(function () { return _this.markAsDirty(); }));
|
|
27026
27041
|
// Call datasource refresh, on each refresh events
|
|
27027
27042
|
this.registerSubscription(this.onRefresh
|
|
@@ -28620,10 +28635,14 @@
|
|
|
28620
28635
|
enumerable: false,
|
|
28621
28636
|
configurable: true
|
|
28622
28637
|
});
|
|
28623
|
-
AppEditor.prototype
|
|
28624
|
-
|
|
28625
|
-
|
|
28626
|
-
|
|
28638
|
+
Object.defineProperty(AppEditor.prototype, "destroyed", {
|
|
28639
|
+
get: function () {
|
|
28640
|
+
var _a;
|
|
28641
|
+
return ((_a = this.destroySubject) === null || _a === void 0 ? void 0 : _a.closed) !== false;
|
|
28642
|
+
},
|
|
28643
|
+
enumerable: false,
|
|
28644
|
+
configurable: true
|
|
28645
|
+
});
|
|
28627
28646
|
Object.defineProperty(AppEditor.prototype, "tables", {
|
|
28628
28647
|
get: function () {
|
|
28629
28648
|
return this._children && this._children.filter(function (c) { return c instanceof AppTable; });
|
|
@@ -31753,7 +31772,7 @@
|
|
|
31753
31772
|
selector: 'app-user-event-notification-list',
|
|
31754
31773
|
template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n <ion-col class=\"top-action\" *ngIf=\"$items|async|isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a (click)=\"markAllAsRead($event)\">{{'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate}}</a>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <ion-item\n *ngFor=\"let item of $items | async; trackBy: trackByFn; last as last\"\n [lines]=\"last ? 'none' : undefined\"\n [class.unread]=\"!item.readDate\"\n [class.tappable]=\"item.actions|arrayFilter:isDefaultAction|isNotEmptyArray\"\n (click)=\"click($event, item)\">\n\n <ion-avatar slot=\"start\">\n\n <img *ngIf=\"item.avatar; else avatarIcon\" src=\"{{ item.avatar }}\">\n\n <ng-template #avatarIcon>\n <app-icon\n *ngIf=\"item.avatarIcon; else generateIcon\"\n [ref]=\"item.avatarIcon\"\n height=\"40\"\n width=\"40\"\n ></app-icon>\n </ng-template>\n\n <ng-template #generateIcon>\n <div class=\"avatar\" *ngIf=\"item.avatarJdenticon\">\n <svg width=\"40\" width=\"40\" [data-jdenticon-value]=\"item.avatarJdenticon\"></svg>\n </div>\n </ng-template>\n\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\n </ion-col>\n </ion-row>\n\n <!-- date -->\n <ion-row>\n <ion-col size=\"12\">\n <app-icon\n *ngIf=\"item.icon\"\n [ref]=\"item.icon\"\n height=\"16\"\n width=\"16\"\n style=\"vertical-align: sub; margin-right: 3px\"\n ></app-icon>\n <small>\n <span>{{item.creationDate|dateFromNow}}</span>\n <span style=\"color: gray\">{{ ' | ' + (item.creationDate|dateFormat:{time:true}) }}</span>\n </small>\n </ion-col>\n </ion-row>\n\n <!-- actions -->\n <ion-row *ngIf=\"item.actions|isNotEmptyArray\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngFor=\"let action of item.actions\">\n <a *ngIf=\"!action.default\" class=\"action\" (click)=\"executeAction($event, action, item)\" [title]=\"(action.title || action.name) |translate\">\n <app-icon *ngIf=\"action.iconRef\" slot=\"start\" height=\"20\" width=\"20\" [ref]=\"action.iconRef\"></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions|arrayFilter: isDefaultAction|isNotEmptyArray\">chevron_right</mat-icon>\n </ion-item>\n\n <!-- loading -->\n <ng-container *ngIf=\"!($items|async); else notLoading\">\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <ng-template #notLoading>\n <!-- no result -->\n <ion-item *ngIf=\"$items|async|isEmptyArray\" lines=\"none\">\n <ion-text color=\"dark\" class=\"text-italic\">{{'SOCIAL.USER_EVENT.NOTIFICATION.EMPTY' | translate}}</ion-text>\n </ion-item>\n\n <!-- Fetching more -->\n <ng-container *ngIf=\"fetchingMore; else infiniteLoop\" lines=\"none\" disabled>\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <!-- Infinite loop -->\n <ng-template #infiniteLoop>\n <ng-container *ngIf=\"canFetchMore\" lines=\"none\" disabled\n [ngTemplateOutlet]=\"loadingItem\">\n </ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n <ion-row class=\"ion-list-footer column\">\n <ion-col>\n <ion-text *ngIf=\"$itemCount|async; let count\"\n class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </ion-list>\n</ion-content>\n\n<!-- loading -->\n<ng-template #loadingItem>\n <ion-item lines=\"none\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </ion-item>\n</ng-template>\n",
|
|
31755
31774
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
31756
|
-
styles: [":host(.popover-viewport){overflow-y:auto
|
|
31775
|
+
styles: [":host(.popover-viewport){overflow-y:auto;user-select:none;max-height:calc(90vh - 20px)}ion-list ion-item.tappable{cursor:pointer}ion-list ion-item.tappable:hover{--ion-item-background:var(--ion-item-background-color-hover)}.message{font-size:.9em}.message p{margin-top:5px;margin-bottom:5px}.message p.unread{font-weight:700}.top-action{text-align:end;margin-right:8px}.top-action a{cursor:pointer;color:var(--ion-color-contrast)}.top-action a:hover{text-decoration:underline}a.action{font-size:.9em;margin-right:10px;cursor:pointer}a.action:hover span{text-decoration:underline}a.action app-icon{vertical-align:middle}ion-avatar .avatar svg,ion-avatar img{border:1px solid rgba(var(--ion-color-secondary-rgb,.5));border-radius:50%}"]
|
|
31757
31776
|
},] }
|
|
31758
31777
|
];
|
|
31759
31778
|
UserEventNotificationList.ctorParameters = function () { return [
|
|
@@ -32272,7 +32291,7 @@
|
|
|
32272
32291
|
{ type: i0.Component, args: [{
|
|
32273
32292
|
selector: 'app-job-progression-list',
|
|
32274
32293
|
template: "<ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n </ion-row>\n\n <ion-item *ngIf=\"!jobProgressions?.length\">\n {{'SOCIAL.JOB.PROGRESSION.EMPTY' | translate}}\n </ion-item>\n <ion-item *ngFor=\"let jobProgression of jobProgressions\" class=\"ion-item-job-progression\">\n <ion-grid class=\"ion-no-margin\">\n <ion-row class=\"name\">\n <ion-col>\n {{jobProgression.name}}\n </ion-col>\n </ion-row>\n <ion-row class=\"message\">\n <ion-col>\n {{jobProgression.message}}\n </ion-col>\n </ion-row>\n <ion-row class=\"progress-bar\">\n <ion-col>\n <ion-progress-bar\n [value]=\"jobProgression.total > 0 ? jobProgression.current / jobProgression.total : undefined\"\n [type]=\"jobProgression.total > 0 ? 'determinate' : 'indeterminate'\">\n </ion-progress-bar>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n\n</ion-list>\n",
|
|
32275
|
-
styles: [":host(.popover-viewport){overflow-y:auto
|
|
32294
|
+
styles: [":host(.popover-viewport){overflow-y:auto;user-select:none}.ion-item-job-progression{font-size:.9em}.ion-item-job-progression .message{font-style:italic}.ion-item-job-progression .progress-bar{margin-top:5px;margin-bottom:5px}"]
|
|
32276
32295
|
},] }
|
|
32277
32296
|
];
|
|
32278
32297
|
JobProgressionList.ctorParameters = function () { return []; };
|