livechat-specific Converse plugin: refactoring
This commit is contained in:
75
conversejs/lib/plugins/livechat-specific/heading.ts
Normal file
75
conversejs/lib/plugins/livechat-specific/heading.ts
Normal file
@ -0,0 +1,75 @@
|
||||
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { destroyMUC } from './utils'
|
||||
|
||||
/**
|
||||
* Do some customization on MUCHeading:
|
||||
* * adds a logout button for users that are authenticated with an external account
|
||||
* * change the destroyMUC handler
|
||||
*
|
||||
* @param plugin The plugin object
|
||||
*/
|
||||
export function customizeHeading (plugin: any): void {
|
||||
const _converse = plugin._converse
|
||||
_converse.api.listen.on('getHeadingButtons', getHeadingButtons.bind(plugin))
|
||||
overrideMUCHeadingElement(_converse)
|
||||
}
|
||||
|
||||
function getHeadingButtons (this: any, view: any, buttons: any[]): any {
|
||||
const _converse = this._converse
|
||||
|
||||
if (view.model.get('type') !== _converse.constants.CHATROOMS_TYPE) {
|
||||
// only on MUC.
|
||||
return buttons
|
||||
}
|
||||
|
||||
if (_converse.api.settings.get('livechat_specific_external_authent')) {
|
||||
// Adding a logout button
|
||||
buttons.push({
|
||||
i18n_text: _converse.__('Log out'),
|
||||
handler: async (ev: Event) => {
|
||||
ev.preventDefault()
|
||||
ev.stopPropagation()
|
||||
|
||||
const messages = [_converse.__('Are you sure you want to leave this groupchat?')]
|
||||
const result = await _converse.api.confirm(_converse.__('Confirm'), messages)
|
||||
if (!result) { return }
|
||||
|
||||
// Deleting access token in sessionStorage.
|
||||
window.sessionStorage.removeItem('peertube-plugin-livechat-external-auth-oidc-token')
|
||||
|
||||
const reconnectMode = _converse.api.settings.get('livechat_external_auth_reconnect_mode')
|
||||
if (reconnectMode === 'button-close-open') {
|
||||
const button = document.getElementsByClassName('peertube-plugin-livechat-button-close')[0]
|
||||
if ((button as HTMLAnchorElement).click) { (button as HTMLAnchorElement).click() }
|
||||
return
|
||||
}
|
||||
|
||||
window.location.reload()
|
||||
},
|
||||
a_class: 'close-chatbox-button',
|
||||
icon_class: 'fa-sign-out-alt',
|
||||
name: 'signout'
|
||||
})
|
||||
}
|
||||
|
||||
return buttons
|
||||
}
|
||||
|
||||
/**
|
||||
* Override the MUCHeading custom element, to customize the destroyMUC function.
|
||||
*/
|
||||
function overrideMUCHeadingElement (_converse: any): void {
|
||||
const MUCHeading = _converse.api.elements.registry['converse-muc-heading']
|
||||
if (MUCHeading) {
|
||||
class MUCHeadingOverloaded extends MUCHeading {
|
||||
async destroy (ev: Event): Promise<void> {
|
||||
ev.preventDefault()
|
||||
await destroyMUC(_converse, this.model) // here we call a custom version of destroyMUC
|
||||
}
|
||||
}
|
||||
_converse.api.elements.define('converse-muc-heading', MUCHeadingOverloaded)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user