ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
242 lines (241 loc) • 18.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable, ApplicationRef, Compiler, NgZone, ComponentFactoryResolver, } from '@angular/core';
import { ToastComponent } from './toast.component';
import { ToastOptions } from './toast-options.provider';
/**
* @record
*/
export function ConfigInterface() { }
/** @type {?|undefined} */
ConfigInterface.prototype.content;
/** @type {?|undefined} */
ConfigInterface.prototype.iconType;
/** @type {?|undefined} */
ConfigInterface.prototype.mask;
export class Toast {
/**
* @param {?} _appRef
* @param {?} _compiler
* @param {?} _cfr
* @param {?} _zone
*/
constructor(_appRef, _compiler, _cfr, _zone) {
this._appRef = _appRef;
this._compiler = _compiler;
this._cfr = _cfr;
this._zone = _zone;
Toast._zone = this._zone;
Toast._appRef = this._appRef;
Toast._toastCompFactory = this._cfr.resolveComponentFactory(ToastComponent);
}
/**
* @param {?} config
* @param {?} options
* @return {?}
*/
static _initConfig(config, options) {
/** @type {?} */
const props = {};
/** @type {?} */
const optionalParams = ['content', 'iconType', 'mask'];
config = Object.assign(options, config);
optionalParams.forEach(key => {
if (config[key] !== undefined) {
props[key] = config[key];
}
});
/** @type {?} */
const iconType = {
info: '',
success: 'success',
fail: 'fail',
offline: 'dislike',
loading: 'loading'
}[options.iconType];
props['iconType'] = iconType;
props['mask'] = options.mask;
return props;
}
/**
* @param {?} config
* @param {?} type
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static notice(config, type, timeInterval = 2000, onClose, mask = true) {
// 如果已经存在,在没有遮罩层的情况下,会响应别的toast,需要清除原来的
if (Toast.compRef) {
Toast.hide();
}
/** @type {?} */
const options = new ToastOptions();
options.iconType = type;
options.mask = mask;
/** @type {?} */
const props = Toast._initConfig(config, options);
document.body.insertBefore(document.createElement(Toast._toastCompFactory.selector), document.body.firstChild);
/** @type {?} */
let instance;
/** @type {?} */
let subject;
Toast.compRef = Toast._appRef.bootstrap(Toast._toastCompFactory);
instance = Toast.compRef.instance;
subject = instance.subject;
if (timeInterval) {
Toast.timeout = setTimeout(() => {
if (onClose) {
onClose();
}
Toast.hide();
}, timeInterval);
}
Object.assign(instance, props);
return subject;
}
/**
* Open info dialog
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static info(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'info',
content: content
});
return Toast.notice(config, 'info', timeInterval, onClose, mask);
}
/**
* Open success dialog
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static success(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'success',
content: content
});
return Toast.notice(config, 'success', timeInterval, onClose, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} mask
* @return {?}
*/
static show(content, timeInterval, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'info',
content: content
});
return Toast.notice(config, 'info', timeInterval, () => { }, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static fail(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'fail',
content: content
});
return Toast.notice(config, 'fail', timeInterval, onClose, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static offline(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'offline',
content: content
});
return Toast.notice(config, 'offline', timeInterval, onClose, mask);
}
/**
* @param {?=} content
* @param {?=} timeInterval
* @param {?=} onClose
* @param {?=} mask
* @return {?}
*/
static loading(content, timeInterval, onClose, mask) {
/** @type {?} */
const config = Object.assign({
iconType: 'loading',
content: content
});
return Toast.notice(config, 'loading', timeInterval, onClose, mask);
}
/**
* @return {?}
*/
static hide() {
if (Toast.timeout) {
clearTimeout(Toast.timeout);
}
if (Toast.compRef) {
Toast._zone.run(() => {
Toast.compRef.destroy();
});
Toast.compRef = null;
}
}
}
Toast.timeout = null;
Toast._zone = null;
Toast.compRef = null;
Toast._toastCompFactory = null;
Toast._appRef = null;
Toast.decorators = [
{ type: Injectable }
];
/** @nocollapse */
Toast.ctorParameters = () => [
{ type: ApplicationRef },
{ type: Compiler },
{ type: ComponentFactoryResolver },
{ type: NgZone }
];
if (false) {
/** @type {?} */
Toast.timeout;
/** @type {?} */
Toast._zone;
/** @type {?} */
Toast.compRef;
/** @type {?} */
Toast._toastCompFactory;
/** @type {?} */
Toast._appRef;
/** @type {?} */
Toast.prototype._appRef;
/** @type {?} */
Toast.prototype._compiler;
/** @type {?} */
Toast.prototype._cfr;
/** @type {?} */
Toast.prototype._zone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsidG9hc3QvdG9hc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFVBQVUsRUFHVixjQUFjLEVBQ2QsUUFBUSxFQUNSLE1BQU0sRUFDTix3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTeEQsTUFBTTs7Ozs7OztJQU9KLFlBQW9CLE9BQXVCLEVBQVUsU0FBbUIsRUFBVSxJQUE4QixFQUFVLEtBQWE7UUFBbkgsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBMEI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ3JJLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDN0U7Ozs7OztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQXFCOztRQUN0RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7O1FBQ2pCLE1BQU0sY0FBYyxHQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENB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cUIsRUFBRSxPQUFvQixFQUFFLElBQWM7O1FBQzFGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyRTs7OztJQUVELE1BQU0sQ0FBQyxJQUFJO1FBQ1QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2pCLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0I7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNuQixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3pCLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0Y7O2dCQW5JZ0IsSUFBSTtjQUNFLElBQUk7Z0JBQ1MsSUFBSTswQkFDcUIsSUFBSTtnQkFDaEMsSUFBSTs7WUFOdEMsVUFBVTs7OztZQWRULGNBQWM7WUFDZCxRQUFRO1lBRVIsd0JBQXdCO1lBRHhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21waWxlcixcbiAgTmdab25lLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RDb21wb25lbnQgfSBmcm9tICcuL3RvYXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2FzdE9wdGlvbnMgfSBmcm9tICcuL3RvYXN0LW9wdGlvbnMucHJvdmlkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0ludGVyZmFjZSB7XG4gIGNvbnRlbnQ/OiBhbnk7XG4gIGljb25UeXBlPzogc3RyaW5nO1xuICBtYXNrPzogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRvYXN0IHtcbiAgc3RhdGljIHRpbWVvdXQgPSBudWxsO1xuICBzdGF0aWMgX3pvbmU6IE5nWm9uZSA9IG51bGw7XG4gIHN0YXRpYyBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiA9IG51bGw7XG4gIHN0YXRpYyBfdG9hc3RDb21wRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxUb2FzdENvbXBvbmVudD4gPSBudWxsO1xuICBzdGF0aWMgX2FwcFJlZjogQXBwbGljYXRpb25SZWYgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FwcFJlZjogQXBwbGljYXRpb25SZWYsIHByaXZhdGUgX2NvbXBpbGVyOiBDb21waWxlciwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgX3pvbmU6IE5nWm9uZSkge1xuICAgIFRvYXN0Ll96b25lID0gdGhpcy5fem9uZTtcbiAgICBUb2FzdC5fYXBwUmVmID0gdGhpcy5fYXBwUmVmO1xuICAgIFRvYXN0Ll90b2FzdENvbXBGYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvYXN0Q29tcG9uZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW5pdENvbmZpZyhjb25maWc6IE9iamVjdCwgb3B0aW9uczogVG9hc3RPcHRpb25zKTogT2JqZWN0IHtcbiAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zOiBzdHJpbmdbXSA9IFsnY29udGVudCcsICdpY29uVHlwZScsICdtYXNrJ107XG5cbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIGNvbmZpZyk7XG4gICAgb3B0aW9uYWxQYXJhbXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNba2V5XSA9IGNvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaWNvblR5cGUgPSB7XG4gICAgICBpbmZvOiAnJyxcbiAgICAgIHN1Y2Nlc3M6ICdzdWNjZXNzJyxcbiAgICAgIGZhaWw6ICdmYWlsJyxcbiAgICAgIG9mZmxpbmU6ICdkaXNsaWtlJyxcbiAgICAgIGxvYWRpbmc6ICdsb2FkaW5nJ1xuICAgIH1bb3B0aW9ucy5pY29uVHlwZV07XG5cbiAgICBwcm9wc1snaWNvblR5cGUnXSA9IGljb25UeXBlO1xuICAgIHByb3BzWydtYXNrJ10gPSBvcHRpb25zLm1hc2s7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgc3RhdGljIG5vdGljZShjb25maWc6IENvbmZpZ0ludGVyZmFjZSwgdHlwZSwgdGltZUludGVydmFsID0gMjAwMCwgb25DbG9zZSwgbWFzayA9IHRydWUpIHtcbiAgICAvLyDlpoLmnpzlt7Lnu4/lrZjlnKjvvIzlnKjmsqHmnInpga7nvanlsYLnmoTmg4XlhrXkuIvvvIzkvJrlk43lupTliKvnmoR0b2FzdO+8jOmcgOimgea4hemZpOWOn+adpeeahFxuICAgIGlmIChUb2FzdC5jb21wUmVmKSB7XG4gICAgICBUb2FzdC5oaWRlKCk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnM6IFRvYXN0T3B0aW9ucyA9IG5ldyBUb2FzdE9wdGlvbnMoKTtcbiAgICBvcHRpb25zLmljb25UeXBlID0gdHlwZTtcbiAgICBvcHRpb25zLm1hc2sgPSBtYXNrO1xuICAgIGNvbnN0IHByb3BzID0gVG9hc3QuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcblxuICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVG9hc3QuX3RvYXN0Q29tcEZhY3Rvcnkuc2VsZWN0b3IpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgIGxldCBpbnN0YW5jZTogYW55O1xuICAgIGxldCBzdWJqZWN0OiBhbnk7XG5cbiAgICBUb2FzdC5jb21wUmVmID0gVG9hc3QuX2FwcFJlZi5ib290c3RyYXAoVG9hc3QuX3RvYXN0Q29tcEZhY3RvcnkpO1xuICAgIGluc3RhbmNlID0gVG9hc3QuY29tcFJlZi5pbnN0YW5jZTtcbiAgICBzdWJqZWN0ID0gaW5zdGFuY2Uuc3ViamVjdDtcblxuICAgIGlmICh0aW1lSW50ZXJ2YWwpIHtcbiAgICAgIFRvYXN0LnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgVG9hc3QuaGlkZSgpO1xuICAgICAgfSwgdGltZUludGVydmFsKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBwcm9wcyk7XG4gICAgcmV0dXJuIHN1YmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBpbmZvIGRpYWxvZ1xuICAgKi9cbiAgc3RhdGljIGluZm8oY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBvbkNsb3NlPzogKCkgPT4gdm9pZCwgbWFzaz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGljb25UeXBlOiAnaW5mbycsXG4gICAgICBjb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIFRvYXN0Lm5vdGljZShjb25maWcsICdpbmZvJywgdGltZUludGVydmFsLCBvbkNsb3NlLCBtYXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHN1Y2Nlc3MgZGlhbG9nXG4gICAqL1xuICBzdGF0aWMgc3VjY2Vzcyhjb250ZW50Pzogc3RyaW5nLCB0aW1lSW50ZXJ2YWw/OiBudW1iZXIsIG9uQ2xvc2U/OiAoKSA9PiB2b2lkLCBtYXNrPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gVG9hc3Qubm90aWNlKGNvbmZpZywgJ3N1Y2Nlc3MnLCB0aW1lSW50ZXJ2YWwsIG9uQ2xvc2UsIG1hc2spO1xuICB9XG5cbiAgc3RhdGljIHNob3coY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBtYXNrPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdpbmZvJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gVG9hc3Qubm90aWNlKGNvbmZpZywgJ2luZm8nLCB0aW1lSW50ZXJ2YWwsICgpID0+IHt9LCBtYXNrKTtcbiAgfVxuXG4gIHN0YXRpYyBmYWlsKGNvbnRlbnQ/OiBzdHJpbmcsIHRpbWVJbnRlcnZhbD86IG51bWJlciwgb25DbG9zZT86ICgpID0+IHZvaWQsIG1hc2s/OiBib29sZWFuKSB7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBpY29uVHlwZTogJ2ZhaWwnLFxuICAgICAgY29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIHJldHVybiBUb2FzdC5ub3RpY2UoY29uZmlnLCAnZmFpbCcsIHRpbWVJbnRlcnZhbCwgb25DbG9zZSwgbWFzayk7XG4gIH1cblxuICBzdGF0aWMgb2ZmbGluZShjb250ZW50Pzogc3RyaW5nLCB0aW1lSW50ZXJ2YWw/OiBudW1iZXIsIG9uQ2xvc2U/OiAoKSA9PiB2b2lkLCBtYXNrPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdvZmZsaW5lJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gVG9hc3Qubm90aWNlKGNvbmZpZywgJ29mZmxpbmUnLCB0aW1lSW50ZXJ2YWwsIG9uQ2xvc2UsIG1hc2spO1xuICB9XG5cbiAgc3RhdGljIGxvYWRpbmcoY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBvbkNsb3NlPzogKCkgPT4gdm9pZCwgbWFzaz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGljb25UeXBlOiAnbG9hZGluZycsXG4gICAgICBjb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIFRvYXN0Lm5vdGljZShjb25maWcsICdsb2FkaW5nJywgdGltZUludGVydmFsLCBvbkNsb3NlLCBtYXNrKTtcbiAgfVxuXG4gIHN0YXRpYyBoaWRlKCkge1xuICAgIGlmIChUb2FzdC50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoVG9hc3QudGltZW91dCk7XG4gICAgfVxuICAgIGlmIChUb2FzdC5jb21wUmVmKSB7XG4gICAgICBUb2FzdC5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBUb2FzdC5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgVG9hc3QuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=