Skip to content

Commit 6959b99

Browse files
committed
add open/close methods
1 parent e4b1fee commit 6959b99

File tree

6 files changed

+60
-14
lines changed

6 files changed

+60
-14
lines changed

docs/src/pages/components/Snackbar.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,32 +28,32 @@
2828

2929
<md-snackbar md-position="bottom center" ref="snackbar1">
3030
<span>Connection timeout. Showing limited messages.</span>
31-
<md-button class="md-accent" v-md-theme="'light-blue'" @click="$refs.snackbar1.close()">Retry</md-button>
31+
<md-button class="md-accent" md-theme="light-blue" @click="$refs.snackbar1.close()">Retry</md-button>
3232
</md-snackbar>
3333

3434
<md-snackbar md-position="bottom left" ref="snackbar2">
3535
<span>Connection timeout. Showing limited messages.</span>
36-
<md-button class="md-accent" v-md-theme="'light-blue'" @click="$refs.snackbar2.close()">Retry</md-button>
36+
<md-button class="md-accent" md-theme="light-blue" @click="$refs.snackbar2.close()">Retry</md-button>
3737
</md-snackbar>
3838

3939
<md-snackbar md-position="bottom right" ref="snackbar3">
4040
<span>Connection timeout. Showing limited messages.</span>
41-
<md-button class="md-accent" v-md-theme="'light-blue'" @click="$refs.snackbar3.close()">Retry</md-button>
41+
<md-button class="md-accent" md-theme="light-blue" @click="$refs.snackbar3.close()">Retry</md-button>
4242
</md-snackbar>
4343

4444
<md-snackbar md-position="top center" ref="snackbar4">
4545
<span>Connection timeout. Showing limited messages.</span>
46-
<md-button class="md-accent" v-md-theme="'light-blue'" @click="$refs.snackbar4.close()">Retry</md-button>
46+
<md-button class="md-accent" md-theme="light-blue" @click="$refs.snackbar4.close()">Retry</md-button>
4747
</md-snackbar>
4848

4949
<md-snackbar md-position="top left" ref="snackbar5">
5050
<span>Connection timeout. Showing limited messages.</span>
51-
<md-button class="md-accent" v-md-theme="'light-blue'" @click="$refs.snackbar5.close()">Retry</md-button>
51+
<md-button class="md-accent" md-theme="light-blue" @click="$refs.snackbar5.close()">Retry</md-button>
5252
</md-snackbar>
5353

5454
<md-snackbar md-position="top right" ref="snackbar6">
5555
<span>Connection timeout. Showing limited messages.</span>
56-
<md-button class="md-accent" v-md-theme="'light-blue'" @click="$refs.snackbar6.close()">Retry</md-button>
56+
<md-button class="md-accent" md-theme="light-blue" @click="$refs.snackbar6.close()">Retry</md-button>
5757
</md-snackbar>
5858
</div>
5959

