Séparer les sujets épinglés

Salut Terise,

J’ai regardé ton code, et tu y es presque !

Voici quelques retours :

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/components/topic-list/list.gjs#L126-L136

Cela signifie que cela devrait être :

export default class PinnedTopicBody extends Component {
  get pinnedTopics() {
    return this.outletArgs.topics.filter((t) => t.get("pinned"));
  }
}

et le template :

{{#if this.pinnedTopics}}
  <tbody>
    {{#each this.pinnedTopics as |topic|}}
      <TopicListItem
        @topic={{topic}}
        @bulkSelectEnabled={{@outletArgs.bulkSelectEnabled}}
        @lastVisitedTopic={{@outletArgs.lastVisitedTopic}}
        @selected={{@outletArgs.selected}}
        @hideCategory={{@outletArgs.hideCategory}}
        @showPosters={{true}}
      />
    {{/each}}
    <tr class="table-break">
      <td colspan="10">&nbsp;</td>
    </tr>
  </tbody>
{{/if}}

Cela génère un wrapper div avec un ID unique et perturbe le CSS. Cependant, il est nécessaire si tu veux lier des actions à l’élément.

Tu peux utiliser tagName et classNames pour personnaliser le wrapper.

import { classNames, tagName } from "@ember-decorators/component";

@tagName("tbody")
@classNames("pinned-topics")
export default class PinnedTopicBody extends Component {
  ...
}
{{#if this.pinnedTopics}}
  {{#each this.pinnedTopics as |topic|}}
    ...
  {{/each}}
  <tr class="table-break">
    <td colspan="10">&nbsp;</td>
  </tr>
{{/if}}

(si tu sais que tu ne feras rien sur l’élément, tu peux garder le tbody dans le template et utiliser tagName("")).

Ensuite, tu obtiens ceci :

Je ne l’ai pas examiné en profondeur pour voir s’il y avait une meilleure façon.
Je voulais juste aider à faire fonctionner ton code ! :smile: