@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
103 lines • 15.5 kB
JavaScript
import { Component, Inject, Input, Optional, ViewChild } from '@angular/core';
import { AbstractBaseDataFieldComponent } from '../base-component/abstract-base-data-field.component';
import { FileUploadMIMEType } from '../file-field/models/file-field';
import { DATA_FIELD_PORTAL_DATA } from './data-field-portal-data-injection-token';
import * as i0 from "@angular/core";
import * as i1 from "../../logger/services/logger.service";
import * as i2 from "../../snack-bar/services/snack-bar.service";
import * as i3 from "@ngx-translate/core";
export class AbstractFileFieldDefaultComponent extends AbstractBaseDataFieldComponent {
_log;
_snackbar;
_translate;
labelWidth;
cutProperty;
/**
* Task mongo string id is binding property from parent component.
*/
taskId;
/**
* File picker element reference from component template that is initialized after view init.
*/
fileUploadEl;
constructor(_log, _snackbar, _translate, dataFieldPortalData) {
super(dataFieldPortalData);
this._log = _log;
this._snackbar = _snackbar;
this._translate = _translate;
}
checkAllowedTypes() {
const files = this.fileUploadEl?.nativeElement?.files;
let bool = true;
for (let i = 0; i < files?.length; i++) {
if (!this.checkTypes(files.item(i).type)) {
this._log.error('File ' + files.item(i).name + ' cannot be uploaded. Its type is not allowed');
this._snackbar.openErrorSnackBar(this._translate.instant('dataField.file.notAllowed', { fileName: files.item(i).name }));
bool = false;
}
}
if (!bool) {
this.fileUploadEl.nativeElement.value = '';
}
return bool;
}
checkTypes(itemType) {
if (this.dataField.allowTypes === undefined || this.dataField.allowTypes === null) {
this._log.debug(`Types are not provided, returning true`);
return true;
}
const type = itemType.includes("/") ? itemType.split("/")[1] : itemType;
if (this.dataField.allowTypes.includes(type)) {
return true;
}
if (this.dataField.allowTypes.includes(FileUploadMIMEType.IMAGE) && itemType.includes("image/")) {
return true;
}
if (this.dataField.allowTypes.includes(FileUploadMIMEType.VIDEO) && itemType.includes("video/")) {
return true;
}
if (this.dataField.allowTypes.includes(FileUploadMIMEType.AUDIO) && itemType.includes("audio/")) {
return true;
}
return false;
}
getCutProperty(label) {
if (this.labelWidth !== label.offsetWidth) {
this.labelWidth = label.offsetWidth;
const calculatedWidth = 'calc(0.5em + ' + label.offsetWidth / 4 * 3 + 'px)';
this.cutProperty = `polygon(0 0, 0 100%, 100% 100%, 100% 0%, ${calculatedWidth} 0, ${calculatedWidth} 3px, 0.5em 3px, 0.5em 0)`;
}
return this.cutProperty;
}
resolveParentTaskId() {
return !!this.dataField.parentTaskId ? this.dataField.parentTaskId : this.taskId;
}
resolveMaxSizeMessage() {
if (this.dataField?.component?.properties?.maxSizeMessage) {
this._snackbar.openErrorSnackBar(this._translate.instant(this.dataField?.component?.properties?.maxSizeMessage));
}
else {
this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.maxFilesSizeExceeded') + this.dataField.maxUploadSizeInBytes * 0.000001 + 'MB');
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractFileFieldDefaultComponent, deps: [{ token: i1.LoggerService }, { token: i2.SnackBarService }, { token: i3.TranslateService }, { token: DATA_FIELD_PORTAL_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractFileFieldDefaultComponent, selector: "ncc-abstract-file-field-default-component", inputs: { taskId: "taskId" }, viewQueries: [{ propertyName: "fileUploadEl", first: true, predicate: ["fileUploadInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractFileFieldDefaultComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-file-field-default-component',
template: ''
}]
}], ctorParameters: () => [{ type: i1.LoggerService }, { type: i2.SnackBarService }, { type: i3.TranslateService }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [DATA_FIELD_PORTAL_DATA]
}] }], propDecorators: { taskId: [{
type: Input
}], fileUploadEl: [{
type: ViewChild,
args: ['fileUploadInput']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmlsZS1maWVsZC1kZWZhdWx0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWZpbGUtZmllbGQtZGVmYXVsdC1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFDcEcsT0FBTyxFQUFZLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLHNCQUFzQixFQUFzQixNQUFNLDBDQUEwQyxDQUFDOzs7OztBQVVyRyxNQUFNLE9BQWdCLGlDQUF1RSxTQUFRLDhCQUFpQztJQWFsRztJQUNBO0lBQ0E7SUFieEIsVUFBVSxDQUFTO0lBQ3BCLFdBQVcsQ0FBUztJQUMzQjs7T0FFRztJQUNhLE1BQU0sQ0FBUztJQUMvQjs7T0FFRztJQUNrQyxZQUFZLENBQStCO0lBRWhGLFlBQWdDLElBQW1CLEVBQ25CLFNBQTBCLEVBQzFCLFVBQTRCLEVBQ00sbUJBQTJDO1FBQ3pHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBSkMsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtJQUc1RCxDQUFDO0lBRVMsaUJBQWlCO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUN0RCxJQUFJLElBQUksR0FBWSxJQUFJLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FB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QUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JGLENBQUM7SUFFUyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDcEg7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUM3SCxDQUFDO1NBQ0w7SUFDTCxDQUFDO3dHQTlFaUIsaUNBQWlDLDhHQWdCVCxzQkFBc0I7NEZBaEI5QyxpQ0FBaUMsdVBBRnpDLEVBQUU7OzRGQUVNLGlDQUFpQztrQkFKdEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkNBQTJDO29CQUNyRCxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBaUIwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQjt5Q0FUaEQsTUFBTTtzQkFBckIsS0FBSztnQkFJK0IsWUFBWTtzQkFBaEQsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0QmFzZURhdGFGaWVsZENvbXBvbmVudH0gZnJvbSAnLi4vYmFzZS1jb21wb25lbnQvYWJzdHJhY3QtYmFzZS1kYXRhLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQge0ZpbGVGaWVsZCwgRmlsZVVwbG9hZE1JTUVUeXBlfSBmcm9tICcuLi9maWxlLWZpZWxkL21vZGVscy9maWxlLWZpZWxkJztcbmltcG9ydCB7REFUQV9GSUVMRF9QT1JUQUxfREFUQSwgRGF0YUZpZWxkUG9ydGFsRGF0YX0gZnJvbSAnLi9kYXRhLWZpZWxkLXBvcnRhbC1kYXRhLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ZpbGVMaXN0RmllbGR9IGZyb20gJy4uL2ZpbGUtbGlzdC1maWVsZC9tb2RlbHMvZmlsZS1saXN0LWZpZWxkJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtZmlsZS1maWVsZC1kZWZhdWx0LWNvbXBvbmVudCcsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUZpZWxkRGVmYXVsdENvbXBvbmVudDxUIGV4dGVuZHMgRmlsZUZpZWxkIHwgRmlsZUxpc3RGaWVsZD4gZXh0ZW5kcyBBYnN0cmFjdEJhc2VEYXRhRmllbGRDb21wb25lbnQ8VD4ge1xuXG4gICAgcHJpdmF0ZSBsYWJlbFdpZHRoOiBudW1iZXI7XG4gICAgcHVibGljIGN1dFByb3BlcnR5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGFzayBtb25nbyBzdHJpbmcgaWQgaXMgYmluZGluZyBwcm9wZXJ0eSBmcm9tIHBhcmVudCBjb21wb25lbnQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHRhc2tJZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEZpbGUgcGlja2VyIGVsZW1lbnQgcmVmZXJlbmNlIGZyb20gY29tcG9uZW50IHRlbXBsYXRlIHRoYXQgaXMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdmlldyBpbml0LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRJbnB1dCcpIHB1YmxpYyBmaWxlVXBsb2FkRWw6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tiYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFUQV9GSUVMRF9QT1JUQUxfREFUQSkgZGF0YUZpZWxkUG9ydGFsRGF0YTogRGF0YUZpZWxkUG9ydGFsRGF0YTxUPikge1xuICAgICAgICBzdXBlcihkYXRhRmllbGRQb3J0YWxEYXRhKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tBbGxvd2VkVHlwZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5maWxlVXBsb2FkRWw/Lm5hdGl2ZUVsZW1lbnQ/LmZpbGVzO1xuICAgICAgICBsZXQgYm9vbDogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tUeXBlcyhmaWxlcy5pdGVtKGkpLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlICcgKyBmaWxlcy5pdGVtKGkpLm5hbWUgKyAnIGNhbm5vdCBiZSB1cGxvYWRlZC4gSXRzIHR5cGUgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLmZpbGUubm90QWxsb3dlZCcsIHtmaWxlTmFtZTogZmlsZXMuaXRlbShpKS5uYW1lfSkpO1xuICAgICAgICAgICAgICAgIGJvb2wgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJvb2wpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm9vbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tUeXBlcyhpdGVtVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFGaWVsZC5hbGxvd1R5cGVzID09PSB1bmRlZmluZWQgfHwgdGhpcy5kYXRhRmllbGQuYWxsb3dUeXBlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBUeXBlcyBhcmUgbm90IHByb3ZpZGVkLCByZXR1cm5pbmcgdHJ1ZWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZSA9IGl0ZW1UeXBlLmluY2x1ZGVzKFwiL1wiKSA/IGl0ZW1UeXBlLnNwbGl0KFwiL1wiKVsxXSA6IGl0ZW1UeXBlO1xuICAgICAgICBpZiAodGhpcy5kYXRhRmllbGQuYWxsb3dUeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YUZpZWxkLmFsbG93VHlwZXMuaW5jbHVkZXMoRmlsZVVwbG9hZE1JTUVUeXBlLklNQUdFKSAmJiBpdGVtVHlwZS5pbmNsdWRlcyhcImltYWdlL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YUZpZWxkLmFsbG93VHlwZXMuaW5jbHVkZXMoRmlsZVVwbG9hZE1JTUVUeXBlLlZJREVPKSAmJiBpdGVtVHlwZS5pbmNsdWRlcyhcInZpZGVvL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YUZpZWxkLmFsbG93VHlwZXMuaW5jbHVkZXMoRmlsZVVwbG9hZE1JTUVUeXBlLkFVRElPKSAmJiBpdGVtVHlwZS5pbmNsdWRlcyhcImF1ZGlvL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXRQcm9wZXJ0eShsYWJlbCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggIT09IGxhYmVsLm9mZnNldFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsV2lkdGggPSBsYWJlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRXaWR0aCA9ICdjYWxjKDAuNWVtICsgJyArIGxhYmVsLm9mZnNldFdpZHRoIC8gNCAqIDMgKyAncHgpJztcbiAgICAgICAgICAgIHRoaXMuY3V0UHJvcGVydHkgPSBgcG9seWdvbigwIDAsIDAgMTAwJSwgMTAwJSAxMDAlLCAxMDAlIDAlLCAke2NhbGN1bGF0ZWRXaWR0aH0gMCwgJHtjYWxjdWxhdGVkV2lkdGh9IDNweCwgMC41ZW0gM3B4LCAwLjVlbSAwKWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3V0UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRUYXNrSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhRmllbGQucGFyZW50VGFza0lkID8gdGhpcy5kYXRhRmllbGQucGFyZW50VGFza0lkIDogdGhpcy50YXNrSWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNYXhTaXplTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUZpZWxkPy5jb21wb25lbnQ/LnByb3BlcnRpZXM/Lm1heFNpemVNZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLmRhdGFGaWVsZD8uY29tcG9uZW50Py5wcm9wZXJ0aWVzPy5tYXhTaXplTWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbkVycm9yU25hY2tCYXIoXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5zbmFja0Jhci5tYXhGaWxlc1NpemVFeGNlZWRlZCcpICsgdGhpcy5kYXRhRmllbGQubWF4VXBsb2FkU2l6ZUluQnl0ZXMgKiAwLjAwMDAwMSArICdNQidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=