浏览代码

Use `repeat` directive to render roster items

JC Brand 4 年之前
父节点
当前提交
3f24720633
共有 3 个文件被更改,包括 5 次插入5 次删除
  1. 1 1
      spec/controlbox.js
  2. 2 3
      src/plugins/rosterview/contactview.js
  3. 2 1
      src/plugins/rosterview/templates/roster.js

+ 1 - 1
spec/controlbox.js

@@ -116,7 +116,7 @@ describe("The Controlbox", function () {
             await u.waitUntil(() => el.querySelector('.restore-chat .message-count')?.textContent === '2');
             await u.waitUntil(() => el.querySelector('.restore-chat .message-count')?.textContent === '2');
             expect(rosterview.querySelector('.msgs-indicator').textContent).toBe('2');
             expect(rosterview.querySelector('.msgs-indicator').textContent).toBe('2');
             chatview.model.set({'minimized': false});
             chatview.model.set({'minimized': false});
-            expect(_converse.chatboxviews.el.querySelector('.restore-chat .message-count')).toBe(null);
+            expect(el.querySelector('.restore-chat .message-count')).toBe(null);
             await u.waitUntil(() => rosterview.querySelector('.msgs-indicator') === null);
             await u.waitUntil(() => rosterview.querySelector('.msgs-indicator') === null);
             done();
             done();
         }));
         }));

+ 2 - 3
src/plugins/rosterview/contactview.js

@@ -68,7 +68,7 @@ class RosterContact extends CustomElement {
         }
         }
     }
     }
 
 
-    renderRosterItem (item) { // eslint-disable-line class-methods-use-this
+    renderRosterItem (item) {
         const STATUSES = {
         const STATUSES = {
             'dnd': __('This contact is busy'),
             'dnd': __('This contact is busy'),
             'online': __('This contact is online'),
             'online': __('This contact is online'),
@@ -101,8 +101,7 @@ class RosterContact extends CustomElement {
                 'removeContact':  ev => this.removeContact(ev),
                 'removeContact':  ev => this.removeContact(ev),
                 'getAvatarData': () => this.getAvatarData(),
                 'getAvatarData': () => this.getAvatarData(),
                 'desc_status': STATUSES[show],
                 'desc_status': STATUSES[show],
-                'num_unread': item.get('num_unread') || 0,
-                classes: ''
+                'num_unread': item.get('num_unread') || 0
             })
             })
         );
         );
     }
     }

+ 2 - 1
src/plugins/rosterview/templates/roster.js

@@ -3,6 +3,7 @@ import { __ } from 'i18n';
 import { _converse, api } from "@converse/headless/core";
 import { _converse, api } from "@converse/headless/core";
 import { contactsComparator, groupsComparator } from '@converse/headless/plugins/roster/utils.js';
 import { contactsComparator, groupsComparator } from '@converse/headless/plugins/roster/utils.js';
 import { html } from "lit-html";
 import { html } from "lit-html";
+import { repeat } from 'lit-html/directives/repeat.js';
 import { shouldShowContact, shouldShowGroup } from '../utils.js';
 import { shouldShowContact, shouldShowGroup } from '../utils.js';
 
 
 
 
@@ -54,7 +55,7 @@ export default () => {
         </div>
         </div>
         <converse-roster-filter></converse-roster-filter>
         <converse-roster-filter></converse-roster-filter>
         <div class="list-container roster-contacts">
         <div class="list-container roster-contacts">
-            ${ groupnames?.map(name => {
+            ${ repeat(groupnames, n => n, name => {
                 const contacts = contacts_map[name].filter(c => shouldShowContact(c));
                 const contacts = contacts_map[name].filter(c => shouldShowContact(c));
                 contacts.sort(contactsComparator);
                 contacts.sort(contactsComparator);
                 if (contacts.length) {
                 if (contacts.length) {