@eqproject/eqp-attachments 0.1.16 → 0.1.17

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.
@@ -1,13 +1,13 @@
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 { HttpClient } from '@angular/common/http';
7
+ import { TooltipPositionType, TypeColumn, EqpTableModule } from '@eqproject/eqp-table';
8
+ import imageCompression from 'browser-image-compression';
9
+ import { base64ToFile, ImageCropperComponent, ImageCropperModule } from 'ngx-image-cropper';
10
+ import Swal from 'sweetalert2';
11
11
  import { CommonModule } from '@angular/common';
12
12
  import { MatCheckboxModule } from '@angular/material/checkbox';
13
13
  import { MatButtonModule } from '@angular/material/button';
@@ -40,12 +40,6 @@ import { MatSortModule } from '@angular/material/sort';
40
40
  import { MatPaginatorModule } from '@angular/material/paginator';
41
41
  import { MatNativeDateModule } from '@angular/material/core';
42
42
 
43
- var AttachmentType;
44
- (function (AttachmentType) {
45
- AttachmentType[AttachmentType["FILE"] = 1] = "FILE";
46
- AttachmentType[AttachmentType["LINK"] = 2] = "LINK";
47
- })(AttachmentType || (AttachmentType = {}));
48
-
49
43
  var AttachmentHelperService = /** @class */ (function () {
50
44
  function AttachmentHelperService() {
51
45
  }
@@ -105,6 +99,12 @@ var AttachmentHelperService = /** @class */ (function () {
105
99
  return AttachmentHelperService;
106
100
  }());
107
101
 
102
+ var AttachmentType;
103
+ (function (AttachmentType) {
104
+ AttachmentType[AttachmentType["FILE"] = 1] = "FILE";
105
+ AttachmentType[AttachmentType["LINK"] = 2] = "LINK";
106
+ })(AttachmentType || (AttachmentType = {}));
107
+
108
108
  var EqpAttachmentDialogService = /** @class */ (function () {
109
109
  function EqpAttachmentDialogService() {
110
110
  }
@@ -213,12 +213,14 @@ var EqpAttachmentDialogService = /** @class */ (function () {
213
213
  return EqpAttachmentDialogService;
214
214
  }());
215
215
 
216
- var toBase64 = function (file) { return new Promise(function (resolve, reject) {
217
- var reader = new FileReader();
218
- reader.readAsDataURL(file);
219
- reader.onload = function () { return resolve(reader.result.toString()); };
220
- reader.onerror = function (error) { return reject(error); };
221
- }); };
216
+ var toBase64 = function (file) {
217
+ return new Promise(function (resolve, reject) {
218
+ var reader = new FileReader();
219
+ reader.readAsDataURL(file);
220
+ reader.onload = function () { return resolve(reader.result.toString()); };
221
+ reader.onerror = function (error) { return reject(error); };
222
+ });
223
+ };
222
224
  var ɵ0 = toBase64;
223
225
  var EqpAttachmentsComponent = /** @class */ (function () {
224
226
  function EqpAttachmentsComponent(dialog, formBuilder, sanitizer, http, cd) {
@@ -297,7 +299,11 @@ var EqpAttachmentsComponent = /** @class */ (function () {
297
299
  /**
298
300
  * Opzioni per la compressione delle immagini caricate.
299
301
  */
300
- this.compressionOptions = { maxSizeMB: 0.5, maxWidthOrHeight: 1920, useWebWorker: true };
302
+ this.compressionOptions = {
303
+ maxSizeMB: 0.5,
304
+ maxWidthOrHeight: 1920,
305
+ useWebWorker: true
306
+ };
301
307
  /**
302
308
  * Array di AttachmentType che si possono aggiungere
303
309
  */
@@ -317,6 +323,10 @@ var EqpAttachmentsComponent = /** @class */ (function () {
317
323
  * per la tabella contenente l'elenco degli allegati
318
324
  */
319
325
  this.tablePaginatorSize = null;
326
+ /**
327
+ * Abilitare caricamento video
328
+ */
329
+ this.allowVideo = false;
320
330
  /**
321
331
  * Input per definire le label da usare nel componente
322
332
  */
@@ -375,8 +385,8 @@ var EqpAttachmentsComponent = /** @class */ (function () {
375
385
  this.showCropImage = false;
376
386
  //#endregion
377
387
  //#region Proprietà per gestione ridimensionamento file di tipo image
378
- this.imageChangedEvent = '';
379
- this.croppedImage = '';
388
+ this.imageChangedEvent = "";
389
+ this.croppedImage = "";
380
390
  this.transform = {};
381
391
  //#endregion
382
392
  this.AttachmentType = AttachmentType;
@@ -392,7 +402,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
392
402
  if (!this.allowedTypes || this.allowedTypes.length == 0)
393
403
  this.allowedTypes = [AttachmentType.FILE, AttachmentType.LINK];
394
404
  else if (this.allowedTypes.find(function (t) { return t != AttachmentType.FILE && t != AttachmentType.LINK; })) {
395
- EqpAttachmentDialogService.Warning("Almeno uno degli AttachmentType selezionati nel parametro \"allowedTypes\" non esiste.");
405
+ EqpAttachmentDialogService.Warning('Almeno uno degli AttachmentType selezionati nel parametro "allowedTypes" non esiste.');
396
406
  this.allowedTypes = [AttachmentType.FILE, AttachmentType.LINK];
397
407
  }
398
408
  //Se è stata richiesta la gestione multipla degli allegati allora configura l'eqp-table
@@ -424,27 +434,45 @@ var EqpAttachmentsComponent = /** @class */ (function () {
424
434
  this.attachmentsColumns = [];
425
435
  if (this.disableAction != true) {
426
436
  this.attachmentsColumns.push({
427
- key: "action", display: "",
428
- type: TypeColumn.MenuAction, buttonMenuIcon: "more_vert", styles: { flex: "0 0 6%" },
437
+ key: "action",
438
+ display: "",
439
+ type: TypeColumn.MenuAction,
440
+ buttonMenuIcon: "more_vert",
441
+ styles: { flex: "0 0 6%" },
429
442
  actions: [
430
- { name: this.deleteLabel, icon: "delete", fn: function (element, index, col) { return _this.deleteAttachment(element); } },
431
- ],
443
+ { name: this.deleteLabel, icon: "delete", fn: function (element, index, col) { return _this.deleteAttachment(element); } }
444
+ ]
432
445
  });
433
446
  }
434
447
  var downloadColumn = {
435
- key: "attachment", display: "",
436
- type: TypeColumn.SimpleAction, styles: { flex: "0 0 6%" },
448
+ key: "attachment",
449
+ display: "",
450
+ type: TypeColumn.SimpleAction,
451
+ styles: { flex: "0 0 6%" },
437
452
  actions: [
438
453
  {
439
- name: '', fontawesome: true,
440
- icon: function (element) { return _this.showInlinePreview ? (element.AttachmentType == AttachmentType.FILE ? "fas fa-cloud-download-alt" : "fas fa-external-link-alt") : _this.getAttachmentIcon(element); },
454
+ name: "",
455
+ fontawesome: true,
456
+ icon: function (element) {
457
+ return _this.showInlinePreview
458
+ ? element.AttachmentType == AttachmentType.FILE
459
+ ? "fas fa-cloud-download-alt"
460
+ : "fas fa-external-link-alt"
461
+ : _this.getAttachmentIcon(element);
462
+ },
441
463
  fn: function (element, col, elementIndex) { return _this.viewAttachment(element); },
442
- tooltip: { tooltipText: function (element) { return element.AttachmentType == AttachmentType.FILE ? _this.downloadLabel : _this.openLinkLabel; }, tooltipPosition: this.downloadTooltipPosition }
443
- },
464
+ tooltip: {
465
+ tooltipText: function (element) {
466
+ return element.AttachmentType == AttachmentType.FILE ? _this.downloadLabel : _this.openLinkLabel;
467
+ },
468
+ tooltipPosition: this.downloadTooltipPosition
469
+ }
470
+ }
444
471
  ]
445
472
  };
446
473
  var inlinePreviewColumn = {
447
- key: "InlinePreview", display: this.previewLabel,
474
+ key: "InlinePreview",
475
+ display: this.previewLabel,
448
476
  type: TypeColumn.ExternalTemplate,
449
477
  externalTemplate: this.inlinePreviewTemplate,
450
478
  styles: { flex: "0 0 10%" }
@@ -487,7 +515,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
487
515
  */
488
516
  EqpAttachmentsComponent.prototype.viewAttachment = function (attachment) {
489
517
  if (attachment.AttachmentType == AttachmentType.LINK) {
490
- window.open(attachment.FilePath, '_blank');
518
+ window.open(attachment.FilePath, "_blank");
491
519
  return;
492
520
  }
493
521
  if (attachment.FileDataBase64 && attachment.FileContentType && attachment.FileName) {
@@ -531,8 +559,8 @@ var EqpAttachmentsComponent = /** @class */ (function () {
531
559
  this.dialofRefAddAttachment = this.dialog.open(this.dialogAddAttachment, {
532
560
  disableClose: true,
533
561
  hasBackdrop: true,
534
- width: '60%',
535
- maxHeight: '80%'
562
+ width: "60%",
563
+ maxHeight: "80%"
536
564
  });
537
565
  };
538
566
  EqpAttachmentsComponent.prototype.createAttachmentForm = function () {
@@ -571,7 +599,10 @@ var EqpAttachmentsComponent = /** @class */ (function () {
571
599
  }
572
600
  }
573
601
  else {
574
- return this.newMultipleAttachments.filter(function (p) { return (p.AttachmentType == AttachmentType.FILE && !p.FileDataBase64) || (p.AttachmentType == AttachmentType.LINK && !p.FilePath); }).length > 0;
602
+ return (this.newMultipleAttachments.filter(function (p) {
603
+ return (p.AttachmentType == AttachmentType.FILE && !p.FileDataBase64) ||
604
+ (p.AttachmentType == AttachmentType.LINK && !p.FilePath);
605
+ }).length > 0);
575
606
  }
576
607
  };
577
608
  EqpAttachmentsComponent.prototype.confirmAddAttachment = function () {
@@ -618,8 +649,12 @@ var EqpAttachmentsComponent = /** @class */ (function () {
618
649
  }
619
650
  if (!(this.getAttachmentEndpoint && this.selectedAttachment.IsImage && !this.selectedAttachment.FileDataBase64)) return [3 /*break*/, 2];
620
651
  return [4 /*yield*/, this.getAttachmentByID()
621
- .then(function (res) { _this.selectedAttachment.FileDataBase64 = res.FileDataBase64; })
622
- .catch(function (err) { EqpAttachmentDialogService.Error(err); })];
652
+ .then(function (res) {
653
+ _this.selectedAttachment.FileDataBase64 = res.FileDataBase64;
654
+ })
655
+ .catch(function (err) {
656
+ EqpAttachmentDialogService.Error(err);
657
+ })];
623
658
  case 1:
624
659
  _a.sent();
625
660
  _a.label = 2;
@@ -627,7 +662,9 @@ var EqpAttachmentsComponent = /** @class */ (function () {
627
662
  if (this.selectedAttachment.AttachmentType == AttachmentType.LINK) {
628
663
  this.selectedAttachment.TrustedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.selectedAttachment.FilePath);
629
664
  }
630
- else if (this.selectedAttachment.IsImage && !this.selectedAttachment.FileDataBase64 && !this.selectedAttachment.FileThumbnailBase64) {
665
+ else if (this.selectedAttachment.IsImage &&
666
+ !this.selectedAttachment.FileDataBase64 &&
667
+ !this.selectedAttachment.FileThumbnailBase64) {
631
668
  EqpAttachmentDialogService.Info("Impossibile aprire l'anteprima dell'allegato, file mancante.");
632
669
  return [2 /*return*/];
633
670
  }
@@ -646,7 +683,7 @@ var EqpAttachmentsComponent = /** @class */ (function () {
646
683
  }
647
684
  this.dialog.open(this.dialogPreview, {
648
685
  disableClose: true,
649
- hasBackdrop: true,
686
+ hasBackdrop: true
650
687
  });
651
688
  return [2 /*return*/];
652
689
  }
@@ -681,11 +718,11 @@ var EqpAttachmentsComponent = /** @class */ (function () {
681
718
  this.selectedFiles = event.target.files;
682
719
  if (!this.selectedFile)
683
720
  return [2 /*return*/];
684
- //Memorizza i dati per l'allegato
721
+ //Memorizza i dati per l'allegato
685
722
  _a = this;
686
723
  return [4 /*yield*/, this.createAttachmentFromUploadedFile(this.selectedFile, false)];
687
724
  case 1:
688
- //Memorizza i dati per l'allegato
725
+ //Memorizza i dati per l'allegato
689
726
  _a.newAttachment = _b.sent();
690
727
  this.newMultipleAttachments = new Array();
691
728
  this.newMultipleAttachments.push(this.newAttachment);
@@ -753,11 +790,11 @@ var EqpAttachmentsComponent = /** @class */ (function () {
753
790
  switch (_a.label) {
754
791
  case 0:
755
792
  newAttachment = {};
756
- //Memorizza i dati per l'allegato
793
+ //Memorizza i dati per l'allegato
757
794
  newAttachment.AttachmentType = AttachmentType.FILE;
758
795
  newAttachment.FileContentType = currentFile.type;
759
796
  newAttachment.FileName = currentFile.name;
760
- newAttachment.FileExtension = currentFile.name.substr(currentFile.name.lastIndexOf('.') + 1);
797
+ newAttachment.FileExtension = currentFile.name.substr(currentFile.name.lastIndexOf(".") + 1);
761
798
  newAttachment.IsImage = AttachmentHelperService.checkImageFromMimeType(currentFile.type);
762
799
  if (!(getBase64 == true)) return [3 /*break*/, 2];
763
800
  return [4 /*yield*/, this.getBase64FromFile(currentFile)];
@@ -810,9 +847,11 @@ var EqpAttachmentsComponent = /** @class */ (function () {
810
847
  EqpAttachmentsComponent.prototype.checkAcceptedFiles = function () {
811
848
  var e_1, _a;
812
849
  var _this = this;
813
- if ((this.loadMultipleFiles != true && this.selectedFile.type.startsWith("video"))
814
- || (this.loadMultipleFiles == true && __spread(this.selectedFiles).filter(function (p) { return p.type.startsWith("video"); }).length > 0))
815
- return false;
850
+ if (!this.allowVideo) {
851
+ if ((this.loadMultipleFiles != true && this.selectedFile.type.startsWith("video")) ||
852
+ (this.loadMultipleFiles == true && __spread(this.selectedFiles).filter(function (p) { return p.type.startsWith("video"); }).length > 0))
853
+ return false;
854
+ }
816
855
  if (this.acceptedFileTypes == "*")
817
856
  return true;
818
857
  //Verifica che i tipi del file (o dei file) caricati siano coerenti con quelli accettati dalla direttiva
@@ -871,15 +910,15 @@ var EqpAttachmentsComponent = /** @class */ (function () {
871
910
  var image = new Image();
872
911
  image.src = e.target.result;
873
912
  image.onload = function (rs) {
874
- _this.originalHeight = rs.currentTarget['height'];
875
- _this.originalWidth = rs.currentTarget['width'];
913
+ _this.originalHeight = rs.currentTarget["height"];
914
+ _this.originalWidth = rs.currentTarget["width"];
876
915
  if (_this.originalWidth > 1280) {
877
916
  _this.customWidth = 1280;
878
917
  _this.customHeight = Math.round((1280 * _this.originalHeight) / _this.originalWidth);
879
918
  }
880
919
  else {
881
- _this.customHeight = rs.currentTarget['height'];
882
- _this.customWidth = rs.currentTarget['width'];
920
+ _this.customHeight = rs.currentTarget["height"];
921
+ _this.customWidth = rs.currentTarget["width"];
883
922
  }
884
923
  };
885
924
  };
@@ -908,18 +947,18 @@ var EqpAttachmentsComponent = /** @class */ (function () {
908
947
  /**
909
948
  * Comprime l'immagine passando come parametri le options create nell'oggetto sopra, e il file dal reader principale
910
949
  */
911
- imageCompression(file, options).then((function (fileCompressed) {
950
+ imageCompression(file, options).then(function (fileCompressed) {
912
951
  var fileReader = new FileReader();
913
952
  //Faccio la push di ogni file all'interno dell'array di file dell'item da mandare al server
914
953
  fileReader.onload = function () {
915
954
  var resultReader = fileReader.result;
916
- var marker = ';base64,';
955
+ var marker = ";base64,";
917
956
  self.newAttachment.FileDataBase64 = resultReader.substring(resultReader.indexOf(marker) + marker.length);
918
957
  self.showCropImage = false;
919
958
  self.newAttachmentForm.enable();
920
959
  };
921
960
  fileReader.readAsDataURL(fileCompressed);
922
- }));
961
+ });
923
962
  };
924
963
  EqpAttachmentsComponent.prototype.confirmCrop = function () {
925
964
  this.imageCropper.crop();
@@ -928,9 +967,9 @@ var EqpAttachmentsComponent = /** @class */ (function () {
928
967
  * Annulla la selezione del file, svuotando l'input e resettando tutte le proprietà dell'IAttachmentDTO
929
968
  */
930
969
  EqpAttachmentsComponent.prototype.abortFile = function () {
931
- this.imageChangedEvent = '';
970
+ this.imageChangedEvent = "";
932
971
  if (this.imageInput)
933
- this.imageInput.nativeElement.value = '';
972
+ this.imageInput.nativeElement.value = "";
934
973
  this.selectedFile = null;
935
974
  this.selectedFiles = null;
936
975
  this.showCropImage = false;
@@ -1012,6 +1051,9 @@ var EqpAttachmentsComponent = /** @class */ (function () {
1012
1051
  __decorate([
1013
1052
  Input("tablePaginatorSize")
1014
1053
  ], EqpAttachmentsComponent.prototype, "tablePaginatorSize", void 0);
1054
+ __decorate([
1055
+ Input("allowVideo")
1056
+ ], EqpAttachmentsComponent.prototype, "allowVideo", void 0);
1015
1057
  __decorate([
1016
1058
  Input("downloadTooltipPosition")
1017
1059
  ], EqpAttachmentsComponent.prototype, "downloadTooltipPosition", void 0);
@@ -1085,29 +1127,29 @@ var EqpAttachmentsComponent = /** @class */ (function () {
1085
1127
  Output("onComponentLoaded")
1086
1128
  ], EqpAttachmentsComponent.prototype, "onComponentLoaded", void 0);
1087
1129
  __decorate([
1088
- ViewChild('dialogAddAttachment', { static: true })
1130
+ ViewChild("dialogAddAttachment", { static: true })
1089
1131
  ], EqpAttachmentsComponent.prototype, "dialogAddAttachment", void 0);
1090
1132
  __decorate([
1091
- ViewChild('dialogAddMultipleAttachment', { static: true })
1133
+ ViewChild("dialogAddMultipleAttachment", { static: true })
1092
1134
  ], EqpAttachmentsComponent.prototype, "dialogAddMultipleAttachment", void 0);
1093
1135
  __decorate([
1094
1136
  ViewChild(ImageCropperComponent)
1095
1137
  ], EqpAttachmentsComponent.prototype, "imageCropper", void 0);
1096
1138
  __decorate([
1097
- ViewChild('imageInput')
1139
+ ViewChild("imageInput")
1098
1140
  ], EqpAttachmentsComponent.prototype, "imageInput", void 0);
1099
1141
  __decorate([
1100
- ViewChild('attachmentTable', { static: false })
1142
+ ViewChild("attachmentTable", { static: false })
1101
1143
  ], EqpAttachmentsComponent.prototype, "attachmentTable", void 0);
1102
1144
  __decorate([
1103
- ViewChild('inlinePreviewTemplate', { static: true })
1145
+ ViewChild("inlinePreviewTemplate", { static: true })
1104
1146
  ], EqpAttachmentsComponent.prototype, "inlinePreviewTemplate", void 0);
1105
1147
  __decorate([
1106
- ViewChild('dialogPreview', { static: true })
1148
+ ViewChild("dialogPreview", { static: true })
1107
1149
  ], EqpAttachmentsComponent.prototype, "dialogPreview", void 0);
1108
1150
  EqpAttachmentsComponent = __decorate([
1109
1151
  Component({
1110
- selector: 'eqp-attachments',
1152
+ selector: "eqp-attachments",
1111
1153
  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>",
1112
1154
  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
1155
  })