123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 'use strict';
- var defaultData = require('./data');
- function getDialogCtx(_ref) {
- var selector = _ref.selector,
- pageCtx = _ref.pageCtx;
- var ctx = pageCtx;
- if (!ctx) {
- var pages = getCurrentPages();
- ctx = pages[pages.length - 1];
- }
- return ctx.selectComponent(selector);
- }
- function getParsedOptions() {
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- return Object.assign({
- // 自定义 btn 列表
- // { type: 按钮类型,回调时以此作为区分依据,text: 按钮文案, color: 按钮文字颜色 }
- buttons: []
- }, defaultData, options);
- }
- // options 使用参数
- // pageCtx 页面 page 上下文
- function Dialog(options, pageCtx) {
- var parsedOptions = getParsedOptions(options);
- var dialogCtx = getDialogCtx({
- selector: parsedOptions.selector,
- pageCtx: pageCtx
- });
- if (!dialogCtx) {
- console.error('无法找到对应的dialog组件,请于页面中注册并在 wxml 中声明 dialog 自定义组件');
- return Promise.reject({ type: 'component error' });
- }
- // 处理默认按钮的展示
- // 纵向排布确认按钮在上方
- var _parsedOptions$button = parsedOptions.buttons,
- buttons = _parsedOptions$button === undefined ? [] : _parsedOptions$button;
- var showCustomBtns = false;
- if (buttons.length === 0) {
- if (parsedOptions.showConfirmButton) {
- buttons.push({
- type: 'confirm',
- text: parsedOptions.confirmButtonText,
- color: parsedOptions.confirmButtonColor
- });
- }
- if (parsedOptions.showCancelButton) {
- var cancelButton = {
- type: 'cancel',
- text: parsedOptions.cancelButtonText,
- color: parsedOptions.cancelButtonColor
- };
- if (parsedOptions.buttonsShowVertical) {
- buttons.push(cancelButton);
- } else {
- buttons.unshift(cancelButton);
- }
- }
- } else {
- showCustomBtns = true;
- }
- return new Promise(function (resolve, reject) {
- dialogCtx.setData(Object.assign({}, parsedOptions, {
- buttons: buttons,
- showCustomBtns: showCustomBtns,
- key: '' + new Date().getTime(),
- show: true,
- promiseFunc: { resolve: resolve, reject: reject },
- openTypePromiseFunc: null
- }));
- });
- }
- Dialog.close = function (options, pageCtx) {
- var parsedOptions = getParsedOptions(options);
- var dialogCtx = getDialogCtx({
- selector: parsedOptions.selector,
- pageCtx: pageCtx
- });
- if (!dialogCtx) {
- return;
- }
- dialogCtx.setData({
- show: false,
- promiseFunc: null,
- openTypePromiseFunc: null
- });
- };
- module.exports = Dialog;
|