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) {