1
1
import { createElement , useEffect , useState , useRef } from 'react'
2
2
import { default as Axios } from 'axios'
3
- import { except , only } from './helpers'
3
+ import { except , only , kebabCase } from './helpers'
4
4
import { router , usePage } from '@inertiajs/react'
5
5
import { mergeDataIntoQueryString } from '@inertiajs/core'
6
6
import { createContext , useContext } from 'react'
@@ -164,11 +164,13 @@ export const ModalStackProvider = ({ children }) => {
164
164
}
165
165
166
166
on = ( event , callback ) => {
167
+ event = kebabCase ( event )
167
168
this . listeners [ event ] = this . listeners [ event ] ?? [ ]
168
169
this . listeners [ event ] . push ( callback )
169
170
}
170
171
171
172
off = ( event , callback ) => {
173
+ event = kebabCase ( event )
172
174
if ( callback ) {
173
175
this . listeners [ event ] = this . listeners [ event ] ?. filter ( ( cb ) => cb !== callback ) ?? [ ]
174
176
} else {
@@ -177,7 +179,7 @@ export const ModalStackProvider = ({ children }) => {
177
179
}
178
180
179
181
emit = ( event , ...args ) => {
180
- this . listeners [ event ] ?. forEach ( ( callback ) => callback ( ...args ) )
182
+ this . listeners [ kebabCase ( event ) ] ?. forEach ( ( callback ) => callback ( ...args ) )
181
183
}
182
184
183
185
registerEventListenersFromProps = ( props ) => {
@@ -187,14 +189,9 @@ export const ModalStackProvider = ({ children }) => {
187
189
. filter ( ( key ) => key . startsWith ( 'on' ) )
188
190
. forEach ( ( key ) => {
189
191
// e.g. onRefreshKey -> refresh-key
190
- const snakeCaseKey = key
191
- . replace ( / ^ o n / , '' )
192
- . replace ( / ^ ./ , ( firstLetter ) => firstLetter . toLowerCase ( ) )
193
- . replace ( / ( [ A - Z ] ) / g, '-$1' )
194
- . toLowerCase ( )
195
-
196
- this . on ( snakeCaseKey , props [ key ] )
197
- unsubscribers . push ( ( ) => this . off ( snakeCaseKey , props [ key ] ) )
192
+ const eventName = kebabCase ( key ) . replace ( / ^ o n - / , '' )
193
+ this . on ( eventName , props [ key ] )
194
+ unsubscribers . push ( ( ) => this . off ( eventName , props [ key ] ) )
198
195
} )
199
196
200
197
return ( ) => unsubscribers . forEach ( ( unsub ) => unsub ( ) )
@@ -274,7 +271,17 @@ export const ModalStackProvider = ({ children }) => {
274
271
options . onAfterLeave ,
275
272
options . queryStringArrayFormat ?? 'brackets' ,
276
273
options . navigate ?? getConfig ( 'navigate' ) ,
277
- )
274
+ ) . then ( ( modal ) => {
275
+ const listeners = options . listeners ?? { }
276
+
277
+ Object . keys ( listeners ) . forEach ( ( event ) => {
278
+ // e.g. refreshKey -> refresh-key
279
+ const eventName = kebabCase ( event )
280
+ modal . on ( eventName , listeners [ event ] )
281
+ } )
282
+
283
+ return modal
284
+ } )
278
285
279
286
const visit = (
280
287
href ,
0 commit comments