@eqproject/eqp-attachments 0.1.1 → 0.1.5
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 +5 -1
- package/bundles/eqproject-eqp-attachments.umd.js +111 -11
- 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 +83 -12
- package/esm2015/lib/helpers/attachment.helper.js +19 -1
- package/esm5/lib/eqp-attachments.component.js +95 -13
- package/esm5/lib/helpers/attachment.helper.js +19 -1
- package/fesm2015/eqproject-eqp-attachments.js +100 -11
- package/fesm2015/eqproject-eqp-attachments.js.map +1 -1
- package/fesm5/eqproject-eqp-attachments.js +112 -12
- package/fesm5/eqproject-eqp-attachments.js.map +1 -1
- package/lib/eqp-attachments.component.d.ts +25 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Table of contents
|
|
|
12
12
|
|
|
13
13
|
## Getting started
|
|
14
14
|
This package allows the upload/download of one or multiple attachments (one at a time).
|
|
15
|
-
The attachments can be files or links.
|
|
15
|
+
The attachments can be files or links (except video files, this feature will be added later).
|
|
16
16
|
Has the possibility to render a preview for image files inside the eqp-table (an inline preview).
|
|
17
17
|
Can open a dialog containing a preview of the uploaded IAttachmentDTO (whatever it is - a document, an image or a link).
|
|
18
18
|
|
|
@@ -58,6 +58,7 @@ export class AppModule {}
|
|
|
58
58
|
| [attachmentsColumns] | `Array<ConfigColumn>` | `null` | no | Has effect only if `[multipleAttachment]="true"`. Columns configuration for the eqp-table showing the list of IAttachmentDTO.
|
|
59
59
|
| [emptyTableMessage] | `string` | `"Nessun dato trovato"` | no | Has effect only if `[multipleAttachment]="true"`. Sets the message to show if the eqp-table contains no elements. |
|
|
60
60
|
| [allowOnlyImages] | `boolean` | `false` | no | If TRUE allows the user to upload only image files of the following types: `["image/bmp", "image/gif", "image/jpeg", "image/tiff", "image/png"]`. If FALSE the user can upload a file of any type. |
|
|
61
|
+
| [acceptedFileTypes] | `string` | `*` | no | Sets the `accept` input attribute describing which file type to allow. |
|
|
61
62
|
| [isDisabled] | `boolean` | `false` | no | If TRUE it disables the buttons to add a new IAttachmentDTO. |
|
|
62
63
|
| [showInlinePreview] | `boolean` | `true`| no | Has effect only if `[multipleAttachment]="true"` and `attachmentsColumns` are not defined. Adds a column to the eqp-table to show a small preview of the IAttachmentDTO (if it is an image, otherwise an icon based on the content type of the file). With a click on it opens a dialog to view the selected attachment. |
|
|
63
64
|
| [getAttachmentEndpoint] | `string` | null | no | Sets the endpoint to call to get the complete IAttachmentDTO to be displayed inside the preview dialog. Used only for images with the `FileDataBase64` property missing (in any other case the `FilePath` property is used to render the preview). The directive makes a POST request without any token and with the selected IAttachmentDTO in the body. |
|
|
@@ -79,6 +80,9 @@ export class AppModule {}
|
|
|
79
80
|
| [deleteDialogTitle] | `string` | `"Sei sicuro di voler procedere?"` | no | Sets the confirm dialog title when deleting an IAttachmentDTO. |
|
|
80
81
|
| [deleteDialogMessage] | `string` | `"Sei sicuro di voler cancellare quest'allegato?"` | no | Sets the confirm dialog message when deleting an IAttachmentDTO. |
|
|
81
82
|
| [noImageSelectedErrorMessage] | `string` | `"Non è possibile selezionare un file che non sia un'immagine"` | no | Has effect only if `[allowOnlyImages]="true"`. Sets the error dialog message when the user tries to upload a file which is not an image. |
|
|
83
|
+
| [wrongTypeSelectedErrorMessage] | `string` | `"Non è possibile caricare il file selezionato."` | no | Sets the error dialog message when user tries to upload a not allowed file . |
|
|
84
|
+
| [videoPreviewErrorMessage] | `string` | `Impossibile aprire l'anteprima di un file video.` | no | Sets the warning dialog merrage when the user tries to open the preview of a video file. |
|
|
85
|
+
| [audioPreviewErrorMessage] | `string` | `Impossibile aprire l'anteprima di un file audio.` | no | Sets the warning dialog merrage when the user tries to open the preview of an audio file. |
|
|
82
86
|
|
|
83
87
|
|
|
84
88
|
### Outputs
|
|
@@ -262,6 +262,24 @@
|
|
|
262
262
|
"jpeg": "fas fa-file-image",
|
|
263
263
|
"png": "fas fa-file-image",
|
|
264
264
|
"bmp": "fas fa-file-image",
|
|
265
|
+
"mkv": "fas fa-file-video",
|
|
266
|
+
"flv": "fas fa-file-video",
|
|
267
|
+
"gif": "fas fa-file-video",
|
|
268
|
+
"gifv": "fas fa-file-video",
|
|
269
|
+
"avi": "fas fa-file-video",
|
|
270
|
+
"wmv": "fas fa-file-video",
|
|
271
|
+
"mp4": "fas fa-file-video",
|
|
272
|
+
"m4p": "fas fa-file-video",
|
|
273
|
+
"m4v": "fas fa-file-video",
|
|
274
|
+
"mpg": "fas fa-file-video",
|
|
275
|
+
"mp2": "fas fa-file-video",
|
|
276
|
+
"mpeg": "fas fa-file-video",
|
|
277
|
+
"mpe": "fas fa-file-video",
|
|
278
|
+
"mpv": "fas fa-file-video",
|
|
279
|
+
"m2v": "fas fa-file-video",
|
|
280
|
+
"3gp": "fas fa-file-video",
|
|
281
|
+
"3g2": "fas fa-file-video",
|
|
282
|
+
"mp3": "fas fa-file-audio",
|
|
265
283
|
};
|
|
266
284
|
AttachmentHelperService.ɵprov = core.ɵɵdefineInjectable({ factory: function AttachmentHelperService_Factory() { return new AttachmentHelperService(); }, token: AttachmentHelperService, providedIn: "root" });
|
|
267
285
|
AttachmentHelperService = __decorate([
|
|
@@ -440,7 +458,7 @@
|
|
|
440
458
|
/**
|
|
441
459
|
* Mostra/nasconde la colonna per visualizzare l'anteprima dei file nella tabella (caso multipleAtatchments = true).
|
|
442
460
|
*/
|
|
443
|
-
this.showInlinePreview =
|
|
461
|
+
this.showInlinePreview = false;
|
|
444
462
|
/**
|
|
445
463
|
* Endpoint da chiamare per recueprare l'IAttachmentDTO completo da vedere nell'anteprima. La chiamata sarà in POST e nel body
|
|
446
464
|
* conterrà l'IAttachmentDTO selezionato dall'utente.
|
|
@@ -477,7 +495,10 @@
|
|
|
477
495
|
this.eqpTableSearchText = "Cerca";
|
|
478
496
|
this.deleteDialogTitle = null;
|
|
479
497
|
this.deleteDialogMessage = "Sei sicuro di voler cancellare quest'allegato?";
|
|
480
|
-
this.noImageSelectedErrorMessage = "Non è possibile selezionare un file che non sia un'immagine";
|
|
498
|
+
this.noImageSelectedErrorMessage = "Non è possibile selezionare un file che non sia un'immagine.";
|
|
499
|
+
this.wrongTypeSelectedErrorMessage = "Non è possibile caricare il file selezionato.";
|
|
500
|
+
this.videoPreviewErrorMessage = "Impossibile aprire l'anteprima di un file video.";
|
|
501
|
+
this.audioPreviewErrorMessage = "Impossibile aprire l'anteprima di un file audio.";
|
|
481
502
|
//#endregion
|
|
482
503
|
//#region @Output del componente
|
|
483
504
|
/**
|
|
@@ -498,7 +519,6 @@
|
|
|
498
519
|
this.attachmentType = exports.AttachmentType;
|
|
499
520
|
this.selectedFile = null;
|
|
500
521
|
this.showCropImage = false;
|
|
501
|
-
this.acceptedFileTypes = "*";
|
|
502
522
|
//#endregion
|
|
503
523
|
//#region Proprietà per gestione ridimensionamento file di tipo image
|
|
504
524
|
this.imageChangedEvent = '';
|
|
@@ -509,10 +529,11 @@
|
|
|
509
529
|
}
|
|
510
530
|
EqpAttachmentsComponent.prototype.ngOnInit = function () {
|
|
511
531
|
//Se è stata richiesta la gestione delle sole immagini allora imposta il filtro per le estensioni possibili da caricare
|
|
512
|
-
if (this.
|
|
513
|
-
this.
|
|
514
|
-
|
|
515
|
-
|
|
532
|
+
if (!this.acceptedFileTypes)
|
|
533
|
+
if (this.allowOnlyImages == true)
|
|
534
|
+
this.acceptedFileTypes = "image/*";
|
|
535
|
+
else
|
|
536
|
+
this.acceptedFileTypes = "*";
|
|
516
537
|
//Se è stata richiesta la gestione multipla degli allegati allora configura l'eqp-table
|
|
517
538
|
if (this.multipleAttachment == true && (!this.attachmentsColumns || this.attachmentsColumns.length == 0)) {
|
|
518
539
|
this.configureColumns();
|
|
@@ -523,6 +544,10 @@
|
|
|
523
544
|
// if (!this.compressionOptions || !this.compressionOptions.maxSizeMB || !this.compressionOptions.maxWidthOrHeight)
|
|
524
545
|
// this.compressionOptions = { maxSizeMB: 0.5, maxWidthOrHeight: 1920, useWebWorker: true };
|
|
525
546
|
};
|
|
547
|
+
EqpAttachmentsComponent.prototype.reloadData = function () {
|
|
548
|
+
if (this.attachmentTable)
|
|
549
|
+
this.attachmentTable.reloadDatatable();
|
|
550
|
+
};
|
|
526
551
|
EqpAttachmentsComponent.prototype.checkAttachmentImage = function () {
|
|
527
552
|
this.attachmentsList.forEach(function (a) {
|
|
528
553
|
a.IsImage = AttachmentHelperService.checkImageFromMimeType(a.FileContentType);
|
|
@@ -607,7 +632,7 @@
|
|
|
607
632
|
var source = "data:" + attachment.FileContentType + ";base64," + attachment.FileDataBase64;
|
|
608
633
|
var link = document.createElement("a");
|
|
609
634
|
link.href = source;
|
|
610
|
-
link.download =
|
|
635
|
+
link.download = "" + attachment.FileName;
|
|
611
636
|
link.click();
|
|
612
637
|
}
|
|
613
638
|
else {
|
|
@@ -655,6 +680,19 @@
|
|
|
655
680
|
this.newAttachmentForm.reset();
|
|
656
681
|
this.dialofRefAddAttachment.close();
|
|
657
682
|
};
|
|
683
|
+
/**
|
|
684
|
+
* In base al tipo di allegato controlla se disabilitare o meno il pulsante per salvare.
|
|
685
|
+
* Funzione usata nel [disable] del pulsante "Salva" del dialog per l'aggiunta di un allegato.
|
|
686
|
+
* @returns
|
|
687
|
+
*/
|
|
688
|
+
EqpAttachmentsComponent.prototype.disableSave = function () {
|
|
689
|
+
if (this.newAttachment.AttachmentType == exports.AttachmentType.FILE) {
|
|
690
|
+
return !this.newAttachment.FileDataBase64;
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
return !this.newAttachment.FilePath;
|
|
694
|
+
}
|
|
695
|
+
};
|
|
658
696
|
EqpAttachmentsComponent.prototype.confirmAddAttachment = function () {
|
|
659
697
|
if (this.newAttachment.AttachmentType == exports.AttachmentType.LINK && !this.newAttachment.FileName)
|
|
660
698
|
this.newAttachment.FileName = this.newAttachment.FilePath;
|
|
@@ -666,6 +704,11 @@
|
|
|
666
704
|
this.localEditedAttachments.emit(this.attachmentsList);
|
|
667
705
|
this.dialofRefAddAttachment.close();
|
|
668
706
|
};
|
|
707
|
+
/**
|
|
708
|
+
* Apre il dialog per l'anteprima dell'allegato selezionato.
|
|
709
|
+
* @param row
|
|
710
|
+
* @returns
|
|
711
|
+
*/
|
|
669
712
|
EqpAttachmentsComponent.prototype.openPreviewDialog = function (row) {
|
|
670
713
|
return __awaiter(this, void 0, void 0, function () {
|
|
671
714
|
var _this = this;
|
|
@@ -673,6 +716,16 @@
|
|
|
673
716
|
switch (_a.label) {
|
|
674
717
|
case 0:
|
|
675
718
|
this.selectedAttachment = JSON.parse(JSON.stringify(row));
|
|
719
|
+
if (this.selectedAttachment.AttachmentType == exports.AttachmentType.FILE) {
|
|
720
|
+
if (this.selectedAttachment.FileContentType.startsWith("video")) {
|
|
721
|
+
EqpAttachmentDialogService.Warning(this.videoPreviewErrorMessage);
|
|
722
|
+
return [2 /*return*/];
|
|
723
|
+
}
|
|
724
|
+
else if (this.selectedAttachment.FileContentType.startsWith("audio")) {
|
|
725
|
+
EqpAttachmentDialogService.Warning(this.audioPreviewErrorMessage);
|
|
726
|
+
return [2 /*return*/];
|
|
727
|
+
}
|
|
728
|
+
}
|
|
676
729
|
if (!(this.getAttachmentEndpoint && this.selectedAttachment.IsImage && !this.selectedAttachment.FileDataBase64)) return [3 /*break*/, 2];
|
|
677
730
|
return [4 /*yield*/, this.getAttachmentByID()
|
|
678
731
|
.then(function (res) { _this.selectedAttachment.FileDataBase64 = res.FileDataBase64; })
|
|
@@ -741,10 +794,15 @@
|
|
|
741
794
|
if (this.allowOnlyImages == true && this.newAttachment.IsImage != true) {
|
|
742
795
|
EqpAttachmentDialogService.Error(this.noImageSelectedErrorMessage);
|
|
743
796
|
this.abortFile();
|
|
797
|
+
return [2 /*return*/];
|
|
798
|
+
}
|
|
799
|
+
else if (!this.checkAcceptedFiles()) {
|
|
800
|
+
EqpAttachmentDialogService.Error(this.wrongTypeSelectedErrorMessage);
|
|
801
|
+
this.abortFile();
|
|
802
|
+
return [2 /*return*/];
|
|
744
803
|
}
|
|
745
804
|
if (!(this.newAttachment.IsImage == true)) return [3 /*break*/, 1];
|
|
746
805
|
this.getImageDimensions(event.target.files[0]);
|
|
747
|
-
console.log(this.customHeight, this.customWidth);
|
|
748
806
|
//Mostra il croppie e disabilita la form finchè non termina la modifica dell'immagine
|
|
749
807
|
this.newAttachmentForm.disable();
|
|
750
808
|
this.newAttachmentForm.controls["customWidth"].enable();
|
|
@@ -765,6 +823,36 @@
|
|
|
765
823
|
});
|
|
766
824
|
});
|
|
767
825
|
};
|
|
826
|
+
/**
|
|
827
|
+
* Controlla se il file che si sta caricando è supportato dal sistema.
|
|
828
|
+
* @returns
|
|
829
|
+
*/
|
|
830
|
+
EqpAttachmentsComponent.prototype.checkAcceptedFiles = function () {
|
|
831
|
+
var e_1, _a;
|
|
832
|
+
if (this.selectedFile.type.startsWith("video"))
|
|
833
|
+
return false;
|
|
834
|
+
if (this.acceptedFileTypes == "*")
|
|
835
|
+
return true;
|
|
836
|
+
var accepted = this.acceptedFileTypes.includes(this.selectedFile.type);
|
|
837
|
+
if (!accepted) {
|
|
838
|
+
try {
|
|
839
|
+
for (var _b = __values(this.acceptedFileTypes.split(",").filter(function (t) { return t.includes("*"); })), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
840
|
+
var t = _c.value;
|
|
841
|
+
accepted = this.selectedFile.type.startsWith(t.split("*")[0]);
|
|
842
|
+
if (accepted)
|
|
843
|
+
break;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
847
|
+
finally {
|
|
848
|
+
try {
|
|
849
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
850
|
+
}
|
|
851
|
+
finally { if (e_1) throw e_1.error; }
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
return accepted;
|
|
855
|
+
};
|
|
768
856
|
EqpAttachmentsComponent.prototype.getImageDimensions = function (img) {
|
|
769
857
|
var _this = this;
|
|
770
858
|
var reader = new FileReader();
|
|
@@ -877,6 +965,9 @@
|
|
|
877
965
|
__decorate([
|
|
878
966
|
core.Input("allowOnlyImages")
|
|
879
967
|
], EqpAttachmentsComponent.prototype, "allowOnlyImages", void 0);
|
|
968
|
+
__decorate([
|
|
969
|
+
core.Input("acceptedFileTypes")
|
|
970
|
+
], EqpAttachmentsComponent.prototype, "acceptedFileTypes", void 0);
|
|
880
971
|
__decorate([
|
|
881
972
|
core.Input("isDisabled")
|
|
882
973
|
], EqpAttachmentsComponent.prototype, "isDisabled", void 0);
|
|
@@ -940,6 +1031,15 @@
|
|
|
940
1031
|
__decorate([
|
|
941
1032
|
core.Input("noImageSelectedErrorMessage")
|
|
942
1033
|
], EqpAttachmentsComponent.prototype, "noImageSelectedErrorMessage", void 0);
|
|
1034
|
+
__decorate([
|
|
1035
|
+
core.Input("wrongTypeSelectedErrorMessage")
|
|
1036
|
+
], EqpAttachmentsComponent.prototype, "wrongTypeSelectedErrorMessage", void 0);
|
|
1037
|
+
__decorate([
|
|
1038
|
+
core.Input("videoPreviewErrorMessage")
|
|
1039
|
+
], EqpAttachmentsComponent.prototype, "videoPreviewErrorMessage", void 0);
|
|
1040
|
+
__decorate([
|
|
1041
|
+
core.Input("videoPreviewErrorMessage")
|
|
1042
|
+
], EqpAttachmentsComponent.prototype, "audioPreviewErrorMessage", void 0);
|
|
943
1043
|
__decorate([
|
|
944
1044
|
core.Output()
|
|
945
1045
|
], EqpAttachmentsComponent.prototype, "localEditedAttachments", void 0);
|
|
@@ -970,8 +1070,8 @@
|
|
|
970
1070
|
EqpAttachmentsComponent = __decorate([
|
|
971
1071
|
core.Component({
|
|
972
1072
|
selector: 'eqp-attachments',
|
|
973
|
-
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 <button class=\"btn btn-primary mb-4 mr-5 eqp-attachments-add-btn\" mat-raised-button color=\"primary\"\r\n type=\"button\" [matMenuTriggerFor]=\"attachmentTypeMenu\" [disabled]=\"isDisabled\">\r\n <mat-icon>add</mat-icon><span> {{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 </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 [data]=\"attachmentsList\" [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 <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=\"!attachmentsList || attachmentsList.length == 0 || (attachmentsList.length > 0 && !attachmentsList[0])\">\r\n <mat-icon>cloud_upload</mat-icon><span> {{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\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>download</mat-icon> {{attachmentsList[0].AttachmentType == AttachmentType.FILE ? downloadLabel :\r\n 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 *ngIf=\"attachmentsList && attachmentsList.length > 0 && attachmentsList[0]\" color=\"primary\">\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\" style=\"max-height: 70vh !important;\">\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\" name=\"file_attachment\" type=\"file\"\r\n (change)=\"onFileInputChange($event)\" [accept]=\"acceptedFileTypes\" />\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=\"!newAttachment.FileDataBase64\">\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=\"newAttachment.FileDataBase64\" 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\">\r\n <mat-form-field>\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>\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 <div class=\"row\"\r\n *ngIf=\"showCropImage != true && newAttachment.FileDataBase64 && newAttachment.IsImage == true\"\r\n 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 <div class=\"row mt-2 mb-2\" *ngIf=\"showCropImage == true\">\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\" *ngIf=\"showCropImage == true\">\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\" *ngIf=\"showCropImage == true\">\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\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 || newAttachmentForm?.disabled == true\">\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\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.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.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\" *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\" *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>",
|
|
974
|
-
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}.image-preview{max-width:100%;max-height:100%}.link-preview{width:70vw;height:55vh}"]
|
|
1073
|
+
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 <button class=\"btn btn-primary mb-4 mr-5 eqp-attachments-add-btn\" mat-raised-button color=\"primary\"\r\n type=\"button\" [matMenuTriggerFor]=\"attachmentTypeMenu\" [disabled]=\"isDisabled\">\r\n <mat-icon>add</mat-icon><span> {{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 </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 [data]=\"attachmentsList\" [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 <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=\"!attachmentsList || attachmentsList.length == 0 || (attachmentsList.length > 0 && !attachmentsList[0])\">\r\n <mat-icon>cloud_upload</mat-icon><span> {{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\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\" style=\"max-height: 70vh !important;\">\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\" name=\"file_attachment\" type=\"file\"\r\n (change)=\"onFileInputChange($event)\" [accept]=\"acceptedFileTypes\" />\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=\"!newAttachment.FileDataBase64\">\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=\"newAttachment.FileDataBase64\" 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\">\r\n <mat-form-field>\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>\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 <div class=\"row\"\r\n *ngIf=\"showCropImage != true && newAttachment.FileDataBase64 && newAttachment.IsImage == true\"\r\n 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 <div class=\"row mt-2 mb-2\" *ngIf=\"showCropImage == true\">\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\" *ngIf=\"showCropImage == true\">\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\" *ngIf=\"showCropImage == true\">\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\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 || 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\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.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.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>",
|
|
1074
|
+
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}"]
|
|
975
1075
|
})
|
|
976
1076
|
], EqpAttachmentsComponent);
|
|
977
1077
|
return EqpAttachmentsComponent;
|