Allow events to be synchronous
When a synchronous event is fired, Converse will wait for all promises returned by the event's handlers to finish before continuing.
This commit is contained in:
parent
6dea4eabe7
commit
0688907e0d
|
@ -1,6 +1,10 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## 5.0.0 (Unreleased)
|
## 5.0.0 (Unreleased)
|
||||||
|
- Allow for synchronous events. When a synchronous event is fired, Converse will
|
||||||
|
wait for all promises returned by the event's handlers to finish before continuing.
|
||||||
|
- Properly handle message correction being received before the corrected message
|
||||||
|
- Properly handle message correction being received before the corrected message
|
||||||
- Groupchat default configuration now supports `list-multi` fields
|
- Groupchat default configuration now supports `list-multi` fields
|
||||||
- Bugfix: Don't set `muc_domain` for roomspanel if `locked_muc_domain` is `true`.
|
- Bugfix: Don't set `muc_domain` for roomspanel if `locked_muc_domain` is `true`.
|
||||||
- Bugfix: Modal auto-closes when you open it for a second time.
|
- Bugfix: Modal auto-closes when you open it for a second time.
|
||||||
|
@ -15,12 +19,11 @@
|
||||||
- New config setting [muc_show_join_leave_status](https://conversejs.org/docs/html/configuration.html#muc-show-join-leave-status)
|
- New config setting [muc_show_join_leave_status](https://conversejs.org/docs/html/configuration.html#muc-show-join-leave-status)
|
||||||
- New config option [singleton](https://conversejs.org/docs/html/configuration.html#singleton).
|
- New config option [singleton](https://conversejs.org/docs/html/configuration.html#singleton).
|
||||||
By setting this option to `false` and `view_mode` to `'embedded'`, it's now possible to
|
By setting this option to `false` and `view_mode` to `'embedded'`, it's now possible to
|
||||||
"embed" the full app and not just a single chat. To embed just a single chat,
|
"embed" the full app and not just a single chat. To embed just a single chat, it's now
|
||||||
it's now necessary to explicitly set `singleton` to `true`.
|
necessary to explicitly set `singleton` to `true`.
|
||||||
- New event: `chatBoxBlurred`.
|
- New event: `chatBoxBlurred`.
|
||||||
- New event: [chatBoxBlurred](https://conversejs.org/docs/html/api/-_converse.html#event:chatBoxBlurred)
|
- New event: [chatBoxBlurred](https://conversejs.org/docs/html/api/-_converse.html#event:chatBoxBlurred)
|
||||||
- New event: [chatReconnected](https://conversejs.org/docs/html/api/-_converse.html#event:chatReconnected)
|
- New event: [chatReconnected](https://conversejs.org/docs/html/api/-_converse.html#event:chatReconnected)
|
||||||
- Properly handle message correction being received before the corrected message
|
|
||||||
- #1296: `embedded` view mode shows `chatbox-navback` arrow in header
|
- #1296: `embedded` view mode shows `chatbox-navback` arrow in header
|
||||||
- #1465: When highlighting a roster contact, they're incorrectly shown as online
|
- #1465: When highlighting a roster contact, they're incorrectly shown as online
|
||||||
- #1532: Converse reloads on enter pressed in the filter box
|
- #1532: Converse reloads on enter pressed in the filter box
|
||||||
|
|
|
@ -1446,10 +1446,23 @@ _converse.api = {
|
||||||
* (see [_converse.api.listen](http://localhost:8000/docs/html/api/-_converse.api.listen.html)).
|
* (see [_converse.api.listen](http://localhost:8000/docs/html/api/-_converse.api.listen.html)).
|
||||||
*
|
*
|
||||||
* @method _converse.api.trigger
|
* @method _converse.api.trigger
|
||||||
|
* @param {string} name - The event name
|
||||||
|
* @param {...any} [argument] - Argument to be passed to the event handler
|
||||||
|
* @param {object} [options]
|
||||||
|
* @param {boolean} [options.synchronous] - Whether the event is synchronous or not.
|
||||||
|
* When a synchronous event is fired, Converse will wait for all
|
||||||
|
* promises returned by the event's handlers to finish before continuing.
|
||||||
*/
|
*/
|
||||||
'trigger' (name) {
|
async trigger (name) {
|
||||||
/* Event emitter and promise resolver */
|
/* Event emitter and promise resolver */
|
||||||
_converse.trigger.apply(_converse, arguments);
|
const args = Array.from(arguments);
|
||||||
|
const options = args.pop();
|
||||||
|
if (options.synchronous) {
|
||||||
|
const events = _converse._events[name] || [];
|
||||||
|
await Promise.all(events.map(e => e.callback.call(e.ctx, args)));
|
||||||
|
} else {
|
||||||
|
_converse.trigger.apply(_converse, arguments);
|
||||||
|
}
|
||||||
const promise = _converse.promises[name];
|
const promise = _converse.promises[name];
|
||||||
if (!_.isUndefined(promise)) {
|
if (!_.isUndefined(promise)) {
|
||||||
promise.resolve();
|
promise.resolve();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user