@covalent/core
Version:
Core Teradata UI Platform for layouts, icons, custom components and themes. This should be added as a dependency for any project that wants to use layouts, icons and themes for Angular Material.
77 lines • 8.44 kB
JavaScript
import { Directive, Input, Output, EventEmitter } from '@angular/core';
import { HostListener, HostBinding, Host, Optional } from '@angular/core';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { NgModel } from '@angular/forms';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class TdFileSelectDirective {
constructor(model) {
this.model = model;
this._multiple = false;
/**
* fileSelect?: function
* Event emitted when a file or files are selected in host [HTMLInputElement].
* Emits a [FileList | File] object.
* Alternative to not use [(ngModel)].
*/
this.fileSelect = new EventEmitter();
}
/**
* multiple?: boolean
* Sets whether multiple files can be selected at once in host element, or just a single file.
* Can also be 'multiple' native attribute.
*/
set multiple(multiple) {
this._multiple = coerceBooleanProperty(multiple);
}
/**
* Binds native 'multiple' attribute if [multiple] property is 'true'.
*/
get multipleBinding() {
return this._multiple ? '' : undefined;
}
/**
* Listens to 'change' host event to get [HTMLInputElement] files.
* Emits the 'fileSelect' event with a [FileList] or [File] depending if 'multiple' attr exists in host.
* Uses [(ngModel)] if declared, instead of emitting 'fileSelect' event.
*/
onChange(event) {
if (event.target instanceof HTMLInputElement) {
const fileInputEl = event.target;
const files = fileInputEl.files || new FileList();
if (files.length) {
const value = this._multiple
? files.length > 1
? files
: files[0]
: files[0];
this.model
? this.model.update.emit(value)
: this.fileSelect.emit(value);
}
}
}
}
TdFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdFileSelectDirective, deps: [{ token: i1.NgModel, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
TdFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: TdFileSelectDirective, selector: "[tdFileSelect]", inputs: { multiple: "multiple" }, outputs: { fileSelect: "fileSelect" }, host: { listeners: { "change": "onChange($event)" }, properties: { "attr.multiple": "this.multipleBinding" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdFileSelectDirective, decorators: [{
type: Directive,
args: [{
selector: '[tdFileSelect]',
}]
}], ctorParameters: function () { return [{ type: i1.NgModel, decorators: [{
type: Optional
}, {
type: Host
}] }]; }, propDecorators: { multiple: [{
type: Input
}], fileSelect: [{
type: Output
}], multipleBinding: [{
type: HostBinding,
args: ['attr.multiple']
}], onChange: [{
type: HostListener,
args: ['change', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2ZpbGUvc3JjL2RpcmVjdGl2ZXMvZmlsZS1zZWxlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUt6QyxNQUFNLE9BQU8scUJBQXFCO0lBK0JoQyxZQUF3QyxLQUFjO1FBQWQsVUFBSyxHQUFMLEtBQUssQ0FBUztRQTlCOUMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQVkxQjs7Ozs7V0FLRztRQUNPLGVBQVUsR0FBa0MsSUFBSSxZQUFZLEVBRW5FLENBQUM7SUFVcUQsQ0FBQztJQTVCMUQ7Ozs7T0FJRztJQUNILElBQ0ksUUFBUSxDQUFDLFFBQTBCO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQVlEOztPQUVHO0lBQ0gsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUlEOzs7O09BSUc7SUFFSCxRQUFRLENBQUMsS0FBWTtRQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLEVBQUU7WUFDNUMsTUFBTSxXQUFXLEdBQXFCLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQWEsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzVELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsTUFBTSxLQUFLLEdBQW9CLElBQUksQ0FBQyxTQUFTO29CQUMzQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUNoQixDQUFDLENBQUMsS0FBSzt3QkFDUCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDWixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxLQUFLO29CQUNSLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUM7O2tIQXREVSxxQkFBcUI7c0dBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQUhqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzswQkFnQ2MsUUFBUTs7MEJBQUksSUFBSTs0Q0F0QnpCLFFBQVE7c0JBRFgsS0FBSztnQkFXSSxVQUFVO3NCQUFuQixNQUFNO2dCQVFILGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsZUFBZTtnQkFhNUIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIb3N0TGlzdGVuZXIsIEhvc3RCaW5kaW5nLCBIb3N0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZEZpbGVTZWxlY3RdJyxcbn0pXG5leHBvcnQgY2xhc3MgVGRGaWxlU2VsZWN0RGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogbXVsdGlwbGU/OiBib29sZWFuXG4gICAqIFNldHMgd2hldGhlciBtdWx0aXBsZSBmaWxlcyBjYW4gYmUgc2VsZWN0ZWQgYXQgb25jZSBpbiBob3N0IGVsZW1lbnQsIG9yIGp1c3QgYSBzaW5nbGUgZmlsZS5cbiAgICogQ2FuIGFsc28gYmUgJ211bHRpcGxlJyBuYXRpdmUgYXR0cmlidXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IG11bHRpcGxlKG11bHRpcGxlOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkobXVsdGlwbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGZpbGVTZWxlY3Q/OiBmdW5jdGlvblxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBmaWxlIG9yIGZpbGVzIGFyZSBzZWxlY3RlZCBpbiBob3N0IFtIVE1MSW5wdXRFbGVtZW50XS5cbiAgICogRW1pdHMgYSBbRmlsZUxpc3QgfCBGaWxlXSBvYmplY3QuXG4gICAqIEFsdGVybmF0aXZlIHRvIG5vdCB1c2UgWyhuZ01vZGVsKV0uXG4gICAqL1xuICBAT3V0cHV0KCkgZmlsZVNlbGVjdDogRXZlbnRFbWl0dGVyPEZpbGVMaXN0IHwgRmlsZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIEZpbGVMaXN0IHwgRmlsZVxuICA+KCk7XG5cbiAgLyoqXG4gICAqIEJpbmRzIG5hdGl2ZSAnbXVsdGlwbGUnIGF0dHJpYnV0ZSBpZiBbbXVsdGlwbGVdIHByb3BlcnR5IGlzICd0cnVlJy5cbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5tdWx0aXBsZScpXG4gIGdldCBtdWx0aXBsZUJpbmRpbmcoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGUgPyAnJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBIb3N0KCkgcHJpdmF0ZSBtb2RlbDogTmdNb2RlbCkge31cblxuICAvKipcbiAgICogTGlzdGVucyB0byAnY2hhbmdlJyBob3N0IGV2ZW50IHRvIGdldCBbSFRNTElucHV0RWxlbWVudF0gZmlsZXMuXG4gICAqIEVtaXRzIHRoZSAnZmlsZVNlbGVjdCcgZXZlbnQgd2l0aCBhIFtGaWxlTGlzdF0gb3IgW0ZpbGVdIGRlcGVuZGluZyBpZiAnbXVsdGlwbGUnIGF0dHIgZXhpc3RzIGluIGhvc3QuXG4gICAqIFVzZXMgWyhuZ01vZGVsKV0gaWYgZGVjbGFyZWQsIGluc3RlYWQgb2YgZW1pdHRpbmcgJ2ZpbGVTZWxlY3QnIGV2ZW50LlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGZpbGVJbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgY29uc3QgZmlsZXM6IEZpbGVMaXN0ID0gZmlsZUlucHV0RWwuZmlsZXMgfHwgbmV3IEZpbGVMaXN0KCk7XG4gICAgICBpZiAoZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBGaWxlTGlzdCB8IEZpbGUgPSB0aGlzLl9tdWx0aXBsZVxuICAgICAgICAgID8gZmlsZXMubGVuZ3RoID4gMVxuICAgICAgICAgICAgPyBmaWxlc1xuICAgICAgICAgICAgOiBmaWxlc1swXVxuICAgICAgICAgIDogZmlsZXNbMF07XG4gICAgICAgIHRoaXMubW9kZWxcbiAgICAgICAgICA/IHRoaXMubW9kZWwudXBkYXRlLmVtaXQodmFsdWUpXG4gICAgICAgICAgOiB0aGlzLmZpbGVTZWxlY3QuZW1pdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=