docs/src/routes.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const Menu = (resolve) => require(['./pages/components/Menu'], resolve);
2121
const Radio = (resolve) => require(['./pages/components/Radio'], resolve);
2222
const Select = (resolve) => require(['./pages/components/Select'], resolve);
2323
const Sidenav = (resolve) => require(['./pages/components/Sidenav'], resolve);
24-
/*const Snackbar = (resolve) => require(['./pages/components/Snackbar'], resolve);*/
24+
const Snackbar = (resolve) => require(['./pages/components/Snackbar'], resolve);
2525
const Spinner = (resolve) => require(['./pages/components/Spinner'], resolve);
2626
const Subheader = (resolve) => require(['./pages/components/Subheader'], resolve);
2727
const Switch = (resolve) => require(['./pages/components/Switch'], resolve);
@@ -143,11 +143,11 @@ const components = [
143143
name: 'components:sidenav',
144144
component: Sidenav
145145
},
146-
/* {
146+
{
147147
path: '/components/snackbar',
148148
name: 'components:snackbar',
149149
component: Snackbar
150-
}, */
150+
},
151151
{
152152
path: '/components/spinner',
153153
name: 'components:spinner',
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Vue from 'vue';
2+
3+
const manager = new Vue({
4+
data() {
5+
return {
6+
current: null
7+
};
8+
}
9+
});
10+
11+
export default manager;

src/components/mdSnackbar/mdSnackbar.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
@import '../../core/stylesheets/variables.scss';
2+
@import '../../core/stylesheets/mixins.scss';
23

34
.md-snackbar {
5+
width: auto;
46
min-width: 288px;
57
max-width: 568px;
68
min-height: 48px;
@@ -14,6 +16,11 @@
1416
color: #fff;
1517
font-size: 14px;
1618

19+
@include layout-xsmall {
20+
max-width: 100%;
21+
border-radius: 0;
22+
}
23+
1724
&.md-position-bottom-center {
1825
bottom: 0;
1926
left: 50%;

src/components/mdSnackbar/mdSnackbar.vue

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="md-snackbar" :class="classes">
2+
<div class="md-snackbar" :class="classes" :id="snackbarId">
33
<div class="md-snackbar-content">
44
<slot></slot>
55
</div>
@@ -9,8 +9,13 @@
99
<style lang="scss" src="./mdSnackbar.scss"></style>
1010

1111
<script>
12+
import uniqueId from '../../core/utils/uniqueId';
13+
import transitionEndEventName from '../../core/utils/transitionEndEventName';
14+
import manager from './manager';
15+
1216
export default {
1317
props: {
18+
id: [String, Number],
1419
mdPosition: {
1520
type: String,
1621
default: 'bottom center'
@@ -22,9 +27,11 @@
2227
},
2328
data() {
2429
return {
30+
snackbarId: this.id || 'snackbar-' + uniqueId(),
2531
active: false,
2632
rootElement: {},
27-
snackbarElement: {}
33+
snackbarElement: {},
34+
closeTimeout: null
2835
};
2936
},
3037
computed: {
@@ -40,22 +47,43 @@
4047
},
4148
methods: {
4249
open() {
50+
if (manager.current) {
51+
manager.current.close();
52+
}
53+
54+
manager.current = this;
55+
this.rootElement.appendChild(this.snackbarElement);
56+
window.getComputedStyle(this.snackbarElement).backgroundColor;
4357
this.active = true;
4458
this.$emit('open');
59+
//this.closeTimeout = window.setTimeout(this.close, this.mdDuration);
4560
},
4661
close() {
62+
const removeElement = () => {
63+
this.snackbarElement.removeEventListener(transitionEndEventName, removeElement);
64+
65+
if (this.rootElement.contains(this.snackbarElement)) {
66+
this.rootElement.removeChild(this.snackbarElement);
67+
}
68+
};
69+
70+
manager.current = null;
4771
this.active = false;
4872
this.$emit('close');
73+
this.snackbarElement.removeEventListener(transitionEndEventName, removeElement);
74+
this.snackbarElement.addEventListener(transitionEndEventName, removeElement);
75+
window.clearTimeout(this.closeTimeout);
4976
}
5077
},
5178
mounted() {
5279
this.$nextTick(() => {
5380
this.rootElement = this.$root.$el;
5481
this.snackbarElement = this.$el;
82+
this.snackbarElement.parentNode.removeChild(this.snackbarElement);
5583
});
5684
},
5785
beforeDestroy() {
58-
86+
this.close();
5987
}
6088
};
6189
</script>

src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import MdMenu from './components/mdMenu';
1616
import MdRadio from './components/mdRadio';
1717
import MdSelect from './components/mdSelect';
1818
import MdSidenav from './components/mdSidenav';
19-
/*import MdSnackbar from './components/mdSnackbar';*/
19+
import MdSnackbar from './components/mdSnackbar';
2020
import MdSpinner from './components/mdSpinner';
2121
import MdSubheader from './components/mdSubheader';
2222
import MdSwitch from './components/mdSwitch';
@@ -45,7 +45,7 @@ const options = {
4545
MdRadio,
4646
MdSelect,
4747
MdSidenav,
48-
/*MdSnackbar,*/
48+
MdSnackbar,
4949
MdSpinner,
5050
MdSubheader,
5151
MdSwitch,

0 commit comments

Comments
 (0)