Cambia le pagine del gruppo predefinite in /messages

Certamente, puoi provare qualcosa di simile nella scheda header del tuo tema/componente. Ho lasciato alcuni commenti nello snippet se vuoi seguirli. Puoi eliminarli una volta che sei pronto per usarlo.

Valgono le stesse regole. Se l’utente è membro del gruppo e il gruppo ha messaggi, Discourse navigherà alla casella di posta del gruppo. Altrimenti, l’utente atterrerà nella directory dei membri.

<script type="text/discourse-plugin" version="0.8">
  // Parte 1: modifica il percorso per i link nelle schede dei gruppi. Questo assicura che il titolo
  // del link rifletta dove porta e gestisca l'apertura del link in una nuova scheda.
  const discourseComputed = require("discourse-common/utils/decorators").default;

  api.modifyClass("component:group-card-contents", {
    // La proprietà groupPath viene utilizzata per generare l'href per i link dei gruppi
    // nella scheda del gruppo. Modifichiamola
    @discourseComputed("group")
    groupPath(group) {
      // ottieni il valore predefinito dal core
      let groupURL = this._super(...arguments);

      // se l'utente corrisponde al nostro requisito, modifica l'url in modo che vada alla casella di posta
      if (group.is_group_user && group.has_messages) {
        groupURL = `${groupURL}/messages/`;
      }

      // restituisci il valore predefinito o modificato
      return groupURL;
    }
  });

  // Parte 2: modifica il routing in-app. Questo assicura che la normale navigazione in-app sia
  // gestita correttamente e porti l'utente alla casella di posta del gruppo se soddisfa i
  // requisiti

  const DiscourseURL = require("discourse/lib/url").default;
  const { groupPath } = require("discourse/lib/url");
  const { action } = require("@ember/object");

  api.modifyClass("controller:user-card", {

    // showGroup qui è un'azione che appartiene al controller user-card.
    // Questo è ciò che viene chiamato quando fai clic sul nome/avatar del gruppo all'interno delle schede dei gruppi
    @action
    showGroup(group) {
      // chiama super per assicurarti che il codice dal core venga caricato prima
      this._super(...arguments);

      // group path è una funzione di aiuto per gli url di Discourse integrata
      let groupURL = groupPath(group.name);

      // se l'utente corrisponde ai requisiti, modifica l'url
      if (group.is_group_user && group.has_messages) {
        groupURL = `${groupURL}/messages/`;
      }

      // chiama routeTo() con l'url del gruppo predefinito o modificato
      DiscourseURL.routeTo(groupURL);
    }
  });
</script>