xmpp.chapril.org-conversejs/src/plugins/rosterview/rosterview.js

63 lines
2.1 KiB
JavaScript

import tpl_roster from "./templates/roster.js";
import { CustomElement } from 'shared/components/element.js';
import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api } from "@converse/headless/core";
/**
* @class
* @namespace _converse.RosterView
* @memberOf _converse
*/
export default class RosterView extends CustomElement {
async initialize () {
await api.waitUntil('rosterInitialized')
this.listenTo(_converse, 'rosterContactsFetched', this.requestUpdate);
this.listenTo(_converse.presences, 'change:show', this.requestUpdate);
this.listenTo(_converse.roster, 'add', this.requestUpdate);
this.listenTo(_converse.roster, 'destroy', this.requestUpdate);
this.listenTo(_converse.roster, 'remove', this.requestUpdate);
this.listenTo(_converse.roster, 'change', this.requestUpdate);
this.listenTo(_converse.roster.state, 'change', this.requestUpdate);
/**
* Triggered once the _converse.RosterView instance has been created and initialized.
* @event _converse#rosterViewInitialized
* @example _converse.api.listen.on('rosterViewInitialized', () => { ... });
*/
api.trigger('rosterViewInitialized');
}
firstUpdated () {
this.listenToRosterFilter();
}
render () {
return tpl_roster(this);
}
listenToRosterFilter () {
this.filter_view = this.querySelector('converse-roster-filter');
this.filter_view.addEventListener('update', () => this.requestUpdate());
}
showAddContactModal (ev) { // eslint-disable-line class-methods-use-this
api.modal.show(_converse.AddContactModal, {'model': new Model()}, ev);
}
async syncContacts (ev) { // eslint-disable-line class-methods-use-this
ev.preventDefault();
this.syncing_contacts = true;
this.requestUpdate();
_converse.roster.data.save('version', null);
await _converse.roster.fetchFromServer();
api.user.presence.send();
this.syncing_contacts = false;
this.requestUpdate();
}
}
api.elements.define('converse-roster', RosterView);