@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.
- package/README.md +1 -0
- package/bundles/eqproject-eqp-attachments.umd.js +104 -61
- 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 +104 -66
- package/esm5/lib/eqp-attachments.component.js +106 -64
- package/fesm2015/eqproject-eqp-attachments.js +103 -65
- package/fesm2015/eqproject-eqp-attachments.js.map +1 -1
- package/fesm5/eqproject-eqp-attachments.js +105 -63
- package/fesm5/eqproject-eqp-attachments.js.map +1 -1
- package/lib/eqp-attachments.component.d.ts +13 -9
- package/package.json +1 -1
|
@@ -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 {
|
|
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) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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 = {
|
|
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(
|
|
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",
|
|
428
|
-
|
|
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",
|
|
436
|
-
|
|
448
|
+
key: "attachment",
|
|
449
|
+
display: "",
|
|
450
|
+
type: TypeColumn.SimpleAction,
|
|
451
|
+
styles: { flex: "0 0 6%" },
|
|
437
452
|
actions: [
|
|
438
453
|
{
|
|
439
|
-
name:
|
|
440
|
-
|
|
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: {
|
|
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",
|
|
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,
|
|
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:
|
|
535
|
-
maxHeight:
|
|
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) {
|
|
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) {
|
|
622
|
-
.
|
|
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 &&
|
|
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(
|
|
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 (
|
|
814
|
-
|
|
815
|
-
|
|
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[
|
|
875
|
-
_this.originalWidth = rs.currentTarget[
|
|
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[
|
|
882
|
-
_this.customWidth = rs.currentTarget[
|
|
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(
|
|
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 =
|
|
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(
|
|
1130
|
+
ViewChild("dialogAddAttachment", { static: true })
|
|
1089
1131
|
], EqpAttachmentsComponent.prototype, "dialogAddAttachment", void 0);
|
|
1090
1132
|
__decorate([
|
|
1091
|
-
ViewChild(
|
|
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(
|
|
1139
|
+
ViewChild("imageInput")
|
|
1098
1140
|
], EqpAttachmentsComponent.prototype, "imageInput", void 0);
|
|
1099
1141
|
__decorate([
|
|
1100
|
-
ViewChild(
|
|
1142
|
+
ViewChild("attachmentTable", { static: false })
|
|
1101
1143
|
], EqpAttachmentsComponent.prototype, "attachmentTable", void 0);
|
|
1102
1144
|
__decorate([
|
|
1103
|
-
ViewChild(
|
|
1145
|
+
ViewChild("inlinePreviewTemplate", { static: true })
|
|
1104
1146
|
], EqpAttachmentsComponent.prototype, "inlinePreviewTemplate", void 0);
|
|
1105
1147
|
__decorate([
|
|
1106
|
-
ViewChild(
|
|
1148
|
+
ViewChild("dialogPreview", { static: true })
|
|
1107
1149
|
], EqpAttachmentsComponent.prototype, "dialogPreview", void 0);
|
|
1108
1150
|
EqpAttachmentsComponent = __decorate([
|
|
1109
1151
|
Component({
|
|
1110
|
-
selector:
|
|
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
|
})
|