diff --git a/src/plugins/muc-views/templates/add-muc.js b/src/plugins/muc-views/templates/add-muc.js index 7c4a2de81..1fbb7be97 100644 --- a/src/plugins/muc-views/templates/add-muc.js +++ b/src/plugins/muc-views/templates/add-muc.js @@ -4,6 +4,7 @@ import { api } from '@converse/headless/core.js'; import { html } from "lit"; import { modal_header_close_button } from "plugins/modal/templates/buttons.js" import { unsafeHTML } from "lit/directives/unsafe-html.js"; +import { getAutoCompleteList } from "../utils.js"; const nickname_input = (o) => { @@ -34,7 +35,10 @@ export default (o) => {
${ (o.muc_roomid_policy_error_msg) ? html`` : '' } - +
${ o.muc_roomid_policy_hint ? html`
${unsafeHTML(DOMPurify.sanitize(o.muc_roomid_policy_hint, {'ALLOWED_TAGS': ['b', 'br', 'em']}))}
` : '' } ${ !api.settings.get('locked_muc_nickname') ? nickname_input(o) : '' } diff --git a/src/plugins/muc-views/tests/muc-add-modal.js b/src/plugins/muc-views/tests/muc-add-modal.js index 292ffdd49..190f513e1 100644 --- a/src/plugins/muc-views/tests/muc-add-modal.js +++ b/src/plugins/muc-views/tests/muc-add-modal.js @@ -37,8 +37,7 @@ describe('The "Groupchats" Add modal', function () { roomspanel.querySelector('.show-add-muc-modal').click(); label_name = modal.el.querySelector('label[for="chatroom"]'); expect(label_name.textContent.trim()).toBe('Groupchat address:'); - name_input = modal.el.querySelector('input[name="chatroom"]'); - expect(name_input.placeholder).toBe('name@muc.example.org'); + await u.waitUntil(() => modal.el.querySelector('input[name="chatroom"]')?.placeholder === 'name@muc.example.org'); }) ); diff --git a/src/plugins/muc-views/utils.js b/src/plugins/muc-views/utils.js index 64c30b7bf..9a44a3036 100644 --- a/src/plugins/muc-views/utils.js +++ b/src/plugins/muc-views/utils.js @@ -127,10 +127,22 @@ export function getAutoCompleteListItem (text, input) { return element; } +let fetched_room_jids = []; +let timestamp = null; + +async function fetchListOfRooms () { + const response = await fetch('https://search.jabber.network/api/1.0/rooms'); + const data = await response.json(); + const popular_mucs = data.items.map(item => item.address); + fetched_room_jids = [...new Set(popular_mucs)]; +} + export async function getAutoCompleteList () { - const models = [...(await api.rooms.get()), ...(await api.contacts.get())]; - const jids = [...new Set(models.map(o => Strophe.getDomainFromJid(o.get('jid'))))]; - return jids; + if (!timestamp || converse.env.dayjs().isAfter(timestamp, 'day')) { + await fetchListOfRooms(); + timestamp = (new Date()).toISOString(); + } + return fetched_room_jids; } export async function fetchCommandForm (command) {