@tuya-miniapp/smart-ui 2.1.11-beta-6 → 2.1.11-beta-8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,7 @@
1
1
  import { getCurrentPage } from '../common/utils';
2
- let queue = [];
2
+ const queueRef = {
3
+ value: [],
4
+ };
3
5
  const defaultOptions = {
4
6
  show: false,
5
7
  title: '',
@@ -35,13 +37,13 @@ export const contextRef = {
35
37
  const Dialog = (options) => {
36
38
  options = Object.assign(Object.assign({}, currentOptions), options);
37
39
  return new Promise((resolve, reject) => {
38
- var _a;
39
40
  const context = (typeof options.context === 'function' ? options.context() : options.context) ||
40
41
  contextRef.value ||
41
42
  getCurrentPage();
42
43
  const selector = options.selector;
43
44
  const dialog = context.selectComponent(options.selector);
44
- if ((queue === null || queue === void 0 ? void 0 : queue.length) > 0 && ((_a = queue === null || queue === void 0 ? void 0 : queue[0]) === null || _a === void 0 ? void 0 : _a.id) === (dialog === null || dialog === void 0 ? void 0 : dialog.id)) {
45
+ if (queueRef.value.length > 0 &&
46
+ queueRef.value.find(item => dialog && item && item.id === dialog.id)) {
45
47
  console.warn(`相同选择器的 Dialog 调用过于频繁,${dialog.id} 已忽略重复调用`);
46
48
  return;
47
49
  }
@@ -56,13 +58,13 @@ const Dialog = (options) => {
56
58
  /**
57
59
  * 在声明式调用的情况下,在 close 后需要手动清空队列
58
60
  */
59
- queue = [];
61
+ queueRef.value = queueRef.value.filter(item => item.id !== dialog.id);
60
62
  action === 'confirm' ? resolve(instance) : reject(instance);
61
63
  } }, optionsWithInputValue));
62
64
  wx.nextTick(() => {
63
65
  dialog.setData({ show: true });
64
66
  });
65
- queue.push(dialog);
67
+ queueRef.value.push(dialog);
66
68
  }
67
69
  else {
68
70
  console.warn(`未找到 ${(selector !== null && selector !== void 0 ? selector : '#smart-dialog').replace('#', '')} 节点,请确认 selector 及 context 是否正确`);
@@ -73,13 +75,13 @@ Dialog.alert = (options) => Dialog(options);
73
75
  Dialog.confirm = (options) => Dialog(Object.assign({ showCancelButton: true }, options));
74
76
  Dialog.input = ((options) => Dialog(Object.assign({ showCancelButton: true }, options)));
75
77
  Dialog.close = () => {
76
- queue.forEach(dialog => {
78
+ queueRef.value.forEach(dialog => {
77
79
  dialog.close();
78
80
  });
79
- queue = [];
81
+ queueRef.value = [];
80
82
  };
81
83
  Dialog.stopLoading = () => {
82
- queue.forEach(dialog => {
84
+ queueRef.value.forEach(dialog => {
83
85
  dialog.stopLoading();
84
86
  });
85
87
  };
@@ -89,6 +89,7 @@ SmartComponent({
89
89
  confirm: false,
90
90
  cancel: false,
91
91
  },
92
+ actionType: '',
92
93
  callback: (() => { }),
93
94
  },
94
95
  mounted: function () {
@@ -110,12 +111,14 @@ SmartComponent({
110
111
  },
111
112
  close(action) {
112
113
  this.setData({ show: false });
114
+ this.setData({ actionType: action });
113
115
  wx.nextTick(() => {
114
116
  this.$emit('close', action);
115
- const { callback } = this.data;
116
- if (callback) {
117
- callback(action, this);
118
- }
117
+ // const { callback } = this.data;
118
+ // console.log(callback, 'close');
119
+ // if (callback) {
120
+ // callback(action, this);
121
+ // }
119
122
  });
120
123
  },
121
124
  stopLoading() {
@@ -151,5 +154,27 @@ SmartComponent({
151
154
  });
152
155
  }
153
156
  },
157
+ onBeforeEnter() {
158
+ this.$emit('before-enter');
159
+ },
160
+ onEnter() {
161
+ this.$emit('enter');
162
+ },
163
+ onAfterEnter() {
164
+ this.$emit('after-enter');
165
+ },
166
+ onBeforeLeave() {
167
+ this.$emit('before-leave');
168
+ },
169
+ onLeave() {
170
+ this.$emit('leave');
171
+ },
172
+ onAfterLeave() {
173
+ this.$emit('after-leave');
174
+ const { callback, actionType } = this.data;
175
+ if (callback) {
176
+ callback(actionType, this);
177
+ }
178
+ },
154
179
  },
155
180
  });
@@ -11,6 +11,12 @@
11
11
  close-on-click-overlay="{{ closeOnClickOverlay }}"
12
12
  root-portal="{{ rootPortal }}"
13
13
  bind:close="onClickOverlay"
14
+ bind:before-enter="onBeforeEnter"
15
+ bind:enter="onEnter"
16
+ bind:after-enter="onAfterEnter"
17
+ bind:before-leave="onBeforeLeave"
18
+ bind:leave="onLeave"
19
+ bind:after-leave="onAfterLeave"
14
20
  >
15
21
  <view
16
22
  wx:if="{{ title || useTitleSlot }}"
@@ -77,11 +77,16 @@ export function transition(showDefaultValue) {
77
77
  });
78
78
  });
79
79
  });
