UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

120 lines 16.2 kB
import { DataField } from '../../models/abstract-data-field'; import { Subject } from 'rxjs'; import { ComponentPrefixes } from '../../models/component'; import { distinctUntilChanged } from 'rxjs/operators'; /** * Supported types of files a user can select through a file picker. */ export var FileUploadMIMEType; (function (FileUploadMIMEType) { FileUploadMIMEType["IMAGE"] = "image/*"; FileUploadMIMEType["VIDEO"] = "video/*"; FileUploadMIMEType["AUDIO"] = "audio/*"; FileUploadMIMEType["PDF"] = ".pdf"; FileUploadMIMEType["JPG_JPEG"] = ".jpg,.jpeg"; FileUploadMIMEType["XML"] = ".xml"; FileUploadMIMEType["DOC_DOCX"] = ".doc,.docx"; FileUploadMIMEType["XLS_XLSX"] = ".xls,.xlsx"; })(FileUploadMIMEType || (FileUploadMIMEType = {})); /** * Supported types for file preview */ export var FilePreviewType; (function (FilePreviewType) { FilePreviewType[FilePreviewType["pdf"] = 0] = "pdf"; FilePreviewType[FilePreviewType["jpg"] = 1] = "jpg"; FilePreviewType[FilePreviewType["jpeg"] = 2] = "jpeg"; FilePreviewType[FilePreviewType["png"] = 3] = "png"; })(FilePreviewType || (FilePreviewType = {})); /** * Holds information represent file field implements in Petri Net */ export class FileField extends DataField { _maxUploadSizeInBytes; _allowTypes; /** * Specifies the size of all uploaded files in bytes. * * It is an indicator for checking the oversized size in the Petri Net. */ filesSize = 0; /** * Used to forward the result of the upload file backend call to the task content */ _changedFields$; downloaded; set value(value) { if (!this.valueEquality(this._value.getValue(), value) && !this.reverting) { this.changed = true; this.waitingForResponse = true; this.resolvePrevValue(value ?? {}); } this._value.next(value ?? {}); this.reverting = false; } get value() { return this._value.getValue(); } get updated() { return this._update.asObservable(); } getTypedComponentType() { return ComponentPrefixes.FILE + this.getComponentType(); } valueWithoutChange(value) { this.changed = false; this._value.next(value ?? {}); } /** * Create new instance for file field with all his properties. * * Placeholder is a substitute for the value name if not set value. */ constructor(stringId, title, behavior, value, placeholder, description, layout, _maxUploadSizeInBytes, _allowTypes, validations, component, parentTaskId) { super(stringId, title, value, behavior, placeholder, description, layout, validations, component, parentTaskId); this._maxUploadSizeInBytes = _maxUploadSizeInBytes; this._allowTypes = _allowTypes; this._changedFields$ = new Subject(); } get maxUploadSizeInBytes() { return this._maxUploadSizeInBytes; } get allowTypes() { return this._allowTypes instanceof Array ? this._allowTypes.toString() : this._allowTypes; } get changedFields$() { return this._changedFields$.asObservable(); } emitChangedFields(change) { this._changedFields$.next(change); } valueEquality(a, b) { let file = JSON.stringify(a) === JSON.stringify(b); if (a && a.file && b && b.file) { file = a.file.name === b.file.name; } return (!a && !b) || (!!a && !!b && a.name === b.name && file); } registerFormControl(formControl) { if (this.initialized) { throw new Error('Data field can be initialized only once!' + ' Disconnect the previous form control before initializing the data field again!'); } this.formControlRef = formControl; formControl.setValidators(this.resolveFormControlValidators()); this._myValueSubscription = this._value.pipe(distinctUntilChanged(this.valueEquality)).subscribe(newValue => { this.valid = this._determineFormControlValidity(formControl); formControl.setValue(newValue?.name ?? ''); this.update(); }); this.updateFormControlState(formControl); this._initialized$.next(true); this.changed = false; this.waitingForResponse = false; } updateFormControlState(formControl) { this.subscribeToInnerSubjects(formControl); this.update(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvZmlsZS1maWVsZC9tb2RlbHMvZmlsZS1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFJM0QsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQVksaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUlwRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGtCQVNYO0FBVEQsV0FBWSxrQkFBa0I7SUFDMUIsdUNBQWlCLENBQUE7SUFDakIsdUNBQWlCLENBQUE7SUFDakIsdUNBQWlCLENBQUE7SUFDakIsa0NBQVksQ0FBQTtJQUNaLDZDQUF1QixDQUFBO0lBQ3ZCLGtDQUFZLENBQUE7SUFDWiw2Q0FBdUIsQ0FBQTtJQUN2Qiw2Q0FBdUIsQ0FBQTtBQUMzQixDQUFDLEVBVFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQVM3QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN2QixtREFBRyxDQUFBO0lBQ0gsbURBQUcsQ0FBQTtJQUNILHFEQUFJLENBQUE7SUFDSixtREFBRyxDQUFBO0FBQ1AsQ0FBQyxFQUxXLGVBQWUsS0FBZixlQUFlLFFBSzFCO0FBV0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBVSxTQUFRLFNBQXlCO0lBZ0RmO0lBQ2pCO0lBaERwQjs7OztPQUlHO0lBQ0ksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVyQjs7T0FFRztJQUNLLGVBQWUsQ0FBNEI7SUFFNUMsVUFBVSxDQUFVO0lBRTNC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QztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtCZWhhdmlvcn0gZnJvbSAnLi4vLi4vbW9kZWxzL2JlaGF2aW9yJztcbmltcG9ydCB7TGF5b3V0fSBmcm9tICcuLi8uLi9tb2RlbHMvbGF5b3V0JztcbmltcG9ydCB7RmlsZUZpZWxkVmFsdWV9IGZyb20gJy4vZmlsZS1maWVsZC12YWx1ZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb21wb25lbnQsIENvbXBvbmVudFByZWZpeGVzfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VmFsaWRhdGlvbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRzTWFwfSBmcm9tICcuLi8uLi8uLi9ldmVudC9zZXJ2aWNlcy9pbnRlcmZhY2VzL2NoYW5nZWQtZmllbGRzLW1hcCc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogU3VwcG9ydGVkIHR5cGVzIG9mIGZpbGVzIGEgdXNlciBjYW4gc2VsZWN0IHRocm91Z2ggYSBmaWxlIHBpY2tlci5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZVVwbG9hZE1JTUVUeXBlIHtcbiAgICBJTUFHRSA9ICdpbWFnZS8qJyxcbiAgICBWSURFTyA9ICd2aWRlby8qJyxcbiAgICBBVURJTyA9ICdhdWRpby8qJyxcbiAgICBQREYgPSAnLnBkZicsXG4gICAgSlBHX0pQRUcgPSAnLmpwZywuanBlZycsXG4gICAgWE1MID0gJy54bWwnLFxuICAgIERPQ19ET0NYID0gJy5kb2MsLmRvY3gnLFxuICAgIFhMU19YTFNYID0gJy54bHMsLnhsc3gnXG59XG5cbi8qKlxuICogU3VwcG9ydGVkIHR5cGVzIGZvciBmaWxlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGVudW0gRmlsZVByZXZpZXdUeXBlIHtcbiAgICBwZGYsXG4gICAganBnLFxuICAgIGpwZWcsXG4gICAgcG5nXG59XG5cbi8qKlxuICogRXh0ZW5kZWQgc3RydWN0dXJlIGZvciBmaWxlIGJ5IG5hbWUgYW5kIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlVXBsb2FkRGF0YU1vZGVsIHtcbiAgICBmaWxlOiBGaWxlO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBleHRlbnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBIb2xkcyBpbmZvcm1hdGlvbiByZXByZXNlbnQgZmlsZSBmaWVsZCBpbXBsZW1lbnRzIGluIFBldHJpIE5ldFxuICovXG5leHBvcnQgY2xhc3MgRmlsZUZpZWxkIGV4dGVuZHMgRGF0YUZpZWxkPEZpbGVGaWVsZFZhbHVlPiB7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBzaXplIG9mIGFsbCB1cGxvYWRlZCBmaWxlcyBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEl0IGlzIGFuIGluZGljYXRvciBmb3IgY2hlY2tpbmcgdGhlIG92ZXJzaXplZCBzaXplIGluIHRoZSBQZXRyaSBOZXQuXG4gICAgICovXG4gICAgcHVibGljIGZpbGVzU2l6ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGZvcndhcmQgdGhlIHJlc3VsdCBvZiB0aGUgdXBsb2FkIGZpbGUgYmFja2VuZCBjYWxsIHRvIHRoZSB0YXNrIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VkRmllbGRzJDogU3ViamVjdDxDaGFuZ2VkRmllbGRzTWFwPjtcblxuICAgIHB1YmxpYyBkb3dubG9hZGVkOiBib29sZWFuO1xuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBGaWxlRmllbGRWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWVFcXVhbGl0eSh0aGlzLl92YWx1ZS5nZXRWYWx1ZSgpLCB2YWx1ZSkgJiYgIXRoaXMucmV2ZXJ0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy53YWl0aW5nRm9yUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlUHJldlZhbHVlKHZhbHVlID8/IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZS5uZXh0KHZhbHVlID8/IHt9KTtcbiAgICAgICAgdGhpcy5yZXZlcnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogRmlsZUZpZWxkVmFsdWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBnZXQgdXBkYXRlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHlwZWRDb21wb25lbnRUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBDb21wb25lbnRQcmVmaXhlcy5GSUxFICsgdGhpcy5nZXRDb21wb25lbnRUeXBlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlV2l0aG91dENoYW5nZSh2YWx1ZTogRmlsZUZpZWxkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3ZhbHVlLm5leHQodmFsdWUgPz8ge30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBuZXcgaW5zdGFuY2UgZm9yIGZpbGUgZmllbGQgd2l0aCBhbGwgaGlzIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBQbGFjZWhvbGRlciBpcyBhIHN1YnN0aXR1dGUgZm9yIHRoZSB2YWx1ZSBuYW1lIGlmIG5vdCBzZXQgdmFsdWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RyaW5nSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZywgYmVoYXZpb3I6IEJlaGF2aW9yLCB2YWx1ZT86IEZpbGVGaWVsZFZhbHVlLCBwbGFjZWhvbGRlcj86IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgbGF5b3V0PzogTGF5b3V0LCBwcml2YXRlIF9tYXhVcGxvYWRTaXplSW5CeXRlcz86IG51bWJlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9hbGxvd1R5cGVzPzogc3RyaW5nIHwgRmlsZVVwbG9hZE1JTUVUeXBlIHwgQXJyYXk8RmlsZVVwbG9hZE1JTUVUeXBlPixcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucz86IEFycmF5PFZhbGlkYXRpb24+LCBjb21wb25lbnQ/OiBDb21wb25lbnQsIHBhcmVudFRhc2tJZD86IHN0cmluZykge1xuICAgICAgICBzdXBlcihzdHJpbmdJZCwgdGl0bGUsIHZhbHVlLCBiZWhhdmlvciwgcGxhY2Vob2xkZXIsIGRlc2NyaXB0aW9uLCBsYXlvdXQsIHZhbGlkYXRpb25zLCBjb21wb25lbnQsIHBhcmVudFRhc2tJZCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHMkID0gbmV3IFN1YmplY3Q8Q2hhbmdlZEZpZWxkc01hcD4oKTtcbiAgICB9XG5cbiAgICBnZXQgbWF4VXBsb2FkU2l6ZUluQnl0ZXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFVwbG9hZFNpemVJbkJ5dGVzO1xuICAgIH1cblxuICAgIGdldCBhbGxvd1R5cGVzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbGxvd1R5cGVzIGluc3RhbmNlb2YgQXJyYXkgPyB0aGlzLl9hbGxvd1R5cGVzLnRvU3RyaW5nKCkgOiB0aGlzLl9hbGxvd1R5cGVzO1xuICAgIH1cblxuICAgIGdldCBjaGFuZ2VkRmllbGRzJCgpOiBPYnNlcnZhYmxlPENoYW5nZWRGaWVsZHNNYXA+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZWRGaWVsZHMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0Q2hhbmdlZEZpZWxkcyhjaGFuZ2U6IENoYW5nZWRGaWVsZHNNYXApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlZEZpZWxkcyQubmV4dChjaGFuZ2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2YWx1ZUVxdWFsaXR5KGE6IEZpbGVGaWVsZFZhbHVlLCBiOiBGaWxlRmllbGRWYWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZmlsZSA9IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKTtcbiAgICAgICAgaWYgKGEgJiYgYS5maWxlICYmIGIgJiYgYi5maWxlKSB7XG4gICAgICAgICAgICBmaWxlID0gYS5maWxlLm5hbWUgPT09IGIuZmlsZS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoIWEgJiYgIWIpIHx8ICghIWEgJiYgISFiICYmIGEubmFtZSA9PT0gYi5uYW1lICYmIGZpbGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckZvcm1Db250cm9sKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIGZpZWxkIGNhbiBiZSBpbml0aWFsaXplZCBvbmx5IG9uY2UhJ1xuICAgICAgICAgICAgICAgICsgJyBEaXNjb25uZWN0IHRoZSBwcmV2aW91cyBmb3JtIGNvbnRyb2wgYmVmb3JlIGluaXRpYWxpemluZyB0aGUgZGF0YSBmaWVsZCBhZ2FpbiEnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Db250cm9sUmVmID0gZm9ybUNvbnRyb2w7XG4gICAgICAgIGZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5yZXNvbHZlRm9ybUNvbnRyb2xWYWxpZGF0b3JzKCkpO1xuXG4gICAgICAgIHRoaXMuX215VmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLl92YWx1ZS5waXBlKFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQodGhpcy52YWx1ZUVxdWFsaXR5KVxuICAgICAgICApLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdGhpcy5fZGV0ZXJtaW5lRm9ybUNvbnRyb2xWYWxpZGl0eShmb3JtQ29udHJvbCk7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShuZXdWYWx1ZT8ubmFtZSA/PyAnJyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sU3RhdGUoZm9ybUNvbnRyb2wpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMud2FpdGluZ0ZvclJlc3BvbnNlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1Db250cm9sU3RhdGUoZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9Jbm5lclN1YmplY3RzKGZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59XG4iXX0=