Skip to content

Commit 850c9b3

Browse files
committed
refactor: update event names, add new events
1 parent 13a3eca commit 850c9b3

File tree

7 files changed

+129
-31
lines changed

7 files changed

+129
-31
lines changed

src/components/collapse/CCollapse.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,23 @@ const CCollapse = defineComponent({
1111
required: false,
1212
},
1313
},
14-
setup(props, { slots }) {
14+
emits: [
15+
/**
16+
* Callback fired when the component requests to be hidden.
17+
*/
18+
'hide',
19+
/**
20+
* Callback fired when the component requests to be shown.
21+
*/
22+
'show',
23+
],
24+
setup(props, { slots, emit }) {
1525
const handleBeforeEnter = (el: RendererElement) => {
1626
el.classList.remove('collapse')
1727
el.classList.add('collapsing')
1828
}
1929
const handleEnter = (el: RendererElement, done: () => void) => {
30+
emit('show')
2031
el.addEventListener('transitionend', () => {
2132
el.classList.add('collapse', 'show')
2233
done()
@@ -33,6 +44,7 @@ const CCollapse = defineComponent({
3344
el.style.height = `${el.scrollHeight}px`
3445
}
3546
const handleLeave = (el: RendererElement, done: () => void) => {
47+
emit('hide')
3648
el.classList.remove('collapse', 'show')
3749
el.classList.add('collapsing')
3850
el.addEventListener('transitionend', () => {

src/components/dropdown/CDropdown.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,17 @@ const CDropdown = defineComponent({
124124
required: false,
125125
},
126126
},
127-
setup(props, { slots }) {
127+
emits: [
128+
/**
129+
* Callback fired when the component requests to be hidden.
130+
*/
131+
'hide',
132+
/**
133+
* Callback fired when the component requests to be shown.
134+
*/
135+
'show',
136+
],
137+
setup(props, { slots, emit }) {
128138
const dropdownRef = ref()
129139
const dropdownMenuRef = ref()
130140
const placement = ref(props.placement)
@@ -179,10 +189,6 @@ const CDropdown = defineComponent({
179189
popper.value = undefined
180190
}
181191

182-
// const togglePopper = () => {
183-
// visible.value ? initPopper() : destroyPopper()
184-
// }
185-
186192
const toggleMenu = function () {
187193
if (props.disabled === false) {
188194
if (visible.value === true) {
@@ -221,7 +227,10 @@ const CDropdown = defineComponent({
221227
window.removeEventListener('keyup', handleKeyup)
222228
})
223229

224-
watch(visible, () => props.popper && (visible.value ? initPopper() : destroyPopper()))
230+
watch(visible, () => {
231+
props.popper && (visible.value ? initPopper() : destroyPopper())
232+
visible.value ? emit('show') : emit('hide')
233+
})
225234

226235
return () =>
227236
props.variant === 'input-group'

src/components/modal/CModal.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,17 @@ const CModal = defineComponent({
106106
},
107107
emits: [
108108
/**
109-
* Event called before the dissmiss animation has started.
109+
* Callback fired when the component requests to be closed.
110110
*/
111-
'dismiss',
111+
'close',
112+
/**
113+
* Callback fired when the component requests to be closed.
114+
*/
115+
'close-prevented',
116+
/**
117+
* Callback fired when the modal is shown, its backdrop is static and a click outside the modal or an escape key press is performed with the keyboard option set to false.
118+
*/
119+
'show',
112120
],
113121
setup(props, { slots, attrs, emit }) {
114122
const modalRef = ref()
@@ -131,6 +139,7 @@ const CModal = defineComponent({
131139
setTimeout(() => {
132140
el.classList.add('show')
133141
}, 1)
142+
emit('show')
134143
}
135144
const handleAfterEnter = () => {
136145
window.addEventListener('click', handleClickOutside)
@@ -150,7 +159,7 @@ const CModal = defineComponent({
150159
}
151160

152161
const handleDismiss = () => {
153-
emit('dismiss')
162+
emit('close')
154163
visible.value = false
155164
}
156165

@@ -161,6 +170,7 @@ const CModal = defineComponent({
161170
}
162171
if (props.backdrop === 'static') {
163172
modalRef.value.classList.add('modal-static')
173+
emit('close-prevented')
164174
setTimeout(() => {
165175
modalRef.value.classList.remove('modal-static')
166176
}, 300)

src/components/offcanvas/COffcanvas.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,13 @@ const COffcanvas = defineComponent({
5151
},
5252
emits: [
5353
/**
54-
* Event called before the dissmiss animation has started.
54+
* Callback fired when the component requests to be hidden.
5555
*/
56-
'dismiss',
56+
'hide',
57+
/**
58+
* Callback fired when the component requests to be shown.
59+
*/
60+
'show',
5761
],
5862
setup(props, { slots, emit }) {
5963
const offcanvasRef = ref()
@@ -82,6 +86,7 @@ const COffcanvas = defineComponent({
8286
})
8387

8488
const handleEnter = (el: RendererElement, done: () => void) => {
89+
emit('show')
8590
el.addEventListener('transitionend', () => {
8691
done()
8792
})
@@ -108,19 +113,19 @@ const COffcanvas = defineComponent({
108113

109114
const handleDismiss = () => {
110115
visible.value = false
111-
emit('dismiss')
116+
emit('hide')
112117
}
113118

114119
const handleKeyUp = (event: KeyboardEvent) => {
115120
if (offcanvasRef.value && !offcanvasRef.value.contains(event.target as HTMLElement)) {
116-
if (event.key === 'Escape' && props.keyboard) {
121+
if (event.key === 'Escape' && props.keyboard && props.backdrop) {
117122
return handleDismiss()
118123
}
119124
}
120125
}
121126
const handleClickOutside = (event: Event) => {
122127
if (offcanvasRef.value && !offcanvasRef.value.contains(event.target as HTMLElement)) {
123-
handleDismiss()
128+
props.backdrop && handleDismiss()
124129
}
125130
}
126131

src/components/sidebar/CSidebar.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ const CSidebar = defineComponent({
6161
visible: Boolean,
6262
},
6363
emits: [
64+
/**
65+
* Callback fired when the component requests to be hidden.
66+
*/
67+
'hide',
68+
/**
69+
* Callback fired when the component requests to be shown.
70+
*/
71+
'show',
6472
/**
6573
* Event emitted after visibility of component changed.
6674
*/
@@ -74,6 +82,7 @@ const CSidebar = defineComponent({
7482

7583
watch(inViewport, () => {
7684
emit('visible-change', inViewport.value)
85+
inViewport.value ? emit('show') : emit('hide')
7786
})
7887

7988
watch(

src/components/tabs/CTabPane.ts

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { defineComponent, h, toRefs } from 'vue'
1+
import { defineComponent, h, ref, RendererElement, Transition, vShow, withDirectives } from 'vue'
22

33
const CTabPane = defineComponent({
44
name: 'CTabPane',
@@ -12,22 +12,66 @@ const CTabPane = defineComponent({
1212
required: false,
1313
},
1414
},
15-
setup(props, { slots }) {
16-
const { visible } = toRefs(props)
15+
emits: [
16+
/**
17+
* Callback fired when the component requests to be hidden.
18+
*/
19+
'hide',
20+
/**
21+
* Callback fired when the component requests to be shown.
22+
*/
23+
'show',
24+
],
25+
setup(props, { slots, emit }) {
26+
const tabPaneRef = ref()
27+
const firstRender = ref(true)
28+
29+
const handleEnter = (el: RendererElement, done: () => void) => {
30+
firstRender.value = false
31+
emit('show')
32+
setTimeout(() => {
33+
el.classList.add('show')
34+
}, 1)
35+
el.addEventListener('transitionend', () => {
36+
done()
37+
})
38+
}
39+
40+
const handleLeave = (el: RendererElement, done: () => void) => {
41+
firstRender.value = false
42+
emit('hide')
43+
el.classList.remove('show')
44+
el.addEventListener('transitionend', () => {
45+
done()
46+
})
47+
}
1748

1849
return () =>
1950
h(
20-
'div',
51+
Transition,
2152
{
22-
class: [
23-
'tab-pane',
24-
'fade',
25-
{
26-
'show active': visible.value,
27-
},
28-
],
53+
onEnter: (el, done) => handleEnter(el, done),
54+
onLeave: (el, done) => handleLeave(el, done),
2955
},
30-
slots.default && slots.default(),
56+
() =>
57+
withDirectives(
58+
h(
59+
'div',
60+
{
61+
class: [
62+
'tab-pane',
63+
'fade',
64+
{
65+
active: props.visible,
66+
show: firstRender.value && props.visible,
67+
},
68+
],
69+
ref: tabPaneRef,
70+
},
71+
slots.default && slots.default(),
72+
),
73+
[[vShow, props.visible]],
74+
),
3175
)
3276
},
3377
})

src/components/toast/CToast.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ const CToast = defineComponent({
5959
},
6060
emits: [
6161
/**
62-
* Event called before the dissmiss animation has started.
62+
* Callback fired when the component requests to be closed.
6363
*/
64-
'dismiss',
64+
'close',
65+
/**
66+
* Callback fired when the component requests to be shown.
67+
*/
68+
'show',
6569
],
6670
setup(props, { slots, emit }) {
6771
const visible = ref(props.visible)
@@ -79,6 +83,11 @@ const CToast = defineComponent({
7983
setTimeout(() => {
8084
el.classList.add('show')
8185
}, 1)
86+
if (props.key) {
87+
emit('show', props.key)
88+
} else {
89+
emit('show')
90+
}
8291
}
8392
const handleBeforeLeave = (el: RendererElement) => {
8493
el.classList.remove('show')
@@ -92,9 +101,9 @@ const CToast = defineComponent({
92101
const handleAfterLeave = (el: RendererElement) => {
93102
el.classList.add('hide')
94103
if (props.key) {
95-
emit('dismiss', props.key)
104+
emit('close', props.key)
96105
} else {
97-
emit('dismiss')
106+
emit('close')
98107
}
99108
}
100109

0 commit comments

Comments
 (0)