Skip to content

Commit f2e0e28

Browse files
authored
Merge pull request alibaba-fusion#51 from alibaba-fusion/fix/message
fix(Message): When there are multiple Message, the first can't close
2 parents 80adcf2 + c721069 commit f2e0e28

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

src/message/toast.jsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,13 @@ const create = props => {
101101

102102
const newContext = ConfigProvider.getContext();
103103

104-
let mask, myRef;
104+
let mask, myRef, destroyed = false;
105+
const destroy = () => {
106+
const inc = mask && mask.getInstance();
107+
inc && inc.handleClose(true);
108+
destroyed = true;
109+
};
110+
105111
ReactDOM.render(
106112
<ConfigProvider {...newContext}>
107113
<NewMask afterClose={closeChain} {...others} ref={ref => {
@@ -110,14 +116,14 @@ const create = props => {
110116
</ConfigProvider>
111117
, div, function() {
112118
mask = myRef;
119+
if (mask && destroyed) {
120+
destroy();
121+
}
113122
});
114123

115124
return {
116125
component: mask,
117-
destroy: () => {
118-
const inc = mask && mask.getInstance();
119-
inc && inc.handleClose(true);
120-
}
126+
destroy
121127
};
122128
};
123129

test/cascader/index-spec.js

+22-10
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ describe('Cascader', () => {
4141
let wrapper;
4242

4343
afterEach(() => {
44-
const overlay = document.querySelectorAll('.next-overlay-wrapper');
45-
overlay.forEach(dom => {
46-
document.body.removeChild(dom);
47-
});
48-
if (wrapper) {
49-
wrapper.unmount();
50-
wrapper = null;
51-
}
44+
const overlay = document.querySelectorAll('.next-overlay-wrapper');
45+
overlay.forEach(dom => {
46+
document.body.removeChild(dom);
47+
});
48+
if (wrapper) {
49+
wrapper.unmount();
50+
wrapper = null;
51+
}
5252
});
5353

5454
it('should render single cascader', () => {
@@ -60,12 +60,16 @@ describe('Cascader', () => {
6060
changeCalled = true;
6161
assert(v === '2980');
6262
delete d.children;
63+
delete d._source;
6364
assert.deepEqual(d, {
6465
value: '2980',
6566
label: '铜川',
6667
pos: '0-0-1'
6768
});
68-
e.selectedPath.forEach(d => delete d.children);
69+
e.selectedPath.forEach(d => {
70+
delete d.children;
71+
delete d._source;
72+
});
6973
assert.deepEqual(e, {
7074
selectedPath: [{
7175
value: '2973',
@@ -100,12 +104,16 @@ describe('Cascader', () => {
100104
changeCalled = true;
101105
assert(v === '2980');
102106
delete d.children;
107+
delete d._source;
103108
assert.deepEqual(d, {
104109
value: '2980',
105110
label: '铜川',
106111
pos: '0-0-1'
107112
});
108-
e.selectedPath.forEach(d => delete d.children);
113+
e.selectedPath.forEach(d => {
114+
delete d.children;
115+
delete d._source;
116+
});
109117
assert.deepEqual(e, {
110118
selectedPath: [{
111119
value: '2973',
@@ -208,6 +216,8 @@ describe('Cascader', () => {
208216
let data;
209217
let extra;
210218
const handleChange = (v, d, e) => {
219+
d.forEach(d => delete d._source);
220+
e.checkedData.forEach(d => delete d._source);
211221
assert.deepEqual(value, sortByValue(v, true));
212222
assert.deepEqual(data, sortByValue(d));
213223
e.checkedData = sortByValue(e.checkedData);
@@ -270,6 +280,8 @@ describe('Cascader', () => {
270280
let data;
271281
let extra;
272282
const handleChange = (v, d, e) => {
283+
d.forEach(d => delete d._source);
284+
e.checkedData.forEach(d => delete d._source);
273285
assert.deepEqual(value, sortByValue(v, true));
274286
assert.deepEqual(data, sortByValue(d));
275287
e.checkedData = sortByValue(e.checkedData);

0 commit comments

Comments
 (0)