Separierung von angehefteten Themen

Hallo Terise,

ich habe mir deinen Code angesehen und du bist nah dran!

Hier sind einige Rückmeldungen:

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

Das bedeutet, dies sollte sein:

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

und die Vorlage:

{{#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}}

Es generiert ein div-Wrapper mit einer eindeutigen ID und vermasselt die CSS. Es ist jedoch notwendig, wenn du Aktionen an das Element binden möchtest.

Du kannst tagName und classNames verwenden, um den Wrapper anzupassen.

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}}

(Wenn du weißt, dass du nichts mit dem Element machen wirst, kannst du das tbody in der Vorlage beibehalten und tagName("") verwenden).

Dann erhältst du dies:

Ich habe es nicht gründlich geprüft, um zu sehen, ob es einen besseren Weg gibt.
Ich wollte nur helfen, deinen Code zum Laufen zu bringen! :smile: