@lxlib/seed
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.
222 lines • 15.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: down-file.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, EventEmitter, Input, Output } from '@angular/core';
import { _HttpClient } from '@lxlib/theme';
import { saveAs } from 'file-saver';
var DownFileDirective = /** @class */ (function () {
function DownFileDirective(el, _http) {
this.el = el;
this._http = _http;
this.isFileSaverSupported = true;
/**
* 请求类型
*/
this.httpMethod = 'get';
/**
* 成功回调
*/
// tslint:disable-next-line:no-output-native
this.success = new EventEmitter();
/**
* 错误回调
*/
// tslint:disable-next-line:no-output-native
this.error = new EventEmitter();
/** @type {?} */
var isFileSaverSupported = false;
try {
isFileSaverSupported = !!new Blob();
}
catch (_a) { }
this.isFileSaverSupported = isFileSaverSupported;
if (!isFileSaverSupported) {
el.nativeElement.classList.add("down-file__not-support");
}
}
/**
* @private
* @param {?} data
* @return {?}
*/
DownFileDirective.prototype.getDisposition = /**
* @private
* @param {?} data
* @return {?}
*/
function (data) {
/** @type {?} */
var arr = (data || '')
.split(';')
.filter((/**
* @param {?} i
* @return {?}
*/
function (i) { return i.includes('='); }))
.map((/**
* @param {?} v
* @return {?}
*/
function (v) {
var _a;
/** @type {?} */
var strArr = v.split('=');
/** @type {?} */
var utfId = "UTF-8''";
/** @type {?} */
var value = strArr[1];
if (value.startsWith(utfId))
value = value.substr(utfId.length);
return _a = {}, _a[strArr[0].trim()] = value, _a;
}));
return arr.reduce((/**
* @param {?} _o
* @param {?} item
* @return {?}
*/
function (_o, item) { return item; }), {});
};
/**
* @private
* @param {?} status
* @return {?}
*/
DownFileDirective.prototype.setDisabled = /**
* @private
* @param {?} status
* @return {?}
*/
function (status) {
/** @type {?} */
var el = this.el.nativeElement;
el.disabled = status;
el.classList[status ? 'add' : 'remove']("down-file__disabled");
};
/**
* @return {?}
*/
DownFileDirective.prototype._click = /**
* @return {?}
*/
function () {
var _this = this;
if (!this.isFileSaverSupported) {
return;
}
this.setDisabled(true);
this._http
.request(this.httpMethod, this.httpUrl, {
params: this.httpData || {},
responseType: 'blob',
observe: 'response',
body: this.httpBody,
})
.subscribe((/**
* @param {?} res
* @return {?}
*/
function (res) {
if (res.status !== 200 || (/** @type {?} */ (res.body)).size <= 0) {
_this.error.emit(res);
return;
}
/** @type {?} */
var disposition = _this.getDisposition(res.headers.get('content-disposition'));
/** @type {?} */
var fileName = _this.fileName;
if (typeof fileName === 'function')
fileName = fileName(res);
fileName =
fileName || disposition["filename*"] || disposition["filename"] || res.headers.get('filename') || res.headers.get('x-filename');
saveAs((/** @type {?} */ (res.body)), decodeURI((/** @type {?} */ (fileName))));
_this.success.emit(res);
}), (/**
* @param {?} err
* @return {?}
*/
function (err) { return _this.error.emit(err); }), (/**
* @return {?}
*/
function () { return _this.setDisabled(false); }));
};
DownFileDirective.decorators = [
{ type: Directive, args: [{
selector: '[down-file]',
exportAs: 'downFile',
host: {
'(click)': '_click()',
},
},] }
];
/** @nocollapse */
DownFileDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: _HttpClient }
]; };
DownFileDirective.propDecorators = {
httpData: [{ type: Input, args: ['http-data',] }],
httpBody: [{ type: Input, args: ['http-body',] }],
httpMethod: [{ type: Input, args: ['http-method',] }],
httpUrl: [{ type: Input, args: ['http-url',] }],
fileName: [{ type: Input, args: ['file-name',] }],
success: [{ type: Output }],
error: [{ type: Output }]
};
return DownFileDirective;
}());
export { DownFileDirective };
if (false) {
/**
* @type {?}
* @private
*/
DownFileDirective.prototype.isFileSaverSupported;
/**
* URL请求参数
* @type {?}
*/
DownFileDirective.prototype.httpData;
/**
* URL请求参数
* @type {?}
*/
DownFileDirective.prototype.httpBody;
/**
* 请求类型
* @type {?}
*/
DownFileDirective.prototype.httpMethod;
/**
* 下载地址
* @type {?}
*/
DownFileDirective.prototype.httpUrl;
/**
* 指定文件名,若为空从服务端返回的 `header` 中获取 `filename`、`x-filename`
* @type {?}
*/
DownFileDirective.prototype.fileName;
/**
* 成功回调
* @type {?}
*/
DownFileDirective.prototype.success;
/**
* 错误回调
* @type {?}
*/
DownFileDirective.prototype.error;
/**
* @type {?}
* @private
*/
DownFileDirective.prototype.el;
/**
* @type {?}
* @private
*/
DownFileDirective.prototype._http;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bi1maWxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BseGxpYi9zZWVkL2Rvd24tZmlsZS8iLCJzb3VyY2VzIjpbImRvd24tZmlsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHcEM7SUF3Q0UsMkJBQW9CLEVBQWlDLEVBQVUsS0FBa0I7UUFBN0QsT0FBRSxHQUFGLEVBQUUsQ0FBK0I7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFhO1FBaEN6RSx5QkFBb0IsR0FBRyxJQUFJLENBQUM7Ozs7UUFNZCxlQUFVLEdBQVcsS0FBSyxDQUFDOzs7OztRQU85QixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7Ozs7O1FBR2pELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDOztZQWlCN0Msb0JBQW9CLEdBQUcsS0FBSztRQUNoQyxJQUFJO1lBQ0Ysb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7U0FDckM7UUFBQyxXQUFNLEdBQUU7UUFDVixJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDakQsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pCLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQzs7Ozs7O0lBdkJPLDBDQUFjOzs7OztJQUF0QixVQUF1QixJQUFtQjs7WUFDbEMsR0FBRyxHQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQzthQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FB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S0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBcEIsQ0FBb0I7OztRQUMzQixjQUFNLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBdkIsQ0FBdUIsRUFDOUIsQ0FBQztJQUNOLENBQUM7O2dCQXRGRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLFVBQVU7cUJBQ3RCO2lCQUNGOzs7O2dCQVhtQixVQUFVO2dCQUNyQixXQUFXOzs7MkJBY2pCLEtBQUssU0FBQyxXQUFXOzJCQUVqQixLQUFLLFNBQUMsV0FBVzs2QkFFakIsS0FBSyxTQUFDLGFBQWE7MEJBRW5CLEtBQUssU0FBQyxVQUFVOzJCQUVoQixLQUFLLFNBQUMsV0FBVzswQkFHakIsTUFBTTt3QkFHTixNQUFNOztJQStEVCx3QkFBQztDQUFBLEFBdkZELElBdUZDO1NBaEZZLGlCQUFpQjs7Ozs7O0lBQzVCLGlEQUFvQzs7Ozs7SUFFcEMscUNBQWlDOzs7OztJQUVqQyxxQ0FBaUM7Ozs7O0lBRWpDLHVDQUFpRDs7Ozs7SUFFakQsb0NBQW1DOzs7OztJQUVuQyxxQ0FBNkU7Ozs7O0lBRzdFLG9DQUFvRTs7Ozs7SUFHcEUsa0NBQW1EOzs7OztJQWdCdkMsK0JBQXlDOzs7OztJQUFFLGtDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBfSHR0cENsaWVudCB9IGZyb20gJ0BseGxpYi90aGVtZSc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkb3duLWZpbGVdJyxcbiAgZXhwb3J0QXM6ICdkb3duRmlsZScsXG4gIGhvc3Q6IHtcbiAgICAnKGNsaWNrKSc6ICdfY2xpY2soKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIERvd25GaWxlRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBpc0ZpbGVTYXZlclN1cHBvcnRlZCA9IHRydWU7XG4gIC8qKiBVUkzor7fmsYLlj4LmlbAgKi9cbiAgQElucHV0KCdodHRwLWRhdGEnKSBodHRwRGF0YToge307XG4gIC8qKiBVUkzor7fmsYLlj4LmlbAgKi9cbiAgQElucHV0KCdodHRwLWJvZHknKSBodHRwQm9keToge307XG4gIC8qKiDor7fmsYLnsbvlnosgKi9cbiAgQElucHV0KCdodHRwLW1ldGhvZCcpIGh0dHBNZXRob2Q6IHN0cmluZyA9ICdnZXQnO1xuICAvKiog5LiL6L295Zyw5Z2AICovXG4gIEBJbnB1dCgnaHR0cC11cmwnKSBodHRwVXJsOiBzdHJpbmc7XG4gIC8qKiDmjIflrprmlofku7blkI3vvIzoi6XkuLrnqbrku47mnI3liqHnq6/ov5Tlm57nmoQgYGhlYWRlcmAg5Lit6I635Y+WIGBmaWxlbmFtZWDjgIFgeC1maWxlbmFtZWAgKi9cbiAgQElucHV0KCdmaWxlLW5hbWUnKSBmaWxlTmFtZTogc3RyaW5nIHwgKChyZXA6IEh0dHBSZXNwb25zZTxCbG9iPikgPT4gc3RyaW5nKTtcbiAgLyoqIOaIkOWKn+WbnuiwgyAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8SHR0cFJlc3BvbnNlPEJsb2I+PigpO1xuICAvKiog6ZSZ6K+v5Zue6LCDICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgZ2V0RGlzcG9zaXRpb24oZGF0YTogc3RyaW5nIHwgbnVsbCk6IE56U2FmZUFueSB7XG4gICAgY29uc3QgYXJyOiBBcnJheTx7fT4gPSAoZGF0YSB8fCAnJylcbiAgICAgIC5zcGxpdCgnOycpXG4gICAgICAuZmlsdGVyKGkgPT4gaS5pbmNsdWRlcygnPScpKVxuICAgICAgLm1hcCh2ID0+IHtcbiAgICAgICAgY29uc3Qgc3RyQXJyID0gdi5zcGxpdCgnPScpO1xuICAgICAgICBjb25zdCB1dGZJZCA9IGBVVEYtOCcnYDtcbiAgICAgICAgbGV0IHZhbHVlID0gc3RyQXJyWzFdO1xuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCh1dGZJZCkpIHZhbHVlID0gdmFsdWUuc3Vic3RyKHV0ZklkLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB7IFtzdHJBcnJbMF0udHJpbSgpXTogdmFsdWUgfTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBhcnIucmVkdWNlKChfbywgaXRlbSkgPT4gaXRlbSwge30pO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4sIHByaXZhdGUgX2h0dHA6IF9IdHRwQ2xpZW50KSB7XG4gICAgbGV0IGlzRmlsZVNhdmVyU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGlzRmlsZVNhdmVyU3VwcG9ydGVkID0gISFuZXcgQmxvYigpO1xuICAgIH0gY2F0Y2gge31cbiAgICB0aGlzLmlzRmlsZVNhdmVyU3VwcG9ydGVkID0gaXNGaWxlU2F2ZXJTdXBwb3J0ZWQ7XG4gICAgaWYgKCFpc0ZpbGVTYXZlclN1cHBvcnRlZCkge1xuICAgICAgZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBkb3duLWZpbGVfX25vdC1zdXBwb3J0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXNhYmxlZChzdGF0dXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBlbC5kaXNhYmxlZCA9IHN0YXR1cztcbiAgICBlbC5jbGFzc0xpc3Rbc3RhdHVzID8gJ2FkZCcgOiAncmVtb3ZlJ10oYGRvd24tZmlsZV9fZGlzYWJsZWRgKTtcbiAgfVxuXG4gIF9jbGljaygpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWxlU2F2ZXJTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXREaXNhYmxlZCh0cnVlKTtcbiAgICB0aGlzLl9odHRwXG4gICAgICAucmVxdWVzdCh0aGlzLmh0dHBNZXRob2QsIHRoaXMuaHR0cFVybCwge1xuICAgICAgICBwYXJhbXM6IHRoaXMuaHR0cERhdGEgfHwge30sXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgICBib2R5OiB0aGlzLmh0dHBCb2R5LFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxCbG9iPikgPT4ge1xuICAgICAgICAgIGlmIChyZXMuc3RhdHVzICE9PSAyMDAgfHwgcmVzLmJvZHkhLnNpemUgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHJlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gdGhpcy5nZXREaXNwb3NpdGlvbihyZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKSk7XG4gICAgICAgICAgbGV0IGZpbGVOYW1lID0gdGhpcy5maWxlTmFtZTtcbiAgICAgICAgICBpZiAodHlwZW9mIGZpbGVOYW1lID09PSAnZnVuY3Rpb24nKSBmaWxlTmFtZSA9IGZpbGVOYW1lKHJlcyk7XG4gICAgICAgICAgZmlsZU5hbWUgPVxuICAgICAgICAgICAgZmlsZU5hbWUgfHwgZGlzcG9zaXRpb25bYGZpbGVuYW1lKmBdIHx8IGRpc3Bvc2l0aW9uW2BmaWxlbmFtZWBdIHx8IHJlcy5oZWFkZXJzLmdldCgnZmlsZW5hbWUnKSB8fCByZXMuaGVhZGVycy5nZXQoJ3gtZmlsZW5hbWUnKTtcbiAgICAgICAgICBzYXZlQXMocmVzLmJvZHkhLCBkZWNvZGVVUkkoZmlsZU5hbWUgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzLmVtaXQocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHRoaXMuZXJyb3IuZW1pdChlcnIpLFxuICAgICAgICAoKSA9PiB0aGlzLnNldERpc2FibGVkKGZhbHNlKSxcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==