2
0
Эх сурвалжийг харах

Add a `cleanup` hook

- Move view-related cleanup code out of core.
- Call `remove` on `_converse.chatboxviews` during cleanup
JC Brand 5 жил өмнө
parent
commit
2fcce78144

+ 5 - 0
src/converse-chatboxviews.js

@@ -135,6 +135,11 @@ converse.plugins.add('converse-chatboxviews', {
 
 
 
 
         /************************ BEGIN Event Handlers ************************/
         /************************ BEGIN Event Handlers ************************/
+        api.listen.on('cleanup', () => {
+            _converse?.chatboxviews.remove();
+            delete _converse.chatboxviews;
+        });
+
         api.listen.on('chatBoxesInitialized', () => {
         api.listen.on('chatBoxesInitialized', () => {
             _converse.chatboxviews = new _converse.ChatBoxViews({
             _converse.chatboxviews = new _converse.ChatBoxViews({
                 'model': _converse.chatboxes
                 'model': _converse.chatboxes

+ 1 - 0
src/converse-controlbox.js

@@ -554,6 +554,7 @@ converse.plugins.add('converse-controlbox', {
 
 
 
 
         /******************** Event Handlers ********************/
         /******************** Event Handlers ********************/
+        api.listen.on('cleanup', () => (delete _converse.controlboxtoggle));
 
 
         api.listen.on('chatBoxViewsInitialized', () => {
         api.listen.on('chatBoxViewsInitialized', () => {
             _converse.chatboxes.on('add', item => {
             _converse.chatboxes.on('add', item => {

+ 6 - 11
src/headless/converse-core.js

@@ -1307,18 +1307,13 @@ async function getLoginCredentialsFromBrowser () {
 }
 }
 
 
 
 
-function cleanup () {
-    // Make sure everything is reset in case this is a subsequent call to
-    // converse.initialize (happens during tests).
+// Make sure everything is reset in case this is a subsequent call to
+// converse.initialize (happens during tests).
+async function cleanup () {
+    await _converse.api.trigger('cleanup', {'synchronous': true});
     _converse.router.history.stop();
     _converse.router.history.stop();
     unregisterGlobalEventHandlers();
     unregisterGlobalEventHandlers();
-    delete _converse.controlboxtoggle;
-    if (_converse.chatboxviews) {
-        delete _converse.chatboxviews;
-    }
-    if (_converse.connection) {
-        _converse.connection.reset();
-    }
+    _converse.connection?.reset();
     _converse.stopListening();
     _converse.stopListening();
     _converse.off();
     _converse.off();
 }
 }
@@ -1528,7 +1523,7 @@ Object.assign(converse, {
      * });
      * });
      */
      */
     async initialize (settings) {
     async initialize (settings) {
-        cleanup();
+        await cleanup();
         PROMISES.forEach(name => api.promises.add(name));
         PROMISES.forEach(name => api.promises.add(name));
         setUnloadEvent();
         setUnloadEvent();
         initSettings(settings);
         initSettings(settings);