Skip to content

Commit 0f6689a

Browse files
committed
fix: CSidebar: fix closing sidebar onBackdropClick
1 parent 521325c commit 0f6689a

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

src/components/sidebar/CSidebar.vue

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,29 +66,17 @@ export default {
6666
show (val) {
6767
this.open = val
6868
},
69-
open (val, oldVal) {
70-
const backdrop = document.getElementsByClassName('c-sidebar-backdrop')[0]
71-
if (val === true) {
72-
backdrop.className = 'c-sidebar-backdrop c-show'
73-
} else if (oldVal === true) {
74-
backdrop.className = 'c-sidebar-backdrop d-none'
75-
}
69+
open (val) {
70+
val === true ? this.createBackdrop() : this.removeBackdrop()
7671
}
7772
},
7873
mounted () {
79-
const backdrop = document.createElement('div')
8074
if (this.open === true) {
81-
backdrop.className = 'c-sidebar-backdrop c-show'
82-
} else {
83-
backdrop.className = 'c-sidebar-backdrop d-none'
75+
this.createBackdrop()
8476
}
85-
document.body.appendChild(backdrop)
86-
backdrop.addEventListener('click', this.closeSidebar)
8777
},
8878
beforeDestroy () {
89-
const backdrop = document.getElementsByClassName('c-sidebar-backdrop')[0]
90-
backdrop.removeEventListener('click', this.closeSidebar)
91-
document.body.removeChild(backdrop)
79+
this.removeBackdrop()
9280
},
9381
computed: {
9482
sidebarClasses () {
@@ -116,11 +104,25 @@ export default {
116104
}
117105
},
118106
closeSidebar () {
119-
this.open = 'responsive'
120-
this.$emit('update:show', 'responsive')
107+
this.open = this.overlaid ? false : 'responsive'
108+
this.$emit('update:show', this.open)
121109
},
122110
isOnMobile () {
123111
return Boolean(getComputedStyle(this.$el).getPropertyValue('--is-mobile'))
112+
},
113+
createBackdrop () {
114+
const backdrop = document.createElement('div')
115+
backdrop.className = 'c-sidebar-backdrop c-show'
116+
backdrop.id = this._uid + 'backdrop'
117+
document.body.appendChild(backdrop)
118+
backdrop.addEventListener('click', this.closeSidebar)
119+
},
120+
removeBackdrop () {
121+
const backdrop = document.getElementById(this._uid + 'backdrop')
122+
if (backdrop) {
123+
backdrop.removeEventListener('click', this.closeSidebar)
124+
document.body.removeChild(backdrop)
125+
}
124126
}
125127
}
126128
}

src/components/sidebar/tests/CSidebar.spec.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ const App = Vue.extend({
5555
}
5656
})
5757

58-
const sidebarWrapper = mount(App, { attachToDocument: true })
58+
const generateWrapper = () => mount(App, { attachToDocument: true })
59+
const sidebarWrapper = generateWrapper()
5960
const sidebarComponent = sidebarWrapper.vm.$children[0]
6061

6162
describe(`${ComponentName} .vue`, () => {
@@ -84,6 +85,18 @@ describe(`${ComponentName} .vue`, () => {
8485
sidebarClick('link')
8586
expect(sidebarComponent.open).toBe('responsive')
8687
})
88+
it('closes sidebar on backdrop click', () => {
89+
const customWrapper = generateWrapper()
90+
const customComponent = customWrapper.vm.$children[0]
91+
customWrapper.setData({
92+
props: {
93+
overlaid: true,
94+
}
95+
})
96+
expect(customComponent.open).toBe(true)
97+
document.getElementById(customComponent._uid + 'backdrop').click()
98+
expect(customComponent.open).toBe(false)
99+
})
87100
it('watches for prop changes', () => {
88101
sidebarWrapper.setData({
89102
props: {
@@ -100,11 +113,11 @@ describe(`${ComponentName} .vue`, () => {
100113
})
101114
it('properly destroys sidebar', () => {
102115
const currentBackdropNumber = () => {
103-
return document.getElementsByClassName('c-sidebar-backdrop').length
116+
return document.getElementById(sidebarComponent._uid + 'backdrop')
104117
}
105-
expect(currentBackdropNumber()).toBe(2)
118+
expect(currentBackdropNumber()).not.toBe(null)
106119
sidebarWrapper.destroy()
107120
wrapper.destroy()
108-
expect(currentBackdropNumber()).toBe(0)
121+
expect(currentBackdropNumber()).toBe(null)
109122
})
110123
})

0 commit comments

Comments
 (0)