@@ -102,13 +102,19 @@ onMounted(() => {
102
102
103
103
const $attrs = useAttrs ()
104
104
105
- function handleEmittedEvent (event , ... args ) {
106
- // // e.g. refresh-key -> onRefreshKey
107
- const kebabEvent = event .replace (/ -([a-z ] )/ g , (g ) => g[1 ].toUpperCase ())
108
- const listener = ` on${ kebabEvent .charAt (0 ).toUpperCase ()}${ kebabEvent .slice (1 )} `
109
- if (listener in $attrs) {
110
- $attrs[listener](... args)
111
- }
105
+ function registerEventListeners () {
106
+ Object .keys ($attrs)
107
+ .filter ((key ) => key .startsWith (' on' ))
108
+ .forEach ((key ) => {
109
+ // e.g. onRefreshKey -> refresh-key
110
+ const snakeCaseKey = key
111
+ .replace (/ ^ on/ , ' ' )
112
+ .replace (/ ^ . / , (firstLetter ) => firstLetter .toLowerCase ())
113
+ .replace (/ ([A-Z ] )/ g , ' -$1' )
114
+ .toLowerCase ()
115
+
116
+ modalContext .value .on (snakeCaseKey, $attrs[key])
117
+ })
112
118
}
113
119
114
120
watch (modalContext, (value , oldValue ) => {
@@ -117,6 +123,9 @@ watch(modalContext, (value, oldValue) => {
117
123
window .location .hash = props .fragment
118
124
}
119
125
126
+ // TODO: after unmounting, remove event listeners
127
+ registerEventListeners ()
128
+
120
129
nextTick (() => {
121
130
modalContext .value .open = true
122
131
emit (' success' )
@@ -168,11 +177,4 @@ function handle() {
168
177
>
169
178
< slot : loading= " loading" / >
170
179
< / component>
171
-
172
- < modalContext .component
173
- v- if = " modalContext?.component"
174
- v- show= " false"
175
- v- bind= " modalContext.componentProps"
176
- @emit= " handleEmittedEvent"
177
- / >
178
180
< / template>
0 commit comments