Skip to content

Commit f55dd8f

Browse files
authored
Merge pull request #172 from XLPeng57/158-update-events-handler
#158: deprecate onXXX methods and implement event off and once methods
2 parents e1a286e + 68273fd commit f55dd8f

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

src/Map.js

+69-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ export default class Map {
3333
TREE_SELECTED: 'tree-selected',
3434
TREE_UNSELECTED: 'tree-unselected',
3535
MOVE_END: 'move-end',
36+
LOAD: 'load',
37+
TREE_CLICKED: 'tree-clicked',
38+
FIND_NEAREST: 'find-nearest',
39+
ERROR: 'error',
3640
}
3741

3842
constructor(options) {
@@ -70,6 +74,19 @@ export default class Map {
7074
this._mountDomElement = null
7175

7276
log.warn('map core version:', require('../package.json').version)
77+
78+
// Deprecation warnings
79+
let deprecatedMethods = [
80+
'onLoad',
81+
'onClickTree',
82+
'onFindNearestAt',
83+
'onError',
84+
]
85+
deprecatedMethods.forEach((method) => {
86+
if (this[method]) {
87+
log.warn(`${method} is deprecated. Use map.on() instead.`)
88+
}
89+
})
7390
}
7491

7592
/** *************************** static *************************** */
@@ -517,6 +534,10 @@ export default class Map {
517534
this._selectMarker(data)
518535
if (this.onClickTree) {
519536
this.onClickTree(data)
537+
} else if (
538+
this.events.listenerCount(Map.REGISTERED_EVENTS.TREE_CLICKED) > 0
539+
) {
540+
this.events.emit(Map.REGISTERED_EVENTS.TREE_CLICKED, data)
520541
}
521542
} else if (data.type === 'cluster') {
522543
if (data.zoom_to) {
@@ -1306,6 +1327,8 @@ export default class Map {
13061327
// fire load event
13071328
if (this.onLoad) {
13081329
this.onLoad()
1330+
} else if (this.events.listenerCount(Map.REGISTERED_EVENTS.LOAD) > 0) {
1331+
this.events.emit(Map.REGISTERED_EVENTS.LOAD)
13091332
}
13101333

13111334
if (this.debug) {
@@ -1317,16 +1340,61 @@ export default class Map {
13171340
log.error('map error:', e)
13181341
if (this.onError) {
13191342
this.onError(e)
1343+
} else if (this.events.listenerCount(Map.REGISTERED_EVENTS.ERROR) > 0) {
1344+
this.events.emit(Map.REGISTERED_EVENTS.ERROR, e)
13201345
}
13211346
}
13221347
}
13231348
}
13241349

13251350
on(eventName, handler) {
1326-
//TODO check event name enum
1351+
const isValidEvent = Object.values(Map.REGISTERED_EVENTS).includes(
1352+
eventName,
1353+
)
1354+
if (!isValidEvent) {
1355+
log.error('Invalid event name:', eventName)
1356+
return
1357+
}
1358+
13271359
if (handler) {
13281360
log.info('register event:', eventName)
13291361
this.events.on(eventName, handler)
1362+
} else {
1363+
log.error('No handler provided for event:', eventName)
1364+
}
1365+
}
1366+
1367+
off(eventName, handler) {
1368+
const isValidEvent = Object.values(Map.REGISTERED_EVENTS).includes(
1369+
eventName,
1370+
)
1371+
if (!isValidEvent) {
1372+
log.error('Invalid event name:', eventName)
1373+
return
1374+
}
1375+
1376+
if (handler) {
1377+
log.info('remove event:', eventName)
1378+
this.events.off(eventName, handler)
1379+
} else {
1380+
log.error('No handler provided for event removal:', eventName)
1381+
}
1382+
}
1383+
1384+
once(eventName, handler) {
1385+
const isValidEvent = Object.values(Map.REGISTERED_EVENTS).includes(
1386+
eventName,
1387+
)
1388+
if (!isValidEvent) {
1389+
log.error('Invalid event name:', eventName)
1390+
return
1391+
}
1392+
1393+
if (handler) {
1394+
log.info('register one-time event:', eventName)
1395+
this.events.once(eventName, handler)
1396+
} else {
1397+
log.error('No handler provided for this one-time event:', eventName)
13301398
}
13311399
}
13321400

0 commit comments

Comments
 (0)