@eqproject/eqp-attachments 0.1.16 → 0.1.18
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/README.md +4 -0
- package/bundles/eqproject-eqp-attachments.umd.js +229 -86
- package/bundles/eqproject-eqp-attachments.umd.js.map +1 -1
- package/bundles/eqproject-eqp-attachments.umd.min.js +1 -1
- package/bundles/eqproject-eqp-attachments.umd.min.js.map +1 -1
- package/eqproject-eqp-attachments.metadata.json +1 -1
- package/esm2015/lib/eqp-attachments.component.js +190 -71
- package/esm5/lib/eqp-attachments.component.js +232 -89
- package/fesm2015/eqproject-eqp-attachments.js +189 -70
- package/fesm2015/eqproject-eqp-attachments.js.map +1 -1
- package/fesm5/eqproject-eqp-attachments.js +231 -88
- package/fesm5/eqproject-eqp-attachments.js.map +1 -1
- package/lib/eqp-attachments.component.d.ts +27 -9
- package/package.json +2 -1
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { __decorate, __awaiter, __generator, __spread, __values } from 'tslib';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
3
|
import { ɵɵdefineInjectable, Injectable, EventEmitter, ChangeDetectorRef, Input, Output, ViewChild, Component, NgModule } from '@angular/core';
|
|
3
4
|
import { Validators, FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import { base64ToFile, ImageCropperComponent, ImageCropperModule } from 'ngx-image-cropper';
|
|
5
|
-
import imageCompression from 'browser-image-compression';
|
|
6
|
-
import { TooltipPositionType, TypeColumn, EqpTableModule } from '@eqproject/eqp-table';
|
|
7
5
|
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
|
|
8
|
-
import Swal from 'sweetalert2';
|
|
9
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
10
|
-
import {
|
|
7
|
+
import { TooltipPositionType, TypeColumn, EqpTableModule } from '@eqproject/eqp-table';
|
|
8
|
+
import imageCompression from 'browser-image-compression';
|
|
9
|
+
import * as JSZip from 'jszip';
|
|
10
|
+
import { base64ToFile, ImageCropperComponent, ImageCropperModule } from 'ngx-image-cropper';
|
|
11
|
+
import Swal from 'sweetalert2';
|
|
11
12
|
import { CommonModule } from '@angular/common';
|
|
12
13
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
13
14
|
import { MatButtonModule } from '@angular/material/button';
|
|
@@ -40,12 +41,6 @@ import { MatSortModule } from '@angular/material/sort';
|
|
|
40
41
|
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
41
42
|
import { MatNativeDateModule } from '@angular/material/core';
|
|
42
43
|
|
|
43
|
-
var AttachmentType;
|
|
44
|
-
(function (AttachmentType) {
|
|
45
|
-
AttachmentType[AttachmentType["FILE"] = 1] = "FILE";
|
|
46
|
-
AttachmentType[AttachmentType["LINK"] = 2] = "LINK";
|
|
47
|
-
})(AttachmentType || (AttachmentType = {}));
|
|
48
|
-
|
|
49
44
|
var AttachmentHelperService = /** @class */ (function () {
|
|
50
45
|
function AttachmentHelperService() {
|
|
51
46
|
}
|
|
@@ -105,6 +100,12 @@ var AttachmentHelperService = /** @class */ (function () {
|
|
|
105
100
|
return AttachmentHelperService;
|
|
106
101
|
}());
|
|
107
102
|
|
|
103
|
+
var AttachmentType;
|
|
104
|
+
(function (AttachmentType) {
|
|
105
|
+
AttachmentType[AttachmentType["FILE"] = 1] = "FILE";
|
|
106
|
+
AttachmentType[AttachmentType["LINK"] = 2] = "LINK";
|
|
107
|
+
})(AttachmentType || (AttachmentType = {}));
|
|
108
|
+
|
|
108
109
|
var EqpAttachmentDialogService = /** @class */ (function () {
|
|
109
110
|
function EqpAttachmentDialogService() {
|
|
110
111
|
}
|
|
@@ -213,12 +214,14 @@ var EqpAttachmentDialogService = /** @class */ (function () {
|
|
|
213
214
|
return EqpAttachmentDialogService;
|
|
214
215
|
}());
|
|
215
216
|
|
|
216
|
-
var toBase64 = function (file) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
217
|
+
var toBase64 = function (file) {
|
|
218
|
+
return new Promise(function (resolve, reject) {
|
|
219
|
+
var reader = new FileReader();
|
|
220
|
+
reader.readAsDataURL(file);
|
|
221
|
+
reader.onload = function () { return resolve(reader.result.toString()); };
|
|
222
|
+
reader.onerror = function (error) { return reject(error); };
|
|
223
|
+
});
|
|
224
|
+
};
|
|
222
225
|
var ɵ0 = toBase64;
|
|
223
226
|
var EqpAttachmentsComponent = /** @class */ (function () {
|
|
224
227
|
function EqpAttachmentsComponent(dialog, formBuilder, sanitizer, http, cd) {
|
|
@@ -297,7 +300,11 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
297
300
|
/**
|
|
298
301
|
* Opzioni per la compressione delle immagini caricate.
|
|
299
302
|
*/
|
|
300
|
-
this.compressionOptions = {
|
|
303
|
+
this.compressionOptions = {
|
|
304
|
+
maxSizeMB: 0.5,
|
|
305
|
+
maxWidthOrHeight: 1920,
|
|
306
|
+
useWebWorker: true
|
|
307
|
+
};
|
|
301
308
|
/**
|
|
302
309
|
* Array di AttachmentType che si possono aggiungere
|
|
303
310
|
*/
|
|
@@ -317,6 +324,22 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
317
324
|
* per la tabella contenente l'elenco degli allegati
|
|
318
325
|
*/
|
|
319
326
|
this.tablePaginatorSize = null;
|
|
327
|
+
/**
|
|
328
|
+
* Abilitare caricamento video
|
|
329
|
+
*/
|
|
330
|
+
this.allowVideo = false;
|
|
331
|
+
/**
|
|
332
|
+
* Abilitare la compressione al caricamento di un video (allowVideo dev'essere true)
|
|
333
|
+
*/
|
|
334
|
+
this.allowVideoCompression = false;
|
|
335
|
+
/**
|
|
336
|
+
* Lista di formati video non ammessi
|
|
337
|
+
*/
|
|
338
|
+
this.videoFormatsNotAllowed = ["mkv", "avi"];
|
|
339
|
+
/**
|
|
340
|
+
* dimensione massima ammessa per file
|
|
341
|
+
*/
|
|
342
|
+
this.allowedMBForFile = 100;
|
|
320
343
|
/**
|
|
321
344
|
* Input per definire le label da usare nel componente
|
|
322
345
|
*/
|
|
@@ -375,11 +398,12 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
375
398
|
this.showCropImage = false;
|
|
376
399
|
//#endregion
|
|
377
400
|
//#region Proprietà per gestione ridimensionamento file di tipo image
|
|
378
|
-
this.imageChangedEvent =
|
|
379
|
-
this.croppedImage =
|
|
401
|
+
this.imageChangedEvent = "";
|
|
402
|
+
this.croppedImage = "";
|
|
380
403
|
this.transform = {};
|
|
381
404
|
//#endregion
|
|
382
405
|
this.AttachmentType = AttachmentType;
|
|
406
|
+
this.showZipSpinner = false;
|
|
383
407
|
}
|
|
384
408
|
EqpAttachmentsComponent.prototype.ngOnInit = function () {
|
|
385
409
|
//Se è stata richiesta la gestione delle sole immagini allora imposta il filtro per le estensioni possibili da caricare
|
|
@@ -392,7 +416,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
392
416
|
if (!this.allowedTypes || this.allowedTypes.length == 0)
|
|
393
417
|
this.allowedTypes = [AttachmentType.FILE, AttachmentType.LINK];
|
|
394
418
|
else if (this.allowedTypes.find(function (t) { return t != AttachmentType.FILE && t != AttachmentType.LINK; })) {
|
|
395
|
-
EqpAttachmentDialogService.Warning(
|
|
419
|
+
EqpAttachmentDialogService.Warning('Almeno uno degli AttachmentType selezionati nel parametro "allowedTypes" non esiste.');
|
|
396
420
|
this.allowedTypes = [AttachmentType.FILE, AttachmentType.LINK];
|
|
397
421
|
}
|
|
398
422
|
//Se è stata richiesta la gestione multipla degli allegati allora configura l'eqp-table
|
|
@@ -424,27 +448,45 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
424
448
|
this.attachmentsColumns = [];
|
|
425
449
|
if (this.disableAction != true) {
|
|
426
450
|
this.attachmentsColumns.push({
|
|
427
|
-
key: "action",
|
|
428
|
-
|
|
451
|
+
key: "action",
|
|
452
|
+
display: "",
|
|
453
|
+
type: TypeColumn.MenuAction,
|
|
454
|
+
buttonMenuIcon: "more_vert",
|
|
455
|
+
styles: { flex: "0 0 6%" },
|
|
429
456
|
actions: [
|
|
430
|
-
{ name: this.deleteLabel, icon: "delete", fn: function (element, index, col) { return _this.deleteAttachment(element); } }
|
|
431
|
-
]
|
|
457
|
+
{ name: this.deleteLabel, icon: "delete", fn: function (element, index, col) { return _this.deleteAttachment(element); } }
|
|
458
|
+
]
|
|
432
459
|
});
|
|
433
460
|
}
|
|
434
461
|
var downloadColumn = {
|
|
435
|
-
key: "attachment",
|
|
436
|
-
|
|
462
|
+
key: "attachment",
|
|
463
|
+
display: "",
|
|
464
|
+
type: TypeColumn.SimpleAction,
|
|
465
|
+
styles: { flex: "0 0 6%" },
|
|
437
466
|
actions: [
|
|
438
467
|
{
|
|
439
|
-
name:
|
|
440
|
-
|
|
468
|
+
name: "",
|
|
469
|
+
fontawesome: true,
|
|
470
|
+
icon: function (element) {
|
|
471
|
+
return _this.showInlinePreview
|
|
472
|
+
? element.AttachmentType == AttachmentType.FILE
|
|
473
|
+
? "fas fa-cloud-download-alt"
|
|
474
|
+
: "fas fa-external-link-alt"
|
|
475
|
+
: _this.getAttachmentIcon(element);
|
|
476
|
+
},
|
|
441
477
|
fn: function (element, col, elementIndex) { return _this.viewAttachment(element); },
|
|
442
|
-
tooltip: {
|
|
443
|
-
|
|
478
|
+
tooltip: {
|
|
479
|
+
tooltipText: function (element) {
|
|
480
|
+
return element.AttachmentType == AttachmentType.FILE ? _this.downloadLabel : _this.openLinkLabel;
|
|
481
|
+
},
|
|
482
|
+
tooltipPosition: this.downloadTooltipPosition
|
|
483
|
+
}
|
|
484
|
+
}
|
|
444
485
|
]
|
|
445
486
|
};
|
|
446
487
|
var inlinePreviewColumn = {
|
|
447
|
-
key: "InlinePreview",
|
|
488
|
+
key: "InlinePreview",
|
|
489
|
+
display: this.previewLabel,
|
|
448
490
|
type: TypeColumn.ExternalTemplate,
|
|
449
491
|
externalTemplate: this.inlinePreviewTemplate,
|
|
450
492
|
styles: { flex: "0 0 10%" }
|
|
@@ -487,7 +529,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
487
529
|
*/
|
|
488
530
|
EqpAttachmentsComponent.prototype.viewAttachment = function (attachment) {
|
|
489
531
|
if (attachment.AttachmentType == AttachmentType.LINK) {
|
|
490
|
-
window.open(attachment.FilePath,
|
|
532
|
+
window.open(attachment.FilePath, "_blank");
|
|
491
533
|
return;
|
|
492
534
|
}
|
|
493
535
|
if (attachment.FileDataBase64 && attachment.FileContentType && attachment.FileName) {
|
|
@@ -517,6 +559,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
517
559
|
* Apre la modale per la definizione dei parametri del nuovo file
|
|
518
560
|
*/
|
|
519
561
|
EqpAttachmentsComponent.prototype.openModalAddAttachment = function (attachmentType) {
|
|
562
|
+
this.showZipSpinner = false;
|
|
520
563
|
//Se è stato richiesto il caricamento di un LINK o è impostato il caricamento di FILE SINGOLO allora apre la modale per
|
|
521
564
|
//il caricamento singolo del file altrimenti apre quella per il caricamento multiplo
|
|
522
565
|
// if (attachmentType == AttachmentType.LINK || (attachmentType == AttachmentType.FILE && this.loadMultipleFiles != true)) {
|
|
@@ -531,8 +574,8 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
531
574
|
this.dialofRefAddAttachment = this.dialog.open(this.dialogAddAttachment, {
|
|
532
575
|
disableClose: true,
|
|
533
576
|
hasBackdrop: true,
|
|
534
|
-
width:
|
|
535
|
-
maxHeight:
|
|
577
|
+
width: "60%",
|
|
578
|
+
maxHeight: "80%"
|
|
536
579
|
});
|
|
537
580
|
};
|
|
538
581
|
EqpAttachmentsComponent.prototype.createAttachmentForm = function () {
|
|
@@ -571,7 +614,10 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
571
614
|
}
|
|
572
615
|
}
|
|
573
616
|
else {
|
|
574
|
-
return this.newMultipleAttachments.filter(function (p) {
|
|
617
|
+
return (this.newMultipleAttachments.filter(function (p) {
|
|
618
|
+
return (p.AttachmentType == AttachmentType.FILE && !p.FileDataBase64) ||
|
|
619
|
+
(p.AttachmentType == AttachmentType.LINK && !p.FilePath);
|
|
620
|
+
}).length > 0);
|
|
575
621
|
}
|
|
576
622
|
};
|
|
577
623
|
EqpAttachmentsComponent.prototype.confirmAddAttachment = function () {
|
|
@@ -618,8 +664,12 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
618
664
|
}
|
|
619
665
|
if (!(this.getAttachmentEndpoint && this.selectedAttachment.IsImage && !this.selectedAttachment.FileDataBase64)) return [3 /*break*/, 2];
|
|
620
666
|
return [4 /*yield*/, this.getAttachmentByID()
|
|
621
|
-
.then(function (res) {
|
|
622
|
-
.
|
|
667
|
+
.then(function (res) {
|
|
668
|
+
_this.selectedAttachment.FileDataBase64 = res.FileDataBase64;
|
|
669
|
+
})
|
|
670
|
+
.catch(function (err) {
|
|
671
|
+
EqpAttachmentDialogService.Error(err);
|
|
672
|
+
})];
|
|
623
673
|
case 1:
|
|
624
674
|
_a.sent();
|
|
625
675
|
_a.label = 2;
|
|
@@ -627,7 +677,9 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
627
677
|
if (this.selectedAttachment.AttachmentType == AttachmentType.LINK) {
|
|
628
678
|
this.selectedAttachment.TrustedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.selectedAttachment.FilePath);
|
|
629
679
|
}
|
|
630
|
-
else if (this.selectedAttachment.IsImage &&
|
|
680
|
+
else if (this.selectedAttachment.IsImage &&
|
|
681
|
+
!this.selectedAttachment.FileDataBase64 &&
|
|
682
|
+
!this.selectedAttachment.FileThumbnailBase64) {
|
|
631
683
|
EqpAttachmentDialogService.Info("Impossibile aprire l'anteprima dell'allegato, file mancante.");
|
|
632
684
|
return [2 /*return*/];
|
|
633
685
|
}
|
|
@@ -646,7 +698,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
646
698
|
}
|
|
647
699
|
this.dialog.open(this.dialogPreview, {
|
|
648
700
|
disableClose: true,
|
|
649
|
-
hasBackdrop: true
|
|
701
|
+
hasBackdrop: true
|
|
650
702
|
});
|
|
651
703
|
return [2 /*return*/];
|
|
652
704
|
}
|
|
@@ -670,28 +722,32 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
670
722
|
* immagine per il croppie (in caso di caricamento multiplo le funzionalità del croppie sono disabilitate).
|
|
671
723
|
*/
|
|
672
724
|
EqpAttachmentsComponent.prototype.onFileInputChange = function (event) {
|
|
725
|
+
var _a;
|
|
673
726
|
return __awaiter(this, void 0, void 0, function () {
|
|
674
|
-
var
|
|
675
|
-
return __generator(this, function (
|
|
676
|
-
switch (
|
|
727
|
+
var _b, checkOnlyImage, base64Result, _c, i, newAttachment, checkOnlyImage;
|
|
728
|
+
return __generator(this, function (_d) {
|
|
729
|
+
switch (_d.label) {
|
|
677
730
|
case 0:
|
|
678
731
|
this.showCropImage = false;
|
|
679
|
-
if (!(__spread(event.target.files).length == 1 || this.loadMultipleFiles != true)) return [3 /*break*/,
|
|
732
|
+
if (!(__spread(event.target.files).length == 1 || this.loadMultipleFiles != true)) return [3 /*break*/, 7];
|
|
680
733
|
this.selectedFile = event.target.files[0];
|
|
681
734
|
this.selectedFiles = event.target.files;
|
|
682
735
|
if (!this.selectedFile)
|
|
683
736
|
return [2 /*return*/];
|
|
684
|
-
|
|
685
|
-
|
|
737
|
+
this.showZipSpinner = true;
|
|
738
|
+
//Memorizza i dati per l'allegato
|
|
739
|
+
_b = this;
|
|
686
740
|
return [4 /*yield*/, this.createAttachmentFromUploadedFile(this.selectedFile, false)];
|
|
687
741
|
case 1:
|
|
688
|
-
//Memorizza i dati per l'allegato
|
|
689
|
-
|
|
742
|
+
//Memorizza i dati per l'allegato
|
|
743
|
+
_b.newAttachment = _d.sent();
|
|
690
744
|
this.newMultipleAttachments = new Array();
|
|
691
745
|
this.newMultipleAttachments.push(this.newAttachment);
|
|
692
746
|
checkOnlyImage = this.checkAllowOnlyImageFile(this.newAttachment);
|
|
693
|
-
if (checkOnlyImage == false)
|
|
747
|
+
if (checkOnlyImage == false) {
|
|
748
|
+
this.showZipSpinner = false;
|
|
694
749
|
return [2 /*return*/];
|
|
750
|
+
}
|
|
695
751
|
if (this.loadMultipleFiles == true && __spread(event.target.files).length == 1)
|
|
696
752
|
this.createAttachmentForm();
|
|
697
753
|
if (!(this.newAttachment.IsImage == true)) return [3 /*break*/, 2];
|
|
@@ -702,37 +758,91 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
702
758
|
this.newAttachmentForm.controls["customHeight"].enable();
|
|
703
759
|
this.showCropImage = true;
|
|
704
760
|
this.imageChangedEvent = event;
|
|
705
|
-
return [3 /*break*/,
|
|
761
|
+
return [3 /*break*/, 6];
|
|
706
762
|
case 2:
|
|
707
763
|
this.showCropImage = false;
|
|
708
764
|
return [4 /*yield*/, this.getBase64FromFile(this.selectedFile)];
|
|
709
765
|
case 3:
|
|
710
|
-
base64Result =
|
|
766
|
+
base64Result = _d.sent();
|
|
767
|
+
if (!(this.allowVideo && this.allowVideoCompression && this.selectedFile.type.startsWith("video"))) return [3 /*break*/, 5];
|
|
768
|
+
_c = this;
|
|
769
|
+
return [4 /*yield*/, this.zipVideo(this.newAttachment, base64Result.Base64File)];
|
|
770
|
+
case 4:
|
|
771
|
+
_c.newAttachment = _d.sent();
|
|
772
|
+
return [3 /*break*/, 6];
|
|
773
|
+
case 5:
|
|
711
774
|
this.newAttachment.FileDataBase64 = base64Result.Base64File;
|
|
712
775
|
this.newAttachment.FileContentType = base64Result.ContentType;
|
|
713
|
-
|
|
714
|
-
case
|
|
715
|
-
|
|
776
|
+
_d.label = 6;
|
|
777
|
+
case 6:
|
|
778
|
+
this.showZipSpinner = false;
|
|
779
|
+
return [3 /*break*/, 14];
|
|
780
|
+
case 7:
|
|
716
781
|
this.selectedFiles = event.target.files;
|
|
717
782
|
if (!this.selectedFiles || this.selectedFiles.length == 0)
|
|
718
783
|
return [2 /*return*/];
|
|
719
784
|
this.newMultipleAttachments = new Array();
|
|
785
|
+
this.showZipSpinner = true;
|
|
720
786
|
i = 0;
|
|
721
|
-
|
|
722
|
-
case
|
|
723
|
-
if (!(i < this.selectedFiles.length)) return [3 /*break*/,
|
|
787
|
+
_d.label = 8;
|
|
788
|
+
case 8:
|
|
789
|
+
if (!(i < ((_a = this.selectedFiles) === null || _a === void 0 ? void 0 : _a.length))) return [3 /*break*/, 13];
|
|
724
790
|
return [4 /*yield*/, this.createAttachmentFromUploadedFile(this.selectedFiles[i], true)];
|
|
725
|
-
case
|
|
726
|
-
newAttachment =
|
|
791
|
+
case 9:
|
|
792
|
+
newAttachment = _d.sent();
|
|
793
|
+
if (!(this.allowVideo && this.allowVideoCompression && this.selectedFiles[i].type.startsWith("video"))) return [3 /*break*/, 11];
|
|
794
|
+
return [4 /*yield*/, this.zipVideo(newAttachment, newAttachment.FileDataBase64)];
|
|
795
|
+
case 10:
|
|
796
|
+
newAttachment = _d.sent();
|
|
797
|
+
_d.label = 11;
|
|
798
|
+
case 11:
|
|
727
799
|
checkOnlyImage = this.checkAllowOnlyImageFile(newAttachment);
|
|
728
|
-
if (checkOnlyImage == false)
|
|
800
|
+
if (checkOnlyImage == false) {
|
|
801
|
+
this.showZipSpinner = false;
|
|
729
802
|
return [2 /*return*/];
|
|
803
|
+
}
|
|
730
804
|
this.newMultipleAttachments.push(newAttachment);
|
|
731
|
-
|
|
732
|
-
case
|
|
805
|
+
_d.label = 12;
|
|
806
|
+
case 12:
|
|
733
807
|
i++;
|
|
734
|
-
return [3 /*break*/,
|
|
735
|
-
case
|
|
808
|
+
return [3 /*break*/, 8];
|
|
809
|
+
case 13:
|
|
810
|
+
this.showZipSpinner = false;
|
|
811
|
+
_d.label = 14;
|
|
812
|
+
case 14: return [2 /*return*/];
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
});
|
|
816
|
+
};
|
|
817
|
+
EqpAttachmentsComponent.prototype.zipVideo = function (newAttachment, base64) {
|
|
818
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
819
|
+
var zip, videoFolder, content, base64Result;
|
|
820
|
+
return __generator(this, function (_a) {
|
|
821
|
+
switch (_a.label) {
|
|
822
|
+
case 0:
|
|
823
|
+
zip = new JSZip();
|
|
824
|
+
videoFolder = zip.folder("videos");
|
|
825
|
+
videoFolder.file(newAttachment.FileName, base64, { base64: true });
|
|
826
|
+
return [4 /*yield*/, zip.generateAsync({
|
|
827
|
+
type: "blob",
|
|
828
|
+
compression: "DEFLATE",
|
|
829
|
+
compressionOptions: {
|
|
830
|
+
/* compression level ranges from 1 (best speed) to 9 (best compression) */
|
|
831
|
+
level: 9
|
|
832
|
+
}
|
|
833
|
+
})];
|
|
834
|
+
case 1:
|
|
835
|
+
content = _a.sent();
|
|
836
|
+
return [4 /*yield*/, this.getBase64FromFile(content)];
|
|
837
|
+
case 2:
|
|
838
|
+
base64Result = _a.sent();
|
|
839
|
+
newAttachment.FileContentType = content.type;
|
|
840
|
+
newAttachment.FileName = newAttachment.FileName.replace(/\.[^/.]+$/, "") + ".zip";
|
|
841
|
+
newAttachment.FileExtension = newAttachment.FileName.substring(newAttachment.FileName.lastIndexOf(".") + 1);
|
|
842
|
+
newAttachment.IsImage = AttachmentHelperService.checkImageFromMimeType(content.type);
|
|
843
|
+
newAttachment.FileDataBase64 = base64Result.Base64File;
|
|
844
|
+
newAttachment.FileContentType = base64Result.ContentType;
|
|
845
|
+
return [2 /*return*/, newAttachment];
|
|
736
846
|
}
|
|
737
847
|
});
|
|
738
848
|
});
|
|
@@ -753,11 +863,11 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
753
863
|
switch (_a.label) {
|
|
754
864
|
case 0:
|
|
755
865
|
newAttachment = {};
|
|
756
|
-
//Memorizza i dati per l'allegato
|
|
866
|
+
//Memorizza i dati per l'allegato
|
|
757
867
|
newAttachment.AttachmentType = AttachmentType.FILE;
|
|
758
868
|
newAttachment.FileContentType = currentFile.type;
|
|
759
869
|
newAttachment.FileName = currentFile.name;
|
|
760
|
-
newAttachment.FileExtension = currentFile.name.
|
|
870
|
+
newAttachment.FileExtension = currentFile.name.substring(currentFile.name.lastIndexOf(".") + 1);
|
|
761
871
|
newAttachment.IsImage = AttachmentHelperService.checkImageFromMimeType(currentFile.type);
|
|
762
872
|
if (!(getBase64 == true)) return [3 /*break*/, 2];
|
|
763
873
|
return [4 /*yield*/, this.getBase64FromFile(currentFile)];
|
|
@@ -810,9 +920,30 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
810
920
|
EqpAttachmentsComponent.prototype.checkAcceptedFiles = function () {
|
|
811
921
|
var e_1, _a;
|
|
812
922
|
var _this = this;
|
|
813
|
-
|
|
814
|
-
|
|
923
|
+
var _b, _c;
|
|
924
|
+
if (!this.allowVideo) {
|
|
925
|
+
if ((!this.loadMultipleFiles && this.selectedFile.type.startsWith("video")) ||
|
|
926
|
+
(this.loadMultipleFiles == true && __spread(this.selectedFiles).filter(function (p) { return p.type.startsWith("video"); }).length > 0))
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
929
|
+
else {
|
|
930
|
+
if ((!this.loadMultipleFiles &&
|
|
931
|
+
this.videoFormatsNotAllowed.includes((_b = this.selectedFile) === null || _b === void 0 ? void 0 : _b.name.substring(this.selectedFile.name.lastIndexOf(".") + 1))) ||
|
|
932
|
+
(this.loadMultipleFiles &&
|
|
933
|
+
this.selectedFiles &&
|
|
934
|
+
__spread(this.selectedFiles).filter(function (p) {
|
|
935
|
+
return _this.videoFormatsNotAllowed.includes(p.name.substring(p.name.lastIndexOf(".") + 1));
|
|
936
|
+
}).length > 0))
|
|
937
|
+
return false;
|
|
938
|
+
}
|
|
939
|
+
if (!this.loadMultipleFiles && ((_c = this.selectedFile) === null || _c === void 0 ? void 0 : _c.size) / (1024 * 1024) > this.allowedMBForFile) {
|
|
815
940
|
return false;
|
|
941
|
+
}
|
|
942
|
+
if (this.loadMultipleFiles &&
|
|
943
|
+
this.selectedFiles &&
|
|
944
|
+
__spread(this.selectedFiles).filter(function (p) { var _a; return ((_a = p) === null || _a === void 0 ? void 0 : _a.size) / (1024 * 1024) > _this.allowedMBForFile; }).length > 0) {
|
|
945
|
+
return false;
|
|
946
|
+
}
|
|
816
947
|
if (this.acceptedFileTypes == "*")
|
|
817
948
|
return true;
|
|
818
949
|
//Verifica che i tipi del file (o dei file) caricati siano coerenti con quelli accettati dalla direttiva
|
|
@@ -829,8 +960,8 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
829
960
|
//Questo controllo permette di gestire le casistiche per cui vengono indicati come tipi validi, ad esempio, 'image/*'
|
|
830
961
|
if (!accepted && this.loadMultipleFiles != true) {
|
|
831
962
|
try {
|
|
832
|
-
for (var
|
|
833
|
-
var t =
|
|
963
|
+
for (var _d = __values(this.acceptedFileTypes.split(",").filter(function (t) { return t.includes("*"); })), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
964
|
+
var t = _e.value;
|
|
834
965
|
accepted = this.selectedFile.type.startsWith(t.split("*")[0]);
|
|
835
966
|
if (accepted)
|
|
836
967
|
break;
|
|
@@ -839,7 +970,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
839
970
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
840
971
|
finally {
|
|
841
972
|
try {
|
|
842
|
-
if (
|
|
973
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
843
974
|
}
|
|
844
975
|
finally { if (e_1) throw e_1.error; }
|
|
845
976
|
}
|
|
@@ -871,15 +1002,15 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
871
1002
|
var image = new Image();
|
|
872
1003
|
image.src = e.target.result;
|
|
873
1004
|
image.onload = function (rs) {
|
|
874
|
-
_this.originalHeight = rs.currentTarget[
|
|
875
|
-
_this.originalWidth = rs.currentTarget[
|
|
1005
|
+
_this.originalHeight = rs.currentTarget["height"];
|
|
1006
|
+
_this.originalWidth = rs.currentTarget["width"];
|
|
876
1007
|
if (_this.originalWidth > 1280) {
|
|
877
1008
|
_this.customWidth = 1280;
|
|
878
1009
|
_this.customHeight = Math.round((1280 * _this.originalHeight) / _this.originalWidth);
|
|
879
1010
|
}
|
|
880
1011
|
else {
|
|
881
|
-
_this.customHeight = rs.currentTarget[
|
|
882
|
-
_this.customWidth = rs.currentTarget[
|
|
1012
|
+
_this.customHeight = rs.currentTarget["height"];
|
|
1013
|
+
_this.customWidth = rs.currentTarget["width"];
|
|
883
1014
|
}
|
|
884
1015
|
};
|
|
885
1016
|
};
|
|
@@ -908,18 +1039,18 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
908
1039
|
/**
|
|
909
1040
|
* Comprime l'immagine passando come parametri le options create nell'oggetto sopra, e il file dal reader principale
|
|
910
1041
|
*/
|
|
911
|
-
imageCompression(file, options).then(
|
|
1042
|
+
imageCompression(file, options).then(function (fileCompressed) {
|
|
912
1043
|
var fileReader = new FileReader();
|
|
913
1044
|
//Faccio la push di ogni file all'interno dell'array di file dell'item da mandare al server
|
|
914
1045
|
fileReader.onload = function () {
|
|
915
1046
|
var resultReader = fileReader.result;
|
|
916
|
-
var marker =
|
|
1047
|
+
var marker = ";base64,";
|
|
917
1048
|
self.newAttachment.FileDataBase64 = resultReader.substring(resultReader.indexOf(marker) + marker.length);
|
|
918
1049
|
self.showCropImage = false;
|
|
919
1050
|
self.newAttachmentForm.enable();
|
|
920
1051
|
};
|
|
921
1052
|
fileReader.readAsDataURL(fileCompressed);
|
|
922
|
-
})
|
|
1053
|
+
});
|
|
923
1054
|
};
|
|
924
1055
|
EqpAttachmentsComponent.prototype.confirmCrop = function () {
|
|
925
1056
|
this.imageCropper.crop();
|
|
@@ -928,9 +1059,9 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
928
1059
|
* Annulla la selezione del file, svuotando l'input e resettando tutte le proprietà dell'IAttachmentDTO
|
|
929
1060
|
*/
|
|
930
1061
|
EqpAttachmentsComponent.prototype.abortFile = function () {
|
|
931
|
-
this.imageChangedEvent =
|
|
1062
|
+
this.imageChangedEvent = "";
|
|
932
1063
|
if (this.imageInput)
|
|
933
|
-
this.imageInput.nativeElement.value =
|
|
1064
|
+
this.imageInput.nativeElement.value = "";
|
|
934
1065
|
this.selectedFile = null;
|
|
935
1066
|
this.selectedFiles = null;
|
|
936
1067
|
this.showCropImage = false;
|
|
@@ -1012,6 +1143,18 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
1012
1143
|
__decorate([
|
|
1013
1144
|
Input("tablePaginatorSize")
|
|
1014
1145
|
], EqpAttachmentsComponent.prototype, "tablePaginatorSize", void 0);
|
|
1146
|
+
__decorate([
|
|
1147
|
+
Input("allowVideo")
|
|
1148
|
+
], EqpAttachmentsComponent.prototype, "allowVideo", void 0);
|
|
1149
|
+
__decorate([
|
|
1150
|
+
Input("allowVideoCompression")
|
|
1151
|
+
], EqpAttachmentsComponent.prototype, "allowVideoCompression", void 0);
|
|
1152
|
+
__decorate([
|
|
1153
|
+
Input("videoFormatsNotAllowed")
|
|
1154
|
+
], EqpAttachmentsComponent.prototype, "videoFormatsNotAllowed", void 0);
|
|
1155
|
+
__decorate([
|
|
1156
|
+
Input("allowedMBForFile")
|
|
1157
|
+
], EqpAttachmentsComponent.prototype, "allowedMBForFile", void 0);
|
|
1015
1158
|
__decorate([
|
|
1016
1159
|
Input("downloadTooltipPosition")
|
|
1017
1160
|
], EqpAttachmentsComponent.prototype, "downloadTooltipPosition", void 0);
|
|
@@ -1085,30 +1228,30 @@ var EqpAttachmentsComponent = /** @class */ (function () {
|
|
|
1085
1228
|
Output("onComponentLoaded")
|
|
1086
1229
|
], EqpAttachmentsComponent.prototype, "onComponentLoaded", void 0);
|
|
1087
1230
|
__decorate([
|
|
1088
|
-
ViewChild(
|
|
1231
|
+
ViewChild("dialogAddAttachment", { static: true })
|
|
1089
1232
|
], EqpAttachmentsComponent.prototype, "dialogAddAttachment", void 0);
|
|
1090
1233
|
__decorate([
|
|
1091
|
-
ViewChild(
|
|
1234
|
+
ViewChild("dialogAddMultipleAttachment", { static: true })
|
|
1092
1235
|
], EqpAttachmentsComponent.prototype, "dialogAddMultipleAttachment", void 0);
|
|
1093
1236
|
__decorate([
|
|
1094
1237
|
ViewChild(ImageCropperComponent)
|
|
1095
1238
|
], EqpAttachmentsComponent.prototype, "imageCropper", void 0);
|
|
1096
1239
|
__decorate([
|
|
1097
|
-
ViewChild(
|
|
1240
|
+
ViewChild("imageInput")
|
|
1098
1241
|
], EqpAttachmentsComponent.prototype, "imageInput", void 0);
|
|
1099
1242
|
__decorate([
|
|
1100
|
-
ViewChild(
|
|
1243
|
+
ViewChild("attachmentTable", { static: false })
|
|
1101
1244
|
], EqpAttachmentsComponent.prototype, "attachmentTable", void 0);
|
|
1102
1245
|
__decorate([
|
|
1103
|
-
ViewChild(
|
|
1246
|
+
ViewChild("inlinePreviewTemplate", { static: true })
|
|
1104
1247
|
], EqpAttachmentsComponent.prototype, "inlinePreviewTemplate", void 0);
|
|
1105
1248
|
__decorate([
|
|
1106
|
-
ViewChild(
|
|
1249
|
+
ViewChild("dialogPreview", { static: true })
|
|
1107
1250
|
], EqpAttachmentsComponent.prototype, "dialogPreview", void 0);
|
|
1108
1251
|
EqpAttachmentsComponent = __decorate([
|
|
1109
1252
|
Component({
|
|
1110
|
-
selector:
|
|
1111
|
-
template: "<!-- Se richiesta la gestione multipla mostra il pulsante di aggiunta e la tabella con l'elenco allegati -->\r\n<div *ngIf=\"multipleAttachment == true\">\r\n <mat-card [ngStyle]=\"{ 'box-shadow': showMatCard == false ? 'none' : null }\">\r\n <mat-card-header>\r\n <div class=\"col-md-6\">\r\n <div class=\"text-nowrap eqp-attachments-header-title\" *ngIf=\"showHeader == true\">\r\n {{headerTitle}}\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 text-right\">\r\n <div class=\"row justify-content-end\">\r\n <!-- Template del button per l'aggiunta di un allegato -->\r\n <ng-container *ngTemplateOutlet=\"addAttachmentButton\"></ng-container>\r\n </div>\r\n </div>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <eqp-table #attachmentTable [createMatCard]=\"false\" #table [columns]=\"attachmentsColumns\"\r\n [isMultiLanguage]=\"isEqpTableMultiLanguage\" [data]=\"attachmentsList\"\r\n [paginatorVisible]=\"tablePaginatorVisible\" [matPaginatorSize]=\"tablePaginatorSize\"\r\n [emptyTableMessage]=\"emptyTableMessage\" [searchText]=\"eqpTableSearchText\">\r\n </eqp-table>\r\n </mat-card-content>\r\n </mat-card>\r\n</div>\r\n\r\n<!-- Se richiesta la gestione singola mostra il pulsante di caricamento di un singolo file -->\r\n<div *ngIf=\"multipleAttachment != true\">\r\n <!-- Template del button per l'aggiunta di un allegato -->\r\n <ng-container *ngTemplateOutlet=\"addAttachmentButton\"></ng-container>\r\n\r\n <button class=\"mb-2 mr-2 eqp-attachments-download-btn\" (click)=\"viewAttachment(attachmentsList[0])\" type=\"button\"\r\n mat-raised-button *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0]\" color=\"primary\">\r\n <mat-icon *ngIf=\"attachmentsList[0].AttachmentType == AttachmentType.FILE\">download</mat-icon>\r\n <mat-icon *ngIf=\"attachmentsList[0].AttachmentType != AttachmentType.FILE\">open_in_new</mat-icon>\r\n {{attachmentsList[0].AttachmentType == AttachmentType.FILE ? downloadLabel : openLinkLabel}}\r\n </button>\r\n <button class=\"mb-2 mr-2 eqp-attachments-preview-btn\" (click)=\"openPreviewDialog(attachmentsList[0])\" type=\"button\"\r\n mat-raised-button color=\"primary\"\r\n *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0] && (!attachmentsList[0].FileContentType || (!attachmentsList[0].FileContentType.startsWith('video') && !attachmentsList[0].FileContentType.startsWith('audio')))\">\r\n <mat-icon>visibility</mat-icon> {{previewLabel}}\r\n </button>\r\n <button class=\"mb-2 eqp-attachments-delete-btn\" (click)=\"deleteAttachment(attachmentsList[0])\" type=\"button\"\r\n mat-raised-button *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0]\"\r\n [disabled]=\"isDisabled\">\r\n <mat-icon>delete</mat-icon> {{deleteLabel}}\r\n </button>\r\n\r\n <div class=\"row\" style=\"margin-top: 10px;\"\r\n *ngIf=\"attachmentsList.length > 0 && attachmentsList[0] && attachmentsList[0].FileDataBase64 && attachmentsList[0].IsImage == true\">\r\n <div class=\"col-sm-12\">\r\n <div class=\"single-attachment-inline-preview-container\">\r\n <img src=\"data:image/png;base64,{{attachmentsList[0].FileDataBase64}}\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"attachmentsList.length > 0 && attachmentsList[0] && attachmentsList[0].IsImage != true\">\r\n <div class=\"col-sm-12\">\r\n <mat-form-field>\r\n <mat-label>{{fileNameLabel}}</mat-label>\r\n <input readonly matInput [(ngModel)]=\"attachmentsList[0].FileName\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<ng-template #dialogAddAttachment>\r\n <div class=\"container-fluid eqp-attachments-dialog-add-container\"\r\n style=\"max-height: 70vh !important; overflow-x: hidden; overflow-y: auto;\">\r\n <form [formGroup]=\"newAttachmentForm\" (ngSubmit)=\"confirmAddAttachment()\" *ngIf=\"newAttachmentForm\">\r\n <div class=\"row\">\r\n <div class=\"header-title-standard\"> {{addButtonLabel}} {{ newAttachment.AttachmentType ==\r\n attachmentType.FILE ?\r\n 'File' : 'Link'}} </div>\r\n </div>\r\n <div class=\"row\" style=\"margin-top: 20px;\">\r\n <div class=\"col-sm-12\" *ngIf=\"newAttachment.AttachmentType == attachmentType.FILE\">\r\n <input #imageInput style=\"display:none;\" id=\"file_attachment\"\r\n name=\"file_attachment\" type=\"file\" (change)=\"onFileInputChange($event)\"\r\n [accept]=\"acceptedFileTypes\" [multiple]=\"loadMultipleFiles\"/>\r\n <button (click)=\"imageInput.click()\" type=\"button\" style=\"margin-left: 10px;\" id=\"file_attachment\"\r\n mat-raised-button color=\"primary\" [disabled]=\"showCropImage == true\"\r\n class=\"mb-2 btn btn-primary eqp-attachments-upload-btn\" *ngIf=\"(loadMultipleFiles != true && !newAttachment.FileDataBase64) || (loadMultipleFiles == true && newMultipleAttachments && newMultipleAttachments.length == 0)\">\r\n <mat-icon>cloud_upload</mat-icon>\r\n {{uploadFileLabel}}\r\n </button>\r\n <button (click)=\"abortFile()\" type=\"button\" style=\"margin-left: 10px;\" mat-raised-button\r\n *ngIf=\"(loadMultipleFiles != true && newAttachment.FileDataBase64) || (loadMultipleFiles == true && newMultipleAttachments && newMultipleAttachments.length > 0)\" class=\"mb-2 eqp-attachments-delete-btn\">\r\n <mat-icon>delete</mat-icon> {{deleteLabel}}\r\n </button>\r\n </div>\r\n <div class=\"col-sm-12\" *ngIf=\"newAttachment.AttachmentType == 2 || (selectedFile && loadMultipleFiles != true)\">\r\n <mat-form-field style=\"width: 100%;\">\r\n <mat-label> {{fileNameLabel}} </mat-label>\r\n <input formControlName=\"name\" matInput [(ngModel)]=\"newAttachment.FileName\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12\" *ngIf=\"newAttachment.AttachmentType == 2\">\r\n <mat-form-field style=\"width: 100%;\">\r\n <mat-label> Link </mat-label>\r\n <input formControlName=\"path\" required matInput [(ngModel)]=\"newAttachment.FilePath\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <!-- Riporta l'elenco dei nomi dei file caricati contemporaneamente (visibile solo se loadMultipleFiles = TRUE e se ci sono realmente pi\u00F9 file senza link) -->\r\n <div class=\"row\" *ngIf=\"loadMultipleFiles == true && newMultipleAttachments && newMultipleAttachments.length > 0 && newMultipleAttachments[0].AttachmentType != attachmentType.LINK\">\r\n <div class=\"col-12\" *ngFor=\"let attach of newMultipleAttachments\">\r\n <mat-form-field style=\"width: 100%\">\r\n <mat-label> {{fileNameLabel}} </mat-label>\r\n <input disabled matInput [(ngModel)]=\"attach.FileName\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <!-- Riporta la preview dell'immagine quando \u00E8 richiesto il caricamento MULTIPLO ma \u00E8 stata selezionata una sola immagine (quindi \u00E8 entrato in gioco anche il croppie) -->\r\n <div class=\"row\" *ngIf=\"loadMultipleFiles == true && showCropImage != true && newMultipleAttachments && newMultipleAttachments.length == 1 && newMultipleAttachments[0].IsImage == true\" style=\"margin-top: 10px;\">\r\n <div class=\"col-4\">\r\n <div class=\"single-attachment-inline-preview-container\">\r\n <img src=\"data:image/png;base64,{{newMultipleAttachments[0].FileDataBase64}}\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Riporta la preview dell'immagine quando \u00E8 richiesto il caricamento SINGOLO ed \u00E8 stata selezionata un'immagine -->\r\n <div class=\"row\" *ngIf=\"loadMultipleFiles != true && showCropImage != true && newAttachment.FileDataBase64 && newAttachment.IsImage == true\" style=\"margin-top: 10px;\">\r\n <div class=\"col-4\">\r\n <div class=\"single-attachment-inline-preview-container\">\r\n <img src=\"data:image/png;base64,{{newAttachment.FileDataBase64}}\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Richiama il template per le funzionalit\u00E0 del CROPPIE -->\r\n <ng-container [ngTemplateOutlet]=\"croppieTemplate\" [ngTemplateOutletContext]=\"{form: newAttachmentForm}\" *ngIf=\"showCropImage == true\"></ng-container>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"btn btn-primary mat-raised-button eqp-attachments-save-btn mr-2\" type=\"submit\"\r\n [disabled]=\"showCropImage == true || (loadMultipleFiles != true && newAttachmentForm?.disabled == true) || disableSave()\">\r\n {{saveLabel}}\r\n </button>\r\n <button class=\"btn mat-raised-button eqp-attachments-exit-btn\" (click)=\"close()\"\r\n [disabled]=\"showCropImage == true\" type=\"button\">\r\n {{exitLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #inlinePreviewTemplate let-row=\"row\">\r\n <div class=\"inline-preview-container\" *ngIf=\"row.AttachmentType != AttachmentType.LINK && row.IsImage\" (click)=\"openPreviewDialog(row)\">\r\n <img src=\"data:image/png;base64,{{row.FileThumbnailBase64 ? row.FileThumbnailBase64 : row.FileDataBase64}}\">\r\n </div>\r\n <div class=\"inline-preview-container\" *ngIf=\"row.AttachmentType != AttachmentType.LINK && !row.IsImage\" (click)=\"openPreviewDialog(row)\">\r\n <i [ngClass]=\"getAttachmentIcon(row)\"></i>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #dialogPreview>\r\n <div class=\"container-fluid\" style=\"max-height: 70vh !important;\" *ngIf=\"selectedAttachment\">\r\n <div class=\"row\">\r\n <div class=\"header-title-standard\">\r\n {{previewLabel}} {{ selectedAttachment?.AttachmentType == attachmentType.FILE ? 'File' : 'Link'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <!-- ANTEPRIMA IMMAGINE -->\r\n <div class=\"col-12 text-center preview-container\" *ngIf=\"selectedAttachment.IsImage\">\r\n <img class=\"image-preview\"\r\n src=\"data:image/png;base64,{{selectedAttachment.FileDataBase64 ? selectedAttachment.FileDataBase64 : selectedAttachment.FileThumbnailBase64}}\">\r\n </div>\r\n\r\n <!-- ANTEPRIMA LINK -->\r\n <div class=\"col-12 preview-container\" *ngIf=\"!selectedAttachment.IsImage\">\r\n <iframe class=\"link-preview\" [src]=\"selectedAttachment.TrustedUrl\"\r\n [title]=\"selectedAttachment.FileName\"></iframe>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"btn btn-primary mat-raised-button eqp-attachments-save-btn mr-2\" type=\"submit\"\r\n (click)=\"viewAttachment(selectedAttachment)\"\r\n *ngIf=\"selectedAttachment.AttachmentType != AttachmentType.LINK\">\r\n {{downloadLabel}}\r\n </button>\r\n <button class=\"btn mat-raised-button eqp-attachments-exit-btn\" mat-dialog-close type=\"button\"\r\n (click)=\"selectedAttachment = null\">\r\n {{exitLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- TEMPLATE PER IL PULSANTE DI AGGIUNTA NUOVO ALLEGATO -->\r\n<ng-template #addAttachmentButton>\r\n\r\n <!-- \r\n Pulsanti per l'aggiunta di un file o un link. Ne viene visualizzato uno se:\r\n - gli allowedTypes sono stati specificati, nell'array ne \u00E8 presente uno solo, quello inserito \u00E8 AttachmentType.FILE (o AttachmentType.LINK) \r\n e sono nella gestione di pi\u00F9 allegati (multipleAttachment == true)\r\n OPPURE\r\n - gli allowedTypes sono stati specificati, nell'array ne \u00E8 presente uno solo, quello inserito \u00E8 AttachmentType.FILE (o AttachmentType.LINK) \r\n e sono nella gestione di un singolo allegato (multipleAttachment == true) e non ne \u00E8 ancora stato selezionato uno (ovvero attachmentsList non esiste o non ha elementi)\r\n -->\r\n <button class=\"btn btn-primary mb-4 mr-5 eqp-attachments-add-btn\" mat-raised-button color=\"primary\" type=\"button\"\r\n *ngIf=\"allowedTypes && allowedTypes.length == 1 && (multipleAttachment == true || (!attachmentsList || attachmentsList.length == 0 || (attachmentsList.length > 0 && !attachmentsList[0])))\"\r\n (click)=\"openModalAddAttachment(allowedTypes[0])\" [disabled]=\"isDisabled\">\r\n <!-- Per l'aggiunta dei file mostro un'icona diversa dall'aggiunta dei link -->\r\n <mat-icon *ngIf=\"allowedTypes[0] == 1\">cloud_upload</mat-icon>\r\n <i class=\"fas fa-link\" *ngIf=\"allowedTypes[0] == 2\"></i>\r\n <span style=\"margin-left: 10px;\">{{addButtonLabel}} {{allowedTypes[0] == 1 ? \"file\" : \"link\"}}</span>\r\n </button>\r\n\r\n\r\n <!-- Pulsante per aprire il menu per la scelta del tipo di Attachment da creare -->\r\n <button class=\"btn btn-primary mb-4 mr-5 eqp-attachments-add-btn\" mat-raised-button color=\"primary\" type=\"button\"\r\n [matMenuTriggerFor]=\"attachmentTypeMenu\" [disabled]=\"isDisabled\"\r\n *ngIf=\"allowedTypes && allowedTypes.length > 1 && (multipleAttachment == true || (!attachmentsList || attachmentsList.length == 0 || (attachmentsList.length > 0 && !attachmentsList[0])))\">\r\n <mat-icon *ngIf=\"multipleAttachment != true\">cloud_upload</mat-icon>\r\n <mat-icon *ngIf=\"multipleAttachment == true\">add</mat-icon>\r\n <span style=\"margin-left: 0px;\"> {{addButtonLabel}} </span>\r\n </button>\r\n <mat-menu #attachmentTypeMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"openModalAddAttachment(1)\" class=\"eqp-attachments-file-btn\">\r\n <i class=\"fas fa-file\"></i>\r\n <span style=\"margin-left: 10px;\">File</span>\r\n </button>\r\n <button mat-menu-item (click)=\"openModalAddAttachment(2)\" class=\"eqp-attachments-link-btn\">\r\n <i class=\"fas fa-link\"></i>\r\n <span style=\"margin-left: 10px;\">Link</span>\r\n </button>\r\n </mat-menu>\r\n</ng-template>\r\n\r\n\r\n<ng-template #croppieTemplate let-form=\"form\">\r\n <div class=\"row mt-2 mb-2\" [formGroup]=\"form\">\r\n <div class=\"col-md-12 d-flex align-items-center justify-content-center\">\r\n <span class=\"mr-1\">Max H(px):</span>\r\n <mat-form-field>\r\n <input formControlName=\"customHeight\" type=\"number\" matInput [(ngModel)]=\"customHeight\"\r\n (change)=\"onDimensionsChange('H')\">\r\n </mat-form-field>\r\n\r\n <span class=\"ml-2 mr-1\">Max W(px):</span>\r\n <mat-form-field>\r\n <input formControlName=\"customWidth\" type=\"number\" matInput [(ngModel)]=\"customWidth\"\r\n (change)=\"onDimensionsChange('W')\">\r\n </mat-form-field>\r\n\r\n <button class=\"btn btn-primary mat-raised-button ml-2\" (click)=\"restoreOriginalDimensions()\"\r\n [disabled]=\"customWidth == originalWidth && customHeight == originalHeight\">\r\n <mat-icon style=\"vertical-align: middle;\">replay</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row justify-content-center\">\r\n <div style=\"max-height: 450px; max-width: 450px;\">\r\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\" [maintainAspectRatio]=\"false\"\r\n [autoCrop]=\"false\" [containWithinAspectRatio]=\"false\" [aspectRatio]=\"4/3\"\r\n [cropperMinWidth]=\"128\" [onlyScaleDown]=\"true\" [roundCropper]=\"false\" [canvasRotation]=\"0\"\r\n [transform]=\"transform\" [alignImage]=\"'left'\" format=\"png\" (imageCropped)=\"imageCropped($event)\"\r\n [resizeToWidth]=\"customWidth\" [resizeToHeight]=\"customHeight\">\r\n </image-cropper>\r\n </div>\r\n </div>\r\n <div class=\"row justify-content-center mt-2\">\r\n <div style=\"max-height: 450px; max-width: 450px;\">\r\n <button class=\"btn btn-primary mat-raised-button eqp-attachments-confirm-btn mr-2\" type=\"button\"\r\n (click)=\"confirmCrop()\">\r\n {{confirmLabel}}\r\n </button>\r\n <button class=\"btn mat-raised-button eqp-attachments-abort-btn\" type=\"button\" (click)=\"abortFile()\">\r\n {{abortLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>",
|
|
1253
|
+
selector: "eqp-attachments",
|
|
1254
|
+
template: "<!-- Se richiesta la gestione multipla mostra il pulsante di aggiunta e la tabella con l'elenco allegati -->\r\n<div *ngIf=\"multipleAttachment == true\">\r\n <mat-card [ngStyle]=\"{ 'box-shadow': showMatCard == false ? 'none' : null }\">\r\n <mat-card-header>\r\n <div class=\"col-md-6\">\r\n <div class=\"text-nowrap eqp-attachments-header-title\" *ngIf=\"showHeader == true\">\r\n {{headerTitle}}\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 text-right\">\r\n <div class=\"row justify-content-end\">\r\n <!-- Template del button per l'aggiunta di un allegato -->\r\n <ng-container *ngTemplateOutlet=\"addAttachmentButton\"></ng-container>\r\n </div>\r\n </div>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <eqp-table #attachmentTable [createMatCard]=\"false\" #table [columns]=\"attachmentsColumns\"\r\n [isMultiLanguage]=\"isEqpTableMultiLanguage\" [data]=\"attachmentsList\"\r\n [paginatorVisible]=\"tablePaginatorVisible\" [matPaginatorSize]=\"tablePaginatorSize\"\r\n [emptyTableMessage]=\"emptyTableMessage\" [searchText]=\"eqpTableSearchText\">\r\n </eqp-table>\r\n </mat-card-content>\r\n </mat-card>\r\n</div>\r\n\r\n<!-- Se richiesta la gestione singola mostra il pulsante di caricamento di un singolo file -->\r\n<div *ngIf=\"multipleAttachment != true\">\r\n <!-- Template del button per l'aggiunta di un allegato -->\r\n <ng-container *ngTemplateOutlet=\"addAttachmentButton\"></ng-container>\r\n\r\n <button class=\"mb-2 mr-2 eqp-attachments-download-btn\" (click)=\"viewAttachment(attachmentsList[0])\" type=\"button\"\r\n mat-raised-button *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0]\" color=\"primary\">\r\n <mat-icon *ngIf=\"attachmentsList[0].AttachmentType == AttachmentType.FILE\">download</mat-icon>\r\n <mat-icon *ngIf=\"attachmentsList[0].AttachmentType != AttachmentType.FILE\">open_in_new</mat-icon>\r\n {{attachmentsList[0].AttachmentType == AttachmentType.FILE ? downloadLabel : openLinkLabel}}\r\n </button>\r\n <button class=\"mb-2 mr-2 eqp-attachments-preview-btn\" (click)=\"openPreviewDialog(attachmentsList[0])\" type=\"button\"\r\n mat-raised-button color=\"primary\"\r\n *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0] && (!attachmentsList[0].FileContentType || (!attachmentsList[0].FileContentType.startsWith('video') && !attachmentsList[0].FileContentType.startsWith('audio')))\">\r\n <mat-icon>visibility</mat-icon> {{previewLabel}}\r\n </button>\r\n <button class=\"mb-2 eqp-attachments-delete-btn\" (click)=\"deleteAttachment(attachmentsList[0])\" type=\"button\"\r\n mat-raised-button *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0]\"\r\n [disabled]=\"isDisabled\">\r\n <mat-icon>delete</mat-icon> {{deleteLabel}}\r\n </button>\r\n\r\n <div class=\"row\" style=\"margin-top: 10px;\"\r\n *ngIf=\"attachmentsList.length > 0 && attachmentsList[0] && attachmentsList[0].FileDataBase64 && attachmentsList[0].IsImage == true\">\r\n <div class=\"col-sm-12\">\r\n <div class=\"single-attachment-inline-preview-container\">\r\n <img src=\"data:image/png;base64,{{attachmentsList[0].FileDataBase64}}\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"attachmentsList.length > 0 && attachmentsList[0] && attachmentsList[0].IsImage != true\">\r\n <div class=\"col-sm-12\">\r\n <mat-form-field>\r\n <mat-label>{{fileNameLabel}}</mat-label>\r\n <input readonly matInput [(ngModel)]=\"attachmentsList[0].FileName\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<ng-template #dialogAddAttachment>\r\n <div class=\"container-fluid eqp-attachments-dialog-add-container\"\r\n style=\"max-height: 70vh !important; overflow-x: hidden; overflow-y: auto;\">\r\n <form [formGroup]=\"newAttachmentForm\" (ngSubmit)=\"confirmAddAttachment()\" *ngIf=\"newAttachmentForm\">\r\n <div class=\"row\">\r\n <div class=\"header-title-standard\"> {{addButtonLabel}} {{ newAttachment.AttachmentType ==\r\n attachmentType.FILE ?\r\n 'File' : 'Link'}} </div>\r\n </div>\r\n <div class=\"row\" style=\"margin-top: 20px;\">\r\n <div class=\"col-sm-12\" *ngIf=\"newAttachment.AttachmentType == attachmentType.FILE\">\r\n <input #imageInput style=\"display:none;\" id=\"file_attachment\"\r\n name=\"file_attachment\" type=\"file\" (change)=\"onFileInputChange($event)\"\r\n [accept]=\"acceptedFileTypes\" [multiple]=\"loadMultipleFiles\"/>\r\n <button (click)=\"imageInput.click()\" type=\"button\" style=\"margin-left: 10px;\" id=\"file_attachment\"\r\n mat-raised-button color=\"primary\" [disabled]=\"showCropImage == true\"\r\n class=\"mb-2 btn btn-primary eqp-attachments-upload-btn\" *ngIf=\"(loadMultipleFiles != true && !newAttachment.FileDataBase64) || (loadMultipleFiles == true && newMultipleAttachments && newMultipleAttachments.length == 0)\">\r\n <mat-icon>cloud_upload</mat-icon>\r\n {{uploadFileLabel}}\r\n </button>\r\n <button (click)=\"abortFile()\" type=\"button\" style=\"margin-left: 10px;\" mat-raised-button\r\n *ngIf=\"(loadMultipleFiles != true && newAttachment.FileDataBase64) || (loadMultipleFiles == true && newMultipleAttachments && newMultipleAttachments.length > 0)\" class=\"mb-2 eqp-attachments-delete-btn\">\r\n <mat-icon>delete</mat-icon> {{deleteLabel}}\r\n </button>\r\n </div>\r\n <div class=\"col-sm-12\" *ngIf=\"newAttachment.AttachmentType == 2 || (selectedFile && loadMultipleFiles != true)\">\r\n <mat-form-field style=\"width: 100%;\">\r\n <mat-label> {{fileNameLabel}} </mat-label>\r\n <input formControlName=\"name\" matInput [(ngModel)]=\"newAttachment.FileName\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12\" *ngIf=\"newAttachment.AttachmentType == 2\">\r\n <mat-form-field style=\"width: 100%;\">\r\n <mat-label> Link </mat-label>\r\n <input formControlName=\"path\" required matInput [(ngModel)]=\"newAttachment.FilePath\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <!-- Riporta l'elenco dei nomi dei file caricati contemporaneamente (visibile solo se loadMultipleFiles = TRUE e se ci sono realmente pi\u00F9 file senza link) -->\r\n <div class=\"row\" *ngIf=\"loadMultipleFiles == true && newMultipleAttachments && newMultipleAttachments.length > 0 && newMultipleAttachments[0].AttachmentType != attachmentType.LINK\">\r\n <div class=\"col-12\" *ngFor=\"let attach of newMultipleAttachments\">\r\n <mat-form-field style=\"width: 100%\">\r\n <mat-label> {{fileNameLabel}} </mat-label>\r\n <input disabled matInput [(ngModel)]=\"attach.FileName\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <!-- Riporta la preview dell'immagine quando \u00E8 richiesto il caricamento MULTIPLO ma \u00E8 stata selezionata una sola immagine (quindi \u00E8 entrato in gioco anche il croppie) -->\r\n <div class=\"row\" *ngIf=\"loadMultipleFiles == true && showCropImage != true && newMultipleAttachments && newMultipleAttachments.length == 1 && newMultipleAttachments[0].IsImage == true\" style=\"margin-top: 10px;\">\r\n <div class=\"col-4\">\r\n <div class=\"single-attachment-inline-preview-container\">\r\n <img src=\"data:image/png;base64,{{newMultipleAttachments[0].FileDataBase64}}\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Riporta la preview dell'immagine quando \u00E8 richiesto il caricamento SINGOLO ed \u00E8 stata selezionata un'immagine -->\r\n <div class=\"row\" *ngIf=\"loadMultipleFiles != true && showCropImage != true && newAttachment.FileDataBase64 && newAttachment.IsImage == true\" style=\"margin-top: 10px;\">\r\n <div class=\"col-4\">\r\n <div class=\"single-attachment-inline-preview-container\">\r\n <img src=\"data:image/png;base64,{{newAttachment.FileDataBase64}}\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Richiama il template per le funzionalit\u00E0 del CROPPIE -->\r\n <ng-container [ngTemplateOutlet]=\"croppieTemplate\" [ngTemplateOutletContext]=\"{form: newAttachmentForm}\" *ngIf=\"showCropImage == true\"></ng-container>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"btn btn-primary eqp-attachments-save-btn mr-2\" type=\"submit\"\r\n [disabled]=\"showCropImage == true || (loadMultipleFiles != true && newAttachmentForm?.disabled == true) || disableSave()\">\r\n <span *ngIf=\"showZipSpinner\" class=\"spinner-border spinner-border-sm eqp-attachments-save-spinner\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{saveLabel}}\r\n </button>\r\n <button class=\"btn mat-raised-button eqp-attachments-exit-btn\" (click)=\"close()\"\r\n [disabled]=\"showCropImage == true\" type=\"button\">\r\n {{exitLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #inlinePreviewTemplate let-row=\"row\">\r\n <div class=\"inline-preview-container\" *ngIf=\"row.AttachmentType != AttachmentType.LINK && row.IsImage\" (click)=\"openPreviewDialog(row)\">\r\n <img src=\"data:image/png;base64,{{row.FileThumbnailBase64 ? row.FileThumbnailBase64 : row.FileDataBase64}}\">\r\n </div>\r\n <div class=\"inline-preview-container\" *ngIf=\"row.AttachmentType != AttachmentType.LINK && !row.IsImage\" (click)=\"openPreviewDialog(row)\">\r\n <i [ngClass]=\"getAttachmentIcon(row)\"></i>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #dialogPreview>\r\n <div class=\"container-fluid\" style=\"max-height: 70vh !important;\" *ngIf=\"selectedAttachment\">\r\n <div class=\"row\">\r\n <div class=\"header-title-standard\">\r\n {{previewLabel}} {{ selectedAttachment?.AttachmentType == attachmentType.FILE ? 'File' : 'Link'}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <!-- ANTEPRIMA IMMAGINE -->\r\n <div class=\"col-12 text-center preview-container\" *ngIf=\"selectedAttachment.IsImage\">\r\n <img class=\"image-preview\"\r\n src=\"data:image/png;base64,{{selectedAttachment.FileDataBase64 ? selectedAttachment.FileDataBase64 : selectedAttachment.FileThumbnailBase64}}\">\r\n </div>\r\n\r\n <!-- ANTEPRIMA LINK -->\r\n <div class=\"col-12 preview-container\" *ngIf=\"!selectedAttachment.IsImage\">\r\n <iframe class=\"link-preview\" [src]=\"selectedAttachment.TrustedUrl\"\r\n [title]=\"selectedAttachment.FileName\"></iframe>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"btn btn-primary mat-raised-button eqp-attachments-save-btn mr-2\" type=\"submit\"\r\n (click)=\"viewAttachment(selectedAttachment)\"\r\n *ngIf=\"selectedAttachment.AttachmentType != AttachmentType.LINK\">\r\n {{downloadLabel}}\r\n </button>\r\n <button class=\"btn mat-raised-button eqp-attachments-exit-btn\" mat-dialog-close type=\"button\"\r\n (click)=\"selectedAttachment = null\">\r\n {{exitLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- TEMPLATE PER IL PULSANTE DI AGGIUNTA NUOVO ALLEGATO -->\r\n<ng-template #addAttachmentButton>\r\n\r\n <!-- \r\n Pulsanti per l'aggiunta di un file o un link. Ne viene visualizzato uno se:\r\n - gli allowedTypes sono stati specificati, nell'array ne \u00E8 presente uno solo, quello inserito \u00E8 AttachmentType.FILE (o AttachmentType.LINK) \r\n e sono nella gestione di pi\u00F9 allegati (multipleAttachment == true)\r\n OPPURE\r\n - gli allowedTypes sono stati specificati, nell'array ne \u00E8 presente uno solo, quello inserito \u00E8 AttachmentType.FILE (o AttachmentType.LINK) \r\n e sono nella gestione di un singolo allegato (multipleAttachment == true) e non ne \u00E8 ancora stato selezionato uno (ovvero attachmentsList non esiste o non ha elementi)\r\n -->\r\n <button class=\"btn btn-primary mb-4 mr-5 eqp-attachments-add-btn\" mat-raised-button color=\"primary\" type=\"button\"\r\n *ngIf=\"allowedTypes && allowedTypes.length == 1 && (multipleAttachment == true || (!attachmentsList || attachmentsList.length == 0 || (attachmentsList.length > 0 && !attachmentsList[0])))\"\r\n (click)=\"openModalAddAttachment(allowedTypes[0])\" [disabled]=\"isDisabled\">\r\n <!-- Per l'aggiunta dei file mostro un'icona diversa dall'aggiunta dei link -->\r\n <mat-icon *ngIf=\"allowedTypes[0] == 1\">cloud_upload</mat-icon>\r\n <i class=\"fas fa-link\" *ngIf=\"allowedTypes[0] == 2\"></i>\r\n <span style=\"margin-left: 10px;\">{{addButtonLabel}} {{allowedTypes[0] == 1 ? \"file\" : \"link\"}}</span>\r\n </button>\r\n\r\n\r\n <!-- Pulsante per aprire il menu per la scelta del tipo di Attachment da creare -->\r\n <button class=\"btn btn-primary mb-4 mr-5 eqp-attachments-add-btn\" mat-raised-button color=\"primary\" type=\"button\"\r\n [matMenuTriggerFor]=\"attachmentTypeMenu\" [disabled]=\"isDisabled\"\r\n *ngIf=\"allowedTypes && allowedTypes.length > 1 && (multipleAttachment == true || (!attachmentsList || attachmentsList.length == 0 || (attachmentsList.length > 0 && !attachmentsList[0])))\">\r\n <mat-icon *ngIf=\"multipleAttachment != true\">cloud_upload</mat-icon>\r\n <mat-icon *ngIf=\"multipleAttachment == true\">add</mat-icon>\r\n <span style=\"margin-left: 0px;\"> {{addButtonLabel}} </span>\r\n </button>\r\n <mat-menu #attachmentTypeMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"openModalAddAttachment(1)\" class=\"eqp-attachments-file-btn\">\r\n <i class=\"fas fa-file\"></i>\r\n <span style=\"margin-left: 10px;\">File</span>\r\n </button>\r\n <button mat-menu-item (click)=\"openModalAddAttachment(2)\" class=\"eqp-attachments-link-btn\">\r\n <i class=\"fas fa-link\"></i>\r\n <span style=\"margin-left: 10px;\">Link</span>\r\n </button>\r\n </mat-menu>\r\n</ng-template>\r\n\r\n\r\n<ng-template #croppieTemplate let-form=\"form\">\r\n <div class=\"row mt-2 mb-2\" [formGroup]=\"form\">\r\n <div class=\"col-md-12 d-flex align-items-center justify-content-center\">\r\n <span class=\"mr-1\">Max H(px):</span>\r\n <mat-form-field>\r\n <input formControlName=\"customHeight\" type=\"number\" matInput [(ngModel)]=\"customHeight\"\r\n (change)=\"onDimensionsChange('H')\">\r\n </mat-form-field>\r\n\r\n <span class=\"ml-2 mr-1\">Max W(px):</span>\r\n <mat-form-field>\r\n <input formControlName=\"customWidth\" type=\"number\" matInput [(ngModel)]=\"customWidth\"\r\n (change)=\"onDimensionsChange('W')\">\r\n </mat-form-field>\r\n\r\n <button class=\"btn btn-primary mat-raised-button ml-2\" (click)=\"restoreOriginalDimensions()\"\r\n [disabled]=\"customWidth == originalWidth && customHeight == originalHeight\">\r\n <mat-icon style=\"vertical-align: middle;\">replay</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row justify-content-center\">\r\n <div style=\"max-height: 450px; max-width: 450px;\">\r\n <image-cropper [imageChangedEvent]=\"imageChangedEvent\" [maintainAspectRatio]=\"false\"\r\n [autoCrop]=\"false\" [containWithinAspectRatio]=\"false\" [aspectRatio]=\"4/3\"\r\n [cropperMinWidth]=\"128\" [onlyScaleDown]=\"true\" [roundCropper]=\"false\" [canvasRotation]=\"0\"\r\n [transform]=\"transform\" [alignImage]=\"'left'\" format=\"png\" (imageCropped)=\"imageCropped($event)\"\r\n [resizeToWidth]=\"customWidth\" [resizeToHeight]=\"customHeight\">\r\n </image-cropper>\r\n </div>\r\n </div>\r\n <div class=\"row justify-content-center mt-2\">\r\n <div style=\"max-height: 450px; max-width: 450px;\">\r\n <button class=\"btn btn-primary mat-raised-button eqp-attachments-confirm-btn mr-2\" type=\"button\"\r\n (click)=\"confirmCrop()\">\r\n {{confirmLabel}}\r\n </button>\r\n <button class=\"btn mat-raised-button eqp-attachments-abort-btn\" type=\"button\" (click)=\"abortFile()\">\r\n {{abortLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>",
|
|
1112
1255
|
styles: [".eqp-attachments-header-title{font-weight:700;font-size:19px;line-height:24px;margin-bottom:auto}.single-attachment-inline-preview-container{max-height:400px;max-width:400px;display:flex;align-items:center}.single-attachment-inline-preview-container img{max-width:100%;max-height:120px}.inline-preview-container{max-height:100px;max-width:100px;display:flex;align-items:center;justify-content:center;width:100%;cursor:pointer}.inline-preview-container img{max-width:100%;max-height:100px}.inline-preview-container i{font-size:25px;margin:auto}.preview-container{max-height:60vh;max-width:100%}.preview-container .image-preview{max-width:100%;max-height:100%}.preview-container .link-preview{width:70vw;height:55vh}"]
|
|
1113
1256
|
})
|
|
1114
1257
|
], EqpAttachmentsComponent);
|