From 947d253dad7f08a677aba095463e988624e60eee Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Wed, 19 Jul 2017 20:38:14 -0300 Subject: [PATCH] feat(collapse): apply bootstrap classes during transition stages (issue #565) (#707) * Update collapse.vue * Update toggle.js * Update collapse.spec.js * [collapse] document show, shown, hide, hidden events * Update meta.json --- __tests__/components/collapse.spec.js | 38 ++++++--- docs/components/collapse/meta.json | 16 ++++ lib/components/collapse.vue | 116 ++++++++++++++------------ lib/directives/toggle.js | 7 ++ 4 files changed, 112 insertions(+), 65 deletions(-) diff --git a/__tests__/components/collapse.spec.js b/__tests__/components/collapse.spec.js index e3e143425fc..76202f8cbbb 100755 --- a/__tests__/components/collapse.spec.js +++ b/__tests__/components/collapse.spec.js @@ -1,4 +1,4 @@ -import {loadFixture, testVM, setData, nextTick} from '../helpers'; +import {loadFixture, testVM, setData, nextTick, sleep} from '../helpers'; describe('collapse', async() => { beforeEach(loadFixture('collapse')); @@ -139,32 +139,44 @@ describe('collapse', async() => { const btn3 = $refs.accordion_3_btn const col3 = $refs.accordion_3 - expect(col1.$el.classList.contains('show')).toBe(true) expect(btn1.$el.getAttribute('aria-expanded')).toBe('true') - expect(col2.$el.classList.contains('show')).toBe(false) expect(btn2.$el.getAttribute('aria-expanded')).toBe('false') - expect(col3.$el.classList.contains('show')).toBe(false) expect(btn3.$el.getAttribute('aria-expanded')).toBe('false') - btn2.$el.click(); + expect(col1.show).toBe(true) + expect(col2.show).toBe(false) + expect(col3.show).toBe(false) + + // Open pane 2 and close others + btn2.$el.click() await nextTick() - - expect(col1.$el.classList.contains('show')).toBe(false) + expect(btn1.$el.getAttribute('aria-expanded')).toBe('false') - expect(col2.$el.classList.contains('show')).toBe(true) expect(btn2.$el.getAttribute('aria-expanded')).toBe('true') - expect(col3.$el.classList.contains('show')).toBe(false) expect(btn3.$el.getAttribute('aria-expanded')).toBe('false') - btn2.$el.click(); + await nextTick() + + expect(col1.show).toBe(false) + expect(col2.show).toBe(true) + expect(col3.show).toBe(false) + + await nextTick() + + // Close all accordion panes + btn2.$el.click() await nextTick() - expect(col1.$el.classList.contains('show')).toBe(false) expect(btn1.$el.getAttribute('aria-expanded')).toBe('false') - expect(col2.$el.classList.contains('show')).toBe(false) expect(btn2.$el.getAttribute('aria-expanded')).toBe('false') - expect(col3.$el.classList.contains('show')).toBe(false) expect(btn3.$el.getAttribute('aria-expanded')).toBe('false') + + await nextTick() + + expect(col1.show).toBe(false) + expect(col2.show).toBe(false) + expect(col3.show).toBe(false) + }) }); diff --git a/docs/components/collapse/meta.json b/docs/components/collapse/meta.json index 95574b49d53..0b7c336151c 100755 --- a/docs/components/collapse/meta.json +++ b/docs/components/collapse/meta.json @@ -2,6 +2,22 @@ "title": "Collapse", "component": "bCollapse", "events": [ + { + "event": "show", + "description": "emitted when collaspe has started to open" + }, + { + "event": "shown", + "description": "emitted when collaspe has finised opening" + }, + { + "event": "hide", + "description": "emitted when collaspe has started to close" + }, + { + "event": "hidden", + "description": "emitted when collaspe has finished closing" + }, { "event": "collapse::toggle", "description": "toggles visible state of collaspe when this event emits on $root", diff --git a/lib/components/collapse.vue b/lib/components/collapse.vue index 366d4a741b9..f319560fea2 100755 --- a/lib/components/collapse.vue +++ b/lib/components/collapse.vue @@ -1,10 +1,15 @@ - -