ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
175 lines (174 loc) • 15.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable, ApplicationRef, ComponentFactoryResolver } from '@angular/core';
import { ActionSheetComponent } from './action-sheet.component';
import { ActionSheetOptions } from './action-sheet-options.provider';
/** @type {?} */
const NORMAL = 'NORMAL';
/** @type {?} */
const SHARE = 'SHARE';
/**
* @return {?}
*/
function noop() { }
export class ActionSheet {
/**
* @param {?} _appRef
* @param {?} _cfr
*/
constructor(_appRef, _cfr) {
this._appRef = _appRef;
this._cfr = _cfr;
ActionSheet.appRef = this._appRef;
ActionSheet._actionSheetCompFactory = this._cfr.resolveComponentFactory(ActionSheetComponent);
}
/**
* @param {?} config
* @param {?=} options
* @return {?}
*/
static _initConfig(config, options = {}) {
/** @type {?} */
const props = new ActionSheetOptions();
/** @type {?} */
const optionalParams = [
'prefixCls',
'maskClosable',
'cancelButtonIndex',
'destructiveButtonIndex',
'title',
'message',
'className',
'transitionName',
'maskTransitionName',
'options'
];
config = Object.assign(options, config);
optionalParams.forEach(key => {
if (config[key] !== undefined) {
props[key] = config[key];
}
});
return props;
}
/**
* @param {?} props
* @param {?} factory
* @return {?}
*/
static _open(props, factory) {
document.body.insertBefore(document.createElement(factory.selector), document.body.firstChild);
/** @type {?} */
let subject;
ActionSheet.compRef = ActionSheet.appRef.bootstrap(factory);
ActionSheet.instance = ActionSheet.compRef.instance;
subject = ActionSheet.instance.subject;
Object.assign(ActionSheet.instance, props);
return subject;
}
/**
* @param {?} flag
* @param {?} config
* @param {?} callback
* @return {?}
*/
static createActionSheet(flag, config, callback) {
/** @type {?} */
const options = new ActionSheetOptions();
/** @type {?} */
const transitionName = config.transitionName ? config.transitionName : options.transitionName;
options.transitionName = `${transitionName}-enter ${transitionName}-enter-active`;
/** @type {?} */
const maskTransitionName = config.maskTransitionName ? config.maskTransitionName : options.maskTransitionName;
options.maskTransitionName = `${maskTransitionName}-enter ${maskTransitionName}-enter-active`;
/** @type {?} */
const props = ActionSheet._initConfig(config, options);
Object.assign(props, { onPress: cb }, { flag: flag });
/**
* @param {?} index
* @param {?=} rowIndex
* @param {?=} event
* @return {?}
*/
function cb(index, rowIndex = 0, event) {
event.stopPropagation();
/** @type {?} */
const res = callback(index, rowIndex);
if (res && res.then) {
res.then(() => {
ActionSheet.closeWithAnimation(transitionName, maskTransitionName);
});
}
else {
ActionSheet.closeWithAnimation(transitionName, maskTransitionName);
}
}
return ActionSheet._open(props, ActionSheet._actionSheetCompFactory);
}
/**
* @param {?} transitionName
* @param {?} maskTransitionName
* @return {?}
*/
static closeWithAnimation(transitionName, maskTransitionName) {
ActionSheet.instance.transitionName = `${transitionName}-leave ${transitionName}-leave-active`;
ActionSheet.instance.maskTransitionName = `${maskTransitionName}-leave ${maskTransitionName}-leave-active`;
setTimeout(() => {
ActionSheet.close();
}, 200);
}
/**
* @param {?} config
* @param {?=} callback
* @return {?}
*/
static showActionSheetWithOptions(config, callback = noop) {
ActionSheet.createActionSheet(NORMAL, config, callback);
}
/**
* @param {?} config
* @param {?=} callback
* @return {?}
*/
static showShareActionSheetWithOptions(config, callback = noop) {
ActionSheet.createActionSheet(SHARE, config, callback);
}
/**
* @return {?}
*/
static close() {
if (ActionSheet.compRef) {
ActionSheet.compRef.destroy();
ActionSheet.compRef = null;
}
}
}
ActionSheet.compRef = null;
ActionSheet._actionSheetCompFactory = null;
ActionSheet.appRef = null;
ActionSheet.instance = null;
ActionSheet.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ActionSheet.ctorParameters = () => [
{ type: ApplicationRef },
{ type: ComponentFactoryResolver }
];
if (false) {
/** @type {?} */
ActionSheet.compRef;
/** @type {?} */
ActionSheet._actionSheetCompFactory;
/** @type {?} */
ActionSheet.appRef;
/** @type {?} */
ActionSheet.instance;
/** @type {?} */
ActionSheet.prototype._appRef;
/** @type {?} */
ActionSheet.prototype._cfr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXNoZWV0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImFjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBa0MsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxrQkFBa0IsRUFHbkIsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHekMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDOztBQUN4QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7Ozs7QUFDdEIsbUJBQWtCO0FBR2xCLE1BQU07Ozs7O0lBTUosWUFBb0IsT0FBdUIsRUFBVSxJQUE4QjtRQUEvRCxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQTBCO1FBQ2pGLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNsQyxXQUFXLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBQy9GOzs7Ozs7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQTBCLEVBQUUsVUFBa0IsRUFBRTs7UUFDakUsTUFBTSxLQUFLLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQzs7UUFDM0QsTUFBTSxjQUFjLEdBQWE7WUFDL0IsV0FBVztZQUNYLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsd0JBQXdCO1lBQ3hCLE9BQU87WUFDUCxTQUFTO1lBQ1QsV0FBVztZQUNYLGdCQUFnQjtZQUNoQixvQkFBb0I7WUFDcEIsU0FBUztTQUNWLENBQUM7UUFDRixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FB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QWMsVUFBVSxjQUFjLGVBQWUsQ0FBQztRQUMvRixXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsa0JBQWtCLFVBQVUsa0JBQWtCLGVBQWUsQ0FBQztRQUMzRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3JCLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDVDs7Ozs7O0lBRUQsTUFBTSxDQUFDLDBCQUEwQixDQUFDLE1BQThCLEVBQUUsV0FBMkIsSUFBSTtRQUMvRixXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN6RDs7Ozs7O0lBRUQsTUFBTSxDQUFDLCtCQUErQixDQUFDLE1BQW1DLEVBQUUsV0FBMkIsSUFBSTtRQUN6RyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN4RDs7OztJQUVELE1BQU0sQ0FBQyxLQUFLO1FBQ1YsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDNUI7S0FDRjs7c0JBM0ZtQyxJQUFJO3NDQUNpQyxJQUFJO3FCQUM3QyxJQUFJO3VCQUVsQixJQUFJOztZQU52QixVQUFVOzs7O1lBZDBDLGNBQWM7WUFBRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBDb21wb25lbnRSZWYsIENvbXBvbmVudEZhY3RvcnksIEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvblNoZWV0Q29tcG9uZW50IH0gZnJvbSAnLi9hY3Rpb24tc2hlZXQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNhbGxCYWNrLFxuICBBY3Rpb25TaGVldE9wdGlvbnMsXG4gIEFjdGlvblNoZWV0V2l0aE9wdGlvbnMsXG4gIFNoYXJlQWN0aW9uU2hlZXRXaXRoT3B0aW9uc1xufSBmcm9tICcuL2FjdGlvbi1zaGVldC1vcHRpb25zLnByb3ZpZGVyJztcbmltcG9ydCB7IEFjdGlvblNoZWV0U3ViamVjdCB9IGZyb20gJy4vYWN0aW9uLXNoZWV0LXN1YmplY3Quc2VydmljZSc7XG5cbmNvbnN0IE5PUk1BTCA9ICdOT1JNQUwnO1xuY29uc3QgU0hBUkUgPSAnU0hBUkUnO1xuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY3Rpb25TaGVldCB7XG4gIHN0YXRpYyBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiA9IG51bGw7XG4gIHN0YXRpYyBfYWN0aW9uU2hlZXRDb21wRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxBY3Rpb25TaGVldENvbXBvbmVudD4gPSBudWxsO1xuICBzdGF0aWMgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiA9IG51bGw7XG5cbiAgc3RhdGljIGluc3RhbmNlID0gbnVsbDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZiwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICBBY3Rpb25TaGVldC5hcHBSZWYgPSB0aGlzLl9hcHBSZWY7XG4gICAgQWN0aW9uU2hlZXQuX2FjdGlvblNoZWV0Q29tcEZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQWN0aW9uU2hlZXRDb21wb25lbnQpO1xuICB9XG5cbiAgc3RhdGljIF9pbml0Q29uZmlnKGNvbmZpZzogQWN0aW9uU2hlZXRPcHRpb25zLCBvcHRpb25zOiBPYmplY3QgPSB7fSk6IEFjdGlvblNoZWV0T3B0aW9ucyB7XG4gICAgY29uc3QgcHJvcHM6IEFjdGlvblNoZWV0T3B0aW9ucyA9IG5ldyBBY3Rpb25TaGVldE9wdGlvbnMoKTtcbiAgICBjb25zdCBvcHRpb25hbFBhcmFtczogc3RyaW5nW10gPSBbXG4gICAgICAncHJlZml4Q2xzJyxcbiAgICAgICdtYXNrQ2xvc2FibGUnLFxuICAgICAgJ2NhbmNlbEJ1dHRvbkluZGV4JyxcbiAgICAgICdkZXN0cnVjdGl2ZUJ1dHRvbkluZGV4JyxcbiAgICAgICd0aXRsZScsXG4gICAgICAnbWVzc2FnZScsXG4gICAgICAnY2xhc3NOYW1lJyxcbiAgICAgICd0cmFuc2l0aW9uTmFtZScsXG4gICAgICAnbWFza1RyYW5zaXRpb25OYW1lJyxcbiAgICAgICdvcHRpb25zJ1xuICAgIF07XG4gICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbihvcHRpb25zLCBjb25maWcpO1xuICAgIG9wdGlvbmFsUGFyYW1zLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChjb25maWdba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSBjb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICBzdGF0aWMgX29wZW4ocHJvcHM6IEFjdGlvblNoZWV0T3B0aW9ucywgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+KTogQWN0aW9uU2hlZXRTdWJqZWN0IHtcbiAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KGZhY3Rvcnkuc2VsZWN0b3IpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgIGxldCBzdWJqZWN0OiBhbnk7XG5cbiAgICBBY3Rpb25TaGVldC5jb21wUmVmID0gQWN0aW9uU2hlZXQuYXBwUmVmLmJvb3RzdHJhcChmYWN0b3J5KTtcbiAgICBBY3Rpb25TaGVldC5pbnN0YW5jZSA9IEFjdGlvblNoZWV0LmNvbXBSZWYuaW5zdGFuY2U7XG4gICAgc3ViamVjdCA9IEFjdGlvblNoZWV0Lmluc3RhbmNlLnN1YmplY3Q7XG4gICAgT2JqZWN0LmFzc2lnbihBY3Rpb25TaGVldC5pbnN0YW5jZSwgcHJvcHMpO1xuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUFjdGlvblNoZWV0KFxuICAgIGZsYWc6IHN0cmluZyxcbiAgICBjb25maWc6IEFjdGlvblNoZWV0V2l0aE9wdGlvbnMgfCBTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEFjdGlvbkNhbGxCYWNrXG4gICkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEFjdGlvblNoZWV0T3B0aW9ucyA9IG5ldyBBY3Rpb25TaGVldE9wdGlvbnMoKTtcbiAgICBjb25zdCB0cmFuc2l0aW9uTmFtZSA9IGNvbmZpZy50cmFuc2l0aW9uTmFtZSA/IGNvbmZpZy50cmFuc2l0aW9uTmFtZSA6IG9wdGlvbnMudHJhbnNpdGlvbk5hbWU7XG4gICAgb3B0aW9ucy50cmFuc2l0aW9uTmFtZSA9IGAke3RyYW5zaXRpb25OYW1lfS1lbnRlciAke3RyYW5zaXRpb25OYW1lfS1lbnRlci1hY3RpdmVgO1xuICAgIGNvbnN0IG1hc2tUcmFuc2l0aW9uTmFtZSA9IGNvbmZpZy5tYXNrVHJhbnNpdGlvbk5hbWUgPyBjb25maWcubWFza1RyYW5zaXRpb25OYW1lIDogb3B0aW9ucy5tYXNrVHJhbnNpdGlvbk5hbWU7XG4gICAgb3B0aW9ucy5tYXNrVHJhbnNpdGlvbk5hbWUgPSBgJHttYXNrVHJhbnNpdGlvbk5hbWV9LWVudGVyICR7bWFza1RyYW5zaXRpb25OYW1lfS1lbnRlci1hY3RpdmVgO1xuICAgIGNvbnN0IHByb3BzID0gQWN0aW9uU2hlZXQuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICBPYmplY3QuYXNzaWduKHByb3BzLCB7IG9uUHJlc3M6IGNiIH0sIHsgZmxhZzogZmxhZyB9KTtcbiAgICBmdW5jdGlvbiBjYihpbmRleDogYW55LCByb3dJbmRleCA9IDAsIGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGluZGV4LCByb3dJbmRleCk7XG4gICAgICBpZiAocmVzICYmIHJlcy50aGVuKSB7XG4gICAgICAgIHJlcy50aGVuKCgpID0+IHtcbiAgICAgICAgICBBY3Rpb25TaGVldC5jbG9zZVdpdGhBbmltYXRpb24odHJhbnNpdGlvbk5hbWUsIG1hc2tUcmFuc2l0aW9uTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQWN0aW9uU2hlZXQuY2xvc2VXaXRoQW5pbWF0aW9uKHRyYW5zaXRpb25OYW1lLCBtYXNrVHJhbnNpdGlvbk5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQWN0aW9uU2hlZXQuX29wZW4ocHJvcHMsIEFjdGlvblNoZWV0Ll9hY3Rpb25TaGVldENvbXBGYWN0b3J5KTtcbiAgfVxuXG4gIHN0YXRpYyBjbG9zZVdpdGhBbmltYXRpb24odHJhbnNpdGlvbk5hbWUsIG1hc2tUcmFuc2l0aW9uTmFtZSkge1xuICAgIEFjdGlvblNoZWV0Lmluc3RhbmNlLnRyYW5zaXRpb25OYW1lID0gYCR7dHJhbnNpdGlvbk5hbWV9LWxlYXZlICR7dHJhbnNpdGlvbk5hbWV9LWxlYXZlLWFjdGl2ZWA7XG4gICAgQWN0aW9uU2hlZXQuaW5zdGFuY2UubWFza1RyYW5zaXRpb25OYW1lID0gYCR7bWFza1RyYW5zaXRpb25OYW1lfS1sZWF2ZSAke21hc2tUcmFuc2l0aW9uTmFtZX0tbGVhdmUtYWN0aXZlYDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIEFjdGlvblNoZWV0LmNsb3NlKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHN0YXRpYyBzaG93QWN0aW9uU2hlZXRXaXRoT3B0aW9ucyhjb25maWc6IEFjdGlvblNoZWV0V2l0aE9wdGlvbnMsIGNhbGxiYWNrOiBBY3Rpb25DYWxsQmFjayA9IG5vb3ApIHtcbiAgICBBY3Rpb25TaGVldC5jcmVhdGVBY3Rpb25TaGVldChOT1JNQUwsIGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG5cbiAgc3RhdGljIHNob3dTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMoY29uZmlnOiBTaGFyZUFjdGlvblNoZWV0V2l0aE9wdGlvbnMsIGNhbGxiYWNrOiBBY3Rpb25DYWxsQmFjayA9IG5vb3ApIHtcbiAgICBBY3Rpb25TaGVldC5jcmVhdGVBY3Rpb25TaGVldChTSEFSRSwgY29uZmlnLCBjYWxsYmFjayk7XG4gIH1cblxuICBzdGF0aWMgY2xvc2UoKSB7XG4gICAgaWYgKEFjdGlvblNoZWV0LmNvbXBSZWYpIHtcbiAgICAgIEFjdGlvblNoZWV0LmNvbXBSZWYuZGVzdHJveSgpO1xuICAgICAgQWN0aW9uU2hlZXQuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=