Converse converse.js

Source: plugins/muc-views/role-form.js

  1. import log from '@converse/headless/log';
  2. import tplRoleForm from './templates/role-form.js';
  3. import { CustomElement } from 'shared/components/element.js';
  4. import { __ } from 'i18n';
  5. import { api, converse } from '@converse/headless/core.js';
  6. import { isErrorObject } from '@converse/headless/utils/core.js';
  7. const { Strophe, sizzle } = converse.env;
  8. class RoleForm extends CustomElement {
  9. static get properties () {
  10. return {
  11. muc: { type: Object },
  12. jid: { type: String },
  13. role: { type: String },
  14. alert_message: { type: String, attribute: false },
  15. alert_type: { type: String, attribute: false },
  16. };
  17. }
  18. render () {
  19. return tplRoleForm(this);
  20. }
  21. alert (message, type) {
  22. this.alert_message = message;
  23. this.alert_type = type;
  24. }
  25. assignRole (ev) {
  26. ev.stopPropagation();
  27. ev.preventDefault();
  28. this.alert(); // clear alert
  29. const data = new FormData(ev.target);
  30. const occupant = this.muc.getOccupant(data.get('jid') || data.get('nick'));
  31. const role = data.get('role');
  32. const reason = data.get('reason');
  33. this.muc.setRole(
  34. occupant,
  35. role,
  36. reason,
  37. () => {
  38. /**
  39. * @event roleChanged
  40. * @example
  41. * const el = document.querySelector('converse-muc-role-form');
  42. * el.addEventListener('roleChanged', () => { ... });
  43. */
  44. const event = new CustomEvent('roleChanged', { bubbles: true });
  45. this.dispatchEvent(event);
  46. },
  47. e => {
  48. if (sizzle(`not-allowed[xmlns="${Strophe.NS.STANZAS}"]`, e).length) {
  49. this.alert(__("You're not allowed to make that change"), 'danger');
  50. } else {
  51. this.alert(__('Sorry, something went wrong while trying to set the role'), 'danger');
  52. if (isErrorObject(e)) log.error(e);
  53. }
  54. }
  55. );
  56. }
  57. }
  58. api.elements.define('converse-muc-role-form', RoleForm);