Let chats be closed by calling close
on the models
Instead of on the views/components. We still have `close` methods on the components, but they are just event handlers and not external API methods to be called by other code. Instead `close` should be called on the model.
This commit is contained in:
parent
9fb92080f2
commit
68f0be996f
|
@ -60,19 +60,6 @@ export default class ChatView extends BaseChatView {
|
|||
_converse.chatboxviews.get('controlbox')?.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes this chat
|
||||
* @private
|
||||
* @method _converse.ChatBoxView#close
|
||||
*/
|
||||
close (ev) {
|
||||
ev?.preventDefault?.();
|
||||
if (_converse.router.history.getFragment() === 'converse/chat?jid=' + this.model.get('jid')) {
|
||||
_converse.router.navigate('');
|
||||
}
|
||||
return this.model.close(ev);
|
||||
}
|
||||
|
||||
afterShown () {
|
||||
this.model.setChatState(_converse.ACTIVE);
|
||||
this.maybeFocus();
|
||||
|
|
|
@ -37,8 +37,9 @@ export default class ChatHeading extends ElementView {
|
|||
api.modal.show(UserDetailsModal, { model: this.model }, ev);
|
||||
}
|
||||
|
||||
close () {
|
||||
_converse.chatboxviews.get(this.getAttribute('jid'))?.close();
|
||||
close (ev) {
|
||||
ev.preventDefault();
|
||||
this.model.close();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,8 +120,6 @@ export default class ChatHeading extends ElementView {
|
|||
})
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
api.elements.define('converse-chat-heading', ChatHeading);
|
||||
|
|
|
@ -9,6 +9,7 @@ import 'shared/chat/help-messages.js';
|
|||
import 'shared/chat/toolbar.js';
|
||||
import ChatView from './chat.js';
|
||||
import { _converse, api, converse } from '@converse/headless/core';
|
||||
import { clearHistory } from './utils.js';
|
||||
|
||||
import './styles/index.scss';
|
||||
|
||||
|
@ -57,5 +58,6 @@ converse.plugins.add('converse-chatview', {
|
|||
_converse.ChatBoxView = ChatView;
|
||||
|
||||
api.listen.on('connected', () => api.disco.own.features.add(Strophe.NS.SPOILER));
|
||||
api.listen.on('chatBoxClosed', (model) => clearHistory(model.get('jid')));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -205,10 +205,10 @@ describe("Chatboxes", function () {
|
|||
await u.waitUntil(() => rosterview.querySelectorAll('.roster-group').length);
|
||||
await mock.openChatBoxFor(_converse, contact_jid);
|
||||
const chatview = _converse.chatboxviews.get(contact_jid);
|
||||
spyOn(chatview, 'close').and.callThrough();
|
||||
spyOn(chatview.model, 'close').and.callThrough();
|
||||
spyOn(_converse.api, "trigger").and.callThrough();
|
||||
chatview.querySelector('.close-chatbox-button').click();
|
||||
expect(chatview.close).toHaveBeenCalled();
|
||||
expect(chatview.model.close).toHaveBeenCalled();
|
||||
await new Promise(resolve => _converse.api.listen.once('chatBoxClosed', resolve));
|
||||
expect(_converse.api.trigger).toHaveBeenCalledWith('chatBoxClosed', jasmine.any(Object));
|
||||
done();
|
||||
|
|
|
@ -3,6 +3,12 @@ import { _converse } from "@converse/headless/core";
|
|||
import { html } from 'lit';
|
||||
|
||||
|
||||
export function clearHistory (jid) {
|
||||
if (_converse.router.history.getFragment() === `converse/chat?jid=${jid}`) {
|
||||
_converse.router.navigate('');
|
||||
}
|
||||
}
|
||||
|
||||
export async function getHeadingDropdownItem (promise_or_data) {
|
||||
const data = await promise_or_data;
|
||||
return html`
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import tpl_trimmed_chat from "../templates/trimmed_chat.js";
|
||||
import { CustomElement } from 'shared/components/element.js';
|
||||
import { api, _converse } from "@converse/headless/core";
|
||||
import { api } from "@converse/headless/core";
|
||||
import { maximize } from '../utils.js';
|
||||
|
||||
|
||||
|
@ -28,15 +28,7 @@ export default class MinimizedChat extends CustomElement {
|
|||
|
||||
close (ev) {
|
||||
ev?.preventDefault();
|
||||
const view = _converse.chatboxviews.get(this.model.get('id'));
|
||||
if (view) {
|
||||
// This will call model.destroy(), removing it from the
|
||||
// collection and will also emit 'chatBoxClosed'
|
||||
view.close();
|
||||
} else {
|
||||
this.model.destroy();
|
||||
api.trigger('chatBoxClosed', this);
|
||||
}
|
||||
this.model.close();
|
||||
}
|
||||
|
||||
restore (ev) {
|
||||
|
|
|
@ -8,7 +8,7 @@ import '../modal.js';
|
|||
import './adhoc-commands.js';
|
||||
import MUCView from './muc.js';
|
||||
import { api, converse } from '@converse/headless/core';
|
||||
import { fetchAndSetMUCDomain } from './utils.js';
|
||||
import { clearHistory, fetchAndSetMUCDomain } from './utils.js';
|
||||
|
||||
import './styles/index.scss';
|
||||
|
||||
|
@ -76,5 +76,11 @@ converse.plugins.add('converse-muc-views', {
|
|||
fetchAndSetMUCDomain(view);
|
||||
view.model.on('change:connected', () => fetchAndSetMUCDomain(view));
|
||||
});
|
||||
|
||||
api.listen.on('chatBoxClosed', (model) => {
|
||||
if (model.get('type') === _converse.CHATROOMS_TYPE) {
|
||||
clearHistory(model.get('jid'));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -40,19 +40,6 @@ export default class MUCView extends BaseChatView {
|
|||
return tpl_muc({ 'model': this.model });
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes this chat, which implies leaving the MUC as well.
|
||||
* @private
|
||||
* @method _converse.ChatRoomView#close
|
||||
*/
|
||||
close (ev) {
|
||||
ev?.preventDefault?.();
|
||||
if (_converse.router.history.getFragment() === 'converse/room?jid=' + this.model.get('jid')) {
|
||||
_converse.router.navigate('');
|
||||
}
|
||||
return this.model.close(ev);
|
||||
}
|
||||
|
||||
async destroy () {
|
||||
const messages = [__('Are you sure you want to destroy this groupchat?')];
|
||||
let fields = [
|
||||
|
|
|
@ -25,6 +25,11 @@ const COMMAND_TO_ROLE = {
|
|||
'voice': 'participant'
|
||||
};
|
||||
|
||||
export function clearHistory (jid) {
|
||||
if (_converse.router.history.getFragment() === `converse/room?jid=${jid}`) {
|
||||
_converse.router.navigate('');
|
||||
}
|
||||
}
|
||||
|
||||
function setMUCDomain (domain, controlboxview) {
|
||||
controlboxview.querySelector('converse-rooms-list')
|
||||
|
|
|
@ -27,6 +27,11 @@ export default class BaseChatView extends CustomElement {
|
|||
}
|
||||
}
|
||||
|
||||
close (ev) {
|
||||
ev?.preventDefault?.();
|
||||
return this.model.close(ev);
|
||||
}
|
||||
|
||||
maybeFocus () {
|
||||
api.settings.get('auto_focus') && this.focus();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user