Skip to content

Commit ac02f9e

Browse files
committed
fix(Modals): bottom sheet and tests
Most tests can be removed, because they test html functionality. Just adapted them to work again.
1 parent 712cdfc commit ac02f9e

File tree

3 files changed

+125
-273
lines changed

3 files changed

+125
-273
lines changed

sass/components/_modal.scss

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,9 @@ dialog::backdrop {
6060

6161
// Modal Bottom Sheet Style
6262
.modal.bottom-sheet {
63-
top: auto;
64-
bottom: -100%;
65-
margin: 0;
66-
width: 100%;
63+
margin-bottom: 0;
6764
max-height: 45%;
68-
border-radius: 0;
65+
border-bottom-left-radius: 0;
66+
border-bottom-right-radius: 0;
6967
will-change: bottom, opacity;
7068
}

spec/tests/modal/modalSpec.js

Lines changed: 31 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,59 @@
11
/* eslint-disable no-undef */
22

33
describe('Modal:', () => {
4-
let trigger1, modal1;
4+
const fixture = `<a class="btn tonal trigger waves-effect waves-light" href="#" onclick="modal1.showModal(); return false;">Modal</a>
5+
<button class="btn btn-floating fixed-action-btn" onclick="modal1.showModal()"><i class="material-icons">menu</i></button>
56
6-
const fixture = `<!-- Modal Trigger -->
7-
<a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>
8-
<button class="btn btn-floating fixed-action-btn modal-trigger" data-target="modal1"><i class="material-icons">menu</i></button>
9-
10-
<!-- Modal Structure -->
11-
<div id="modal1" class="modal">
12-
<div class="modal-content">
7+
<dialog id="modal1" class="modal">
8+
<div class="modal-header">
139
<h4>Modal Header</h4>
14-
<p>A bunch of text</p>
1510
</div>
16-
<div class="modal-footer">
17-
<a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
18-
</div>
19-
</div>
20-
21-
22-
<!-- Modal Trigger -->
23-
<a class="waves-effect waves-light btn modal-trigger" href="#modal2">Modal</a>
24-
25-
<!-- Modal Structure -->
26-
<div id="modal2" class="modal modal-fixed-footer">
2711
<div class="modal-content">
28-
<h4>Modal Header</h4>
2912
<p>A bunch of text</p>
3013
</div>
3114
<div class="modal-footer">
32-
<a href="#!" class="modal-close waves-effect waves-green btn-flat ">Agree</a>
15+
<a href="#" onclick="modal1.close(); return false;" class="waves-effect waves-green btn-flat">Agree</a>
3316
</div>
34-
</div>
35-
36-
<!-- Modal Trigger -->
37-
<a class="waves-effect waves-light btn modal-trigger" href="#modal3">Modal</a>
38-
39-
<!-- Modal Structure -->
40-
<div id="modal3" class="modal bottom-sheet">
41-
<div class="modal-content">
42-
<h4>Modal Header</h4>
43-
<p>A bunch of text</p>
44-
</div>
45-
<div class="modal-footer">
46-
<a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
47-
</div>
48-
</div>
17+
</dialog>
4918
`;
19+
5020
beforeEach(() => {
5121
XloadHtml(fixture);
52-
trigger1 = document.querySelector('.btn[href="#modal1"]');
53-
triggerIcon1 = document.querySelector('.btn[data-target="modal1"] i');
54-
trigger2 = document.querySelector('.btn[href="#modal2"]');
55-
trigger3 = document.querySelector('.btn[href="#modal3"]');
56-
modal1 = document.querySelector('#modal1');
57-
modal2 = document.querySelector('#modal2');
58-
modal3 = document.querySelector('#modal3');
5922
});
6023
afterEach(() => XunloadFixtures());
6124

6225
describe('Modals', () => {
6326
it('Should open and close correctly', (done) => {
64-
M.Modal.init(modal1, { inDuration: 0, outDuration: 0 });
27+
const modal1 = document.querySelector('.modal');
28+
const trigger = document.querySelector('.trigger');
6529
expect(modal1).toBeHidden('Modal should be hidden');
66-
click(trigger1);
30+
click(trigger);
6731
setTimeout(() => {
6832
expect(modal1).toBeVisible('Modal should be shown');
69-
expect(modal1).toHaveClass('open', 'Modal should have class open');
70-
// Check overlay is attached
71-
let overlay = M.Modal.getInstance(modal1)._overlay;
72-
let overlayInDOM = document.contains(overlay);
73-
expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open');
74-
click(overlay);
75-
setTimeout(() => {
76-
expect(modal1).toNotHaveClass('open', 'Modal should have class open removed');
77-
let overlayInDOM = document.contains(overlay);
78-
expect(overlayInDOM).toEqual(false, 'Overlay should be removed on close');
79-
done();
80-
}, 10);
33+
done();
8134
}, 10);
8235
});
8336

8437
it('Should open and close correctly with children elements in trigger', (done) => {
85-
M.Modal.init(modal1, { inDuration: 0, outDuration: 0 });
38+
const modal1 = document.querySelector('.modal');
39+
const triggerIcon1 = document.querySelector('button i');
8640
expect(modal1).toBeHidden('Modal should be hidden');
8741
click(triggerIcon1);
8842
setTimeout(() => {
8943
expect(modal1).toBeVisible('Modal should be shown');
90-
expect(modal1).toHaveClass('open', 'Modal should have class open');
91-
// Check overlay is attached
92-
let overlay = M.Modal.getInstance(modal1)._overlay;
93-
let overlayInDOM = document.contains(overlay);
94-
expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open');
95-
click(overlay);
96-
setTimeout(() => {
97-
expect(modal1).toNotHaveClass('open', 'Modal should have class open removed');
98-
let overlayInDOM = document.contains(overlay);
99-
expect(overlayInDOM).toEqual(false, 'Overlay should be removed on close');
100-
done();
101-
}, 10);
44+
done();
10245
}, 10);
10346
});
10447

48+
// Modals should not be dismissible, use a Popover then
49+
50+
/*
10551
it('Should have a dismissible option', (done) => {
106-
M.Modal.init(modal1, {
107-
dismissible: false,
108-
inDuration: 0,
109-
outDuration: 0
110-
});
52+
// M.Modal.init(modal1, {
53+
// dismissible: false,
54+
// inDuration: 0,
55+
// outDuration: 0
56+
// });
11157
click(trigger1);
11258
setTimeout(() => {
11359
expect(modal1).toBeVisible('Modal should be shown');
@@ -123,33 +69,20 @@ describe('Modal:', () => {
12369
}, 10);
12470
}, 10);
12571
});
72+
*/
12673

12774
it('Should have callbacks', (done) => {
128-
let readyTest = false;
129-
let completeTest = false;
130-
M.Modal.init(modal1, {
131-
inDuration: 0,
132-
outDuration: 0,
133-
onOpenStart: () => {
134-
readyTest = true;
135-
},
136-
onCloseStart: () => {
137-
completeTest = true;
138-
}
75+
let hasBeenClosed = false;
76+
document.querySelector('.modal').addEventListener('close', () => {
77+
hasBeenClosed = true;
13978
});
140-
expect(readyTest).toEqual(false, 'callback not yet fired');
141-
expect(completeTest).toEqual(false, 'callback not yet fired');
79+
const trigger1 = document.querySelector('.trigger');
14280
click(trigger1);
81+
expect(hasBeenClosed).toEqual(false, 'callback not yet fired');
82+
click(document.querySelector('.modal-footer a'));
14383
setTimeout(() => {
144-
expect(readyTest).toEqual(true, 'callback fired');
145-
expect(completeTest).toEqual(false, 'callback not yet fired');
146-
let overlay = M.Modal.getInstance(modal1)._overlay;
147-
click(overlay);
148-
setTimeout(() => {
149-
expect(readyTest).toEqual(true, 'callback fired');
150-
expect(completeTest).toEqual(true, 'callback fired');
151-
done();
152-
}, 10);
84+
expect(hasBeenClosed).toEqual(true, 'callback fired');
85+
done();
15386
}, 10);
15487
});
15588
});

0 commit comments

Comments
 (0)