UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

95 lines 15.5 kB
import { Subject } from 'rxjs'; import { DataField } from '../../models/abstract-data-field'; import { ComponentPrefixes } from '../../models/component'; import { distinctUntilChanged } from 'rxjs/operators'; export var FileListFieldValidation; (function (FileListFieldValidation) { FileListFieldValidation["MAX_FILES"] = "maxFiles"; })(FileListFieldValidation || (FileListFieldValidation = {})); export class FileListField extends DataField { _maxUploadSizeInBytes; _allowTypes; /** * 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 ?? { namesPaths: [] }); } this._value.next(value ?? { namesPaths: [] }); this.reverting = false; } get value() { return this._value.getValue(); } getTypedComponentType() { return ComponentPrefixes.FILE_LIST + this.getComponentType(); } valueWithoutChange(value) { this.changed = false; this._value.next(value ?? { namesPaths: [] }); } /** * 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, validations, _maxUploadSizeInBytes, _allowTypes, component, parentTaskId) { super(stringId, title, value, behavior, placeholder, description, layout, validations, component, parentTaskId); this._maxUploadSizeInBytes = _maxUploadSizeInBytes; this._allowTypes = _allowTypes; this._changedFields$ = new Subject(); this.downloaded = new Array(); } 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); } /** * We assume that files are always given in the same order. */ valueEquality(a, b) { let array = (JSON.stringify(a) === '{}' || !a.namesPaths || a.namesPaths.length === 0) && (JSON.stringify(b) === '{}' || !b.namesPaths || b.namesPaths.length === 0); if (a && a.namesPaths && a.namesPaths.length !== 0 && b && b.namesPaths && b.namesPaths.length !== 0) { array = a.namesPaths.every((element, index) => element.name === b.namesPaths[index].name); } return (!a && !b) || (!!a && !!b && array); } 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 || !newValue.namesPaths ? '' : newValue.namesPaths.map(namePath => { return namePath.name; }).join('/')); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0LWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9kYXRhLWZpZWxkcy9maWxlLWxpc3QtZmllbGQvbW9kZWxzL2ZpbGUtbGlzdC1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSXpDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRCxPQUFPLEVBQVksaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUdwRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxNQUFNLENBQU4sSUFBWSx1QkFFWDtBQUZELFdBQVksdUJBQXVCO0lBQy9CLGlEQUFzQixDQUFBO0FBQzFCLENBQUMsRUFGVyx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBRWxDO0FBRUQsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUE2QjtJQW9DVTtJQUNsRDtJQXBDcEI7O09BRUc7SUFDSyxlQUFlLENBQTRCO0lBQzVDLFVBQVUsQ0FBZ0I7SUFFakMsSUFBSSxLQUFLLENBQUMsS0FBeUI7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FB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LElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVTLHNCQUFzQixDQUFDLFdBQXdCO1FBQ3JELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7QmVoYXZpb3J9IGZyb20gJy4uLy4uL21vZGVscy9iZWhhdmlvcic7XG5pbXBvcnQge0xheW91dH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xheW91dCc7XG5pbXBvcnQge0ZpbGVVcGxvYWRNSU1FVHlwZX0gZnJvbSAnLi4vLi4vZmlsZS1maWVsZC9tb2RlbHMvZmlsZS1maWVsZCc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtGaWxlTGlzdEZpZWxkVmFsdWV9IGZyb20gJy4vZmlsZS1saXN0LWZpZWxkLXZhbHVlJztcbmltcG9ydCB7VmFsaWRhdGlvbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHtDb21wb25lbnQsIENvbXBvbmVudFByZWZpeGVzfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgZW51bSBGaWxlTGlzdEZpZWxkVmFsaWRhdGlvbiB7XG4gICAgTUFYX0ZJTEVTID0gJ21heEZpbGVzJ1xufVxuXG5leHBvcnQgY2xhc3MgRmlsZUxpc3RGaWVsZCBleHRlbmRzIERhdGFGaWVsZDxGaWxlTGlzdEZpZWxkVmFsdWU+IHtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGZvcndhcmQgdGhlIHJlc3VsdCBvZiB0aGUgdXBsb2FkIGZpbGUgYmFja2VuZCBjYWxsIHRvIHRoZSB0YXNrIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VkRmllbGRzJDogU3ViamVjdDxDaGFuZ2VkRmllbGRzTWFwPjtcbiAgICBwdWJsaWMgZG93bmxvYWRlZDogQXJyYXk8c3RyaW5nPjtcblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRmlsZUxpc3RGaWVsZFZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZUVxdWFsaXR5KHRoaXMuX3ZhbHVlLmdldFZhbHVlKCksIHZhbHVlKSAmJiAhdGhpcy5yZXZlcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLndhaXRpbmdGb3JSZXNwb25zZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVQcmV2VmFsdWUodmFsdWUgPz8ge25hbWVzUGF0aHM6IFtdfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUubmV4dCh2YWx1ZSA/PyB7bmFtZXNQYXRoczogW119KTtcbiAgICAgICAgdGhpcy5yZXZlcnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogRmlsZUxpc3RGaWVsZFZhbHVlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFR5cGVkQ29tcG9uZW50VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50UHJlZml4ZXMuRklMRV9MSVNUICsgdGhpcy5nZXRDb21wb25lbnRUeXBlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlV2l0aG91dENoYW5nZSh2YWx1ZTogRmlsZUxpc3RGaWVsZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl92YWx1ZS5uZXh0KHZhbHVlID8/IHtuYW1lc1BhdGhzOiBbXX0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBuZXcgaW5zdGFuY2UgZm9yIGZpbGUgZmllbGQgd2l0aCBhbGwgaGlzIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBQbGFjZWhvbGRlciBpcyBhIHN1YnN0aXR1dGUgZm9yIHRoZSB2YWx1ZSBuYW1lIGlmIG5vdCBzZXQgdmFsdWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RyaW5nSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZywgYmVoYXZpb3I6IEJlaGF2aW9yLCB2YWx1ZT86IEZpbGVMaXN0RmllbGRWYWx1ZSwgcGxhY2Vob2xkZXI/OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGxheW91dD86IExheW91dCwgdmFsaWRhdGlvbnM/OiBBcnJheTxWYWxpZGF0aW9uPiwgcHJpdmF0ZSBfbWF4VXBsb2FkU2l6ZUluQnl0ZXM/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfYWxsb3dUeXBlcz86IHN0cmluZyB8IEZpbGVVcGxvYWRNSU1FVHlwZSB8IEFycmF5PEZpbGVVcGxvYWRNSU1FVHlwZT4sXG4gICAgICAgICAgICAgICAgY29tcG9uZW50PzogQ29tcG9uZW50LCBwYXJlbnRUYXNrSWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc3RyaW5nSWQsIHRpdGxlLCB2YWx1ZSwgYmVoYXZpb3IsIHBsYWNlaG9sZGVyLCBkZXNjcmlwdGlvbiwgbGF5b3V0LCB2YWxpZGF0aW9ucywgY29tcG9uZW50LCBwYXJlbnRUYXNrSWQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkRmllbGRzJCA9IG5ldyBTdWJqZWN0PENoYW5nZWRGaWVsZHNNYXA+KCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRlZCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgfVxuXG4gICAgZ2V0IG1heFVwbG9hZFNpemVJbkJ5dGVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhVcGxvYWRTaXplSW5CeXRlcztcbiAgICB9XG5cbiAgICBnZXQgYWxsb3dUeXBlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsb3dUeXBlcyBpbnN0YW5jZW9mIEFycmF5ID8gdGhpcy5fYWxsb3dUeXBlcy50b1N0cmluZygpIDogdGhpcy5fYWxsb3dUeXBlcztcbiAgICB9XG5cbiAgICBnZXQgY2hhbmdlZEZpZWxkcyQoKTogT2JzZXJ2YWJsZTxDaGFuZ2VkRmllbGRzTWFwPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VkRmllbGRzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdENoYW5nZWRGaWVsZHMoY2hhbmdlOiBDaGFuZ2VkRmllbGRzTWFwKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHMkLm5leHQoY2hhbmdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXZSBhc3N1bWUgdGhhdCBmaWxlcyBhcmUgYWx3YXlzIGdpdmVuIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB2YWx1ZUVxdWFsaXR5KGE6IEZpbGVMaXN0RmllbGRWYWx1ZSwgYjogRmlsZUxpc3RGaWVsZFZhbHVlKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBhcnJheSA9IChKU09OLnN0cmluZ2lmeShhKSA9PT0gJ3t9JyB8fCAhYS5uYW1lc1BhdGhzIHx8IGEubmFtZXNQYXRocy5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgICAoSlNPTi5zdHJpbmdpZnkoYikgPT09ICd7fScgfHwgIWIubmFtZXNQYXRocyB8fCBiLm5hbWVzUGF0aHMubGVuZ3RoID09PSAwKTtcbiAgICAgICAgaWYgKGEgJiYgYS5uYW1lc1BhdGhzICYmIGEubmFtZXNQYXRocy5sZW5ndGggIT09IDAgJiYgYiAmJiBiLm5hbWVzUGF0aHMgJiYgYi5uYW1lc1BhdGhzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgYXJyYXkgPSBhLm5hbWVzUGF0aHMuZXZlcnkoKGVsZW1lbnQsIGluZGV4KSA9PiBlbGVtZW50Lm5hbWUgPT09IGIubmFtZXNQYXRoc1tpbmRleF0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICghYSAmJiAhYikgfHwgKCEhYSAmJiAhIWIgJiYgYXJyYXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckZvcm1Db250cm9sKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIGZpZWxkIGNhbiBiZSBpbml0aWFsaXplZCBvbmx5IG9uY2UhJ1xuICAgICAgICAgICAgICAgICsgJyBEaXNjb25uZWN0IHRoZSBwcmV2aW91cyBmb3JtIGNvbnRyb2wgYmVmb3JlIGluaXRpYWxpemluZyB0aGUgZGF0YSBmaWVsZCBhZ2FpbiEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZWYgPSBmb3JtQ29udHJvbDtcbiAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnJlc29sdmVGb3JtQ29udHJvbFZhbGlkYXRvcnMoKSk7XG5cbiAgICAgICAgdGhpcy5fbXlWYWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuX3ZhbHVlLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLnZhbHVlRXF1YWxpdHkpXG4gICAgICAgICkuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0aGlzLl9kZXRlcm1pbmVGb3JtQ29udHJvbFZhbGlkaXR5KGZvcm1Db250cm9sKTtcbiAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKCFuZXdWYWx1ZSB8fCAhbmV3VmFsdWUubmFtZXNQYXRocyA/ICcnIDogbmV3VmFsdWUubmFtZXNQYXRocy5tYXAobmFtZVBhdGggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lUGF0aC5uYW1lO1xuICAgICAgICAgICAgfSkuam9pbignLycpKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xTdGF0ZShmb3JtQ29udHJvbCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy53YWl0aW5nRm9yUmVzcG9uc2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRm9ybUNvbnRyb2xTdGF0ZShmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0lubmVyU3ViamVjdHMoZm9ybUNvbnRyb2wpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn1cbiJdfQ==