80
+ this.enterFinishedPromise.catch(err => {
81
+ this.enterFinishedPromise = null;
82
+ console.log(err, '---error');
83
+ });
80
84
  },
81
85
  leave() {
82
86
  if (!this.enterFinishedPromise)
83
87
  return;
84
- this.enterFinishedPromise.then(() => {
88
+ this.enterFinishedPromise
89
+ .then(() => {
85
90
  if (!this.data.display) {
86
91
  return;
87
92
  }
@@ -105,12 +110,16 @@ export function transition(showDefaultValue) {
105
110
  }
106
111
  this.transitionEnded = false;
107
112
  setTimeout(() => {
108
- this.onTransitionEnd();
109
113
  this.enterFinishedPromise = null;
114
+ this.onTransitionEnd();
110
115
  }, currentDuration);
111
116
  this.setData({ classes: classNames['leave-to'] });
112
117
  });
113
118
  });
119
+ })
120
+ .catch(err => {
121
+ this.enterFinishedPromise = null;
122
+ console.log(err, '---error');
114
123
  });
115
124
  },
116
125
  onTransitionEnd() {
@@ -13,7 +13,9 @@ var __assign = (this && this.__assign) || function () {
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.contextRef = void 0;
15
15
  var utils_1 = require("../common/utils");
16
- var queue = [];
16
+ var queueRef = {
17
+ value: [],
18
+ };
17
19
  var defaultOptions = {
18
20
  show: false,
19
21
  title: '',
@@ -49,13 +51,13 @@ exports.contextRef = {
49
51
  var Dialog = function (options) {
50
52
  options = __assign(__assign({}, currentOptions), options);
51
53
  return new Promise(function (resolve, reject) {
52
- var _a;
53
54
  var context = (typeof options.context === 'function' ? options.context() : options.context) ||
54
55
  exports.contextRef.value ||
55
56
  (0, utils_1.getCurrentPage)();
56
57
  var selector = options.selector;
57
58
  var dialog = context.selectComponent(options.selector);
58
- if ((queue === null || queue === void 0 ? void 0 : queue.length) > 0 && ((_a = queue === null || queue === void 0 ? void 0 : queue[0]) === null || _a === void 0 ? void 0 : _a.id) === (dialog === null || dialog === void 0 ? void 0 : dialog.id)) {
59
+ if (queueRef.value.length > 0 &&
60
+ queueRef.value.find(function (item) { return dialog && item && item.id === dialog.id; })) {
59
61
  console.warn("\u76F8\u540C\u9009\u62E9\u5668\u7684 Dialog \u8C03\u7528\u8FC7\u4E8E\u9891\u7E41\uFF0C".concat(dialog.id, " \u5DF2\u5FFD\u7565\u91CD\u590D\u8C03\u7528"));
60
62
  return;
61
63
  }
@@ -70,13 +72,13 @@ var Dialog = function (options) {
70
72
  /**
71
73
  * 在声明式调用的情况下,在 close 后需要手动清空队列
72
74
  */
73
- queue = [];
75
+ queueRef.value = queueRef.value.filter(function (item) { return item.id !== dialog.id; });
74
76
  action === 'confirm' ? resolve(instance) : reject(instance);
75
77
  } }, optionsWithInputValue));
76
78
  wx.nextTick(function () {
77
79
  dialog.setData({ show: true });
78
80
  });
79
- queue.push(dialog);
81
+ queueRef.value.push(dialog);
80
82
  }
81
83
  else {
82
84
  console.warn("\u672A\u627E\u5230 ".concat((selector !== null && selector !== void 0 ? selector : '#smart-dialog').replace('#', ''), " \u8282\u70B9\uFF0C\u8BF7\u786E\u8BA4 selector \u53CA context \u662F\u5426\u6B63\u786E"));
@@ -91,13 +93,13 @@ Dialog.input = (function (options) {
91
93
  return Dialog(__assign({ showCancelButton: true }, options));
92
94
  });
93
95
  Dialog.close = function () {
94
- queue.forEach(function (dialog) {
96
+ queueRef.value.forEach(function (dialog) {
95
97
  dialog.close();
96
98
  });
97
- queue = [];
99
+ queueRef.value = [];
98
100
  };
99
101
  Dialog.stopLoading = function () {
100
- queue.forEach(function (dialog) {
102
+ queueRef.value.forEach(function (dialog) {
101
103
  dialog.stopLoading();
102
104
  });
103
105
  };
@@ -94,6 +94,7 @@ var dialog_1 = require("./dialog");
94
94
  confirm: false,
95
95
  cancel: false,
96
96
  },
97
+ actionType: '',
97
98
  callback: (function () { }),
98
99
  },
99
100
  mounted: function () {
@@ -116,12 +117,14 @@ var dialog_1 = require("./dialog");
116
117
  close: function (action) {
117
118
  var _this = this;
118
119
  this.setData({ show: false });
120
+ this.setData({ actionType: action });
119
121
  wx.nextTick(function () {
120
122
  _this.$emit('close', action);
121
- var callback = _this.data.callback;
122
- if (callback) {
123
- callback(action, _this);
124
- }
123
+ // const { callback } = this.data;
124
+ // console.log(callback, 'close');
125
+ // if (callback) {
126
+ // callback(action, this);
127
+ // }
125
128
  });
126
129
  },
127
130
  stopLoading: function () {
@@ -159,5 +162,27 @@ var dialog_1 = require("./dialog");
159
162
  });
160
163
  }
161
164
  },
165
+ onBeforeEnter: function () {
166
+ this.$emit('before-enter');
167
+ },
168
+ onEnter: function () {
169
+ this.$emit('enter');
170
+ },
171
+ onAfterEnter: function () {
172
+ this.$emit('after-enter');
173
+ },
174
+ onBeforeLeave: function () {
175
+ this.$emit('before-leave');
176
+ },
177
+ onLeave: function () {
178
+ this.$emit('leave');
179
+ },
180
+ onAfterLeave: function () {
181
+ this.$emit('after-leave');
182
+ var _a = this.data, callback = _a.callback, actionType = _a.actionType;
183
+ if (callback) {
184
+ callback(actionType, this);
185
+ }
186
+ },
162
187
  },
163
188
  });
@@ -11,6 +11,12 @@
11
11
  close-on-click-overlay="{{ closeOnClickOverlay }}"
12
12
  root-portal="{{ rootPortal }}"
13
13
  bind:close="onClickOverlay"
14
+ bind:before-enter="onBeforeEnter"
15
+ bind:enter="onEnter"
16
+ bind:after-enter="onAfterEnter"
17
+ bind:before-leave="onBeforeLeave"
18
+ bind:leave="onLeave"
19
+ bind:after-leave="onAfterLeave"
14
20
  >
15
21
  <view
16
22
  wx:if="{{ title || useTitleSlot }}"
@@ -81,12 +81,17 @@ function transition(showDefaultValue) {
81
81
  });
82
82
  });
83
83
  });
84
+ this.enterFinishedPromise.catch(function (err) {
85
+ _this.enterFinishedPromise = null;
86
+ console.log(err, '---error');
87
+ });
84
88
  },
85
89
  leave: function () {
86
90
  var _this = this;
87
91
  if (!this.enterFinishedPromise)
88
92
  return;
89
- this.enterFinishedPromise.then(function () {
93
+ this.enterFinishedPromise
94
+ .then(function () {
90
95
  if (!_this.data.display) {
91
96
  return;
92
97
  }
@@ -110,12 +115,16 @@ function transition(showDefaultValue) {
110
115
  }
111
116
  _this.transitionEnded = false;
112
117
  setTimeout(function () {
113
- _this.onTransitionEnd();
114
118
  _this.enterFinishedPromise = null;
119
+ _this.onTransitionEnd();
115
120
  }, currentDuration);
116
121
  _this.setData({ classes: classNames['leave-to'] });
117
122
  });
118
123
  });
124
+ })
125
+ .catch(function (err) {
126
+ _this.enterFinishedPromise = null;
127
+ console.log(err, '---error');
119
128
  });
120
129
  },
121
130
  onTransitionEnd: function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuya-miniapp/smart-ui",
3
- "version": "2.1.11-beta-6",
3
+ "version": "2.1.11-beta-8",
4
4
  "author": "MiniApp Team",
5
5
  "license": "MIT",
6
6
  "miniprogram": "lib",