@ctrl/ngx-csv
Version:
Easily generate a CSV download in the browser with Angular
50 lines • 5.26 kB
JavaScript
import { Directive, HostBinding, Input } from '@angular/core';
import { buildURI } from './util';
import * as i0 from "@angular/core";
import * as i1 from "@angular/platform-browser";
export class CsvDirective {
constructor(sanitizer) {
this.sanitizer = sanitizer;
/** the body of the csv */
this.data = [];
/** Set the seperator between values */
this.delimiter = ',';
/** adds a Byte order mark to setup the csv as UTF-8 */
this.uFEFF = true;
/** filename */
this.download = 'data.csv';
this.target = '_blank';
}
/** Set the filename of the csv. Default is `data.csv` */
set filename(a) {
this.download = a;
}
ngOnChanges() {
this.href = this.sanitizer.bypassSecurityTrustResourceUrl(buildURI(this.data, this.uFEFF, this.headers, this.delimiter));
}
}
CsvDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: CsvDirective, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
CsvDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: CsvDirective, selector: "[csvLink]", inputs: { data: "data", headers: "headers", delimiter: "delimiter", filename: "filename", uFEFF: "uFEFF", target: "target" }, host: { properties: { "href": "this.href", "download": "this.download", "target": "this.target" } }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: CsvDirective, decorators: [{
type: Directive,
args: [{ selector: '[csvLink]' }]
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { data: [{
type: Input
}], headers: [{
type: Input
}], delimiter: [{
type: Input
}], filename: [{
type: Input
}], uFEFF: [{
type: Input
}], href: [{
type: HostBinding
}], download: [{
type: HostBinding
}], target: [{
type: Input
}, {
type: HostBinding
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3N2LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHekUsT0FBTyxFQUFFLFFBQVEsRUFBYSxNQUFNLFFBQVEsQ0FBQzs7O0FBRzdDLE1BQU0sT0FBTyxZQUFZO0lBbUJ2QixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBbEIzQywwQkFBMEI7UUFDakIsU0FBSSxHQUE4RCxFQUFFLENBQUM7UUFHOUUsdUNBQXVDO1FBQzlCLGNBQVMsR0FBRyxHQUFHLENBQUM7UUFNekIsd0RBQXdEO1FBQy9DLFVBQUssR0FBRyxJQUFJLENBQUM7UUFFdEIsZUFBZTtRQUNBLGFBQVEsR0FBRyxVQUFVLENBQUM7UUFDYixXQUFNLEdBQUcsUUFBUSxDQUFDO0lBRUksQ0FBQztJQVovQyx5REFBeUQ7SUFDekQsSUFDSSxRQUFRLENBQUMsQ0FBUztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBVUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FDdkQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDOUQsQ0FBQztJQUNKLENBQUM7O3lHQXpCVSxZQUFZOzZGQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7bUdBR3pCLElBQUk7c0JBQVosS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUNTLElBQUk7c0JBQWxCLFdBQVc7Z0JBRUcsUUFBUTtzQkFBdEIsV0FBVztnQkFDWSxNQUFNO3NCQUE3QixLQUFLOztzQkFBSSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgYnVpbGRVUkksIEhlYWRlck9iaiB9IGZyb20gJy4vdXRpbCc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tjc3ZMaW5rXScgfSlcbmV4cG9ydCBjbGFzcyBDc3ZEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKiogdGhlIGJvZHkgb2YgdGhlIGNzdiAqL1xuICBASW5wdXQoKSBkYXRhOiBzdHJpbmcgfCBzdHJpbmdbXVtdIHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIHwgYW55W10gPSBbXTtcbiAgLyoqIFNldCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY3N2ICovXG4gIEBJbnB1dCgpIGhlYWRlcnM/OiBzdHJpbmdbXSB8IEhlYWRlck9ialtdO1xuICAvKiogU2V0IHRoZSBzZXBlcmF0b3IgYmV0d2VlbiB2YWx1ZXMgKi9cbiAgQElucHV0KCkgZGVsaW1pdGVyID0gJywnO1xuICAvKiogU2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgY3N2LiBEZWZhdWx0IGlzIGBkYXRhLmNzdmAgKi9cbiAgQElucHV0KClcbiAgc2V0IGZpbGVuYW1lKGE6IHN0cmluZykge1xuICAgIHRoaXMuZG93bmxvYWQgPSBhO1xuICB9XG4gIC8qKiBhZGRzIGEgQnl0ZSBvcmRlciBtYXJrIHRvIHNldHVwIHRoZSBjc3YgYXMgVVRGLTggICovXG4gIEBJbnB1dCgpIHVGRUZGID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCkgaHJlZj86IFNhZmVSZXNvdXJjZVVybDtcbiAgLyoqIGZpbGVuYW1lICovXG4gIEBIb3N0QmluZGluZygpIGRvd25sb2FkID0gJ2RhdGEuY3N2JztcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCkgdGFyZ2V0ID0gJ19ibGFuayc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICBidWlsZFVSSSh0aGlzLmRhdGEsIHRoaXMudUZFRkYsIHRoaXMuaGVhZGVycywgdGhpcy5kZWxpbWl0ZXIpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==