Est-il possible de passer des paramètres à l'API qui crée des liens de communauté ?

e.g.

       api.addCommunitySectionLink({
         name: "intersection-navigator",
         route:"tags.intersection",
         title: I18n.t("tag_intersection_navigator.link.title"),
         text: I18n.t("tag_intersection_navigator.link.text")
       })

… échouera car cette route nécessite un tag_id.

J’ai essayé d’ajouter :

        params: { tag_id:  siteSettings.discourse_tag_intersection_navigator_all_word },
        model: { tag_id: siteSettings.discourse_tag_intersection_navigator_all_word },

… mais je soupçonne fortement que ceci n’est pas traité comme nécessaire par l’api …

4 « J'aime »

Ah, j’ai fait des progrès !

Cela implique ceci :

3 « J'aime »

Plus précisément, je pense que c’est ici : discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub

Si nous ajoutons ceci, cela devrait fonctionner :

get models() {
 return args.models;
}
3 « J'aime »

Oh merci d’avoir ouvert !

1 « J'aime »

Oh, et puisqu’il y a une condition typeof args === "function", vous pourriez faire quelque chose comme ceci immédiatement:

api.addCommunitySectionLink((Base) =
  class CustomLink extends Base {
    get name() {
      return "intersection-navigator";
    }

    get route() {
      return "tag.show";
    }

    get models() {
      return ["tagid"];
    }

    get title() {
      return I18n.t("tag_intersection_navigator.link.title");
    }

    get text() {
      return I18n.t("tag_intersection_navigator.link.text");
    }

  }
);
1 « J'aime »

oui, c’est ce que je fais déjà… mais il y a des choses étranges plus tard dans le processus

1 « J'aime »

Pour une raison quelconque, ce n’est pas tout à fait ça et je reçois une plainte concernant l’absence de postStream lors du clic :

api.addCommunitySectionLink((baseSectionLink) => {
        return class CustomSectionLink extends baseSectionLink {
          get name() {
            return "intersection-navigator";
          }

          get route() {
            return "tags.intersection";
          }

          get models() {
            return [{tag_id: siteSettings.discourse_tag_intersection_navigator_all_word}];
          }

          get title() {
            return I18n.t("tag_intersection_navigator.link.title")
          }

          get text() {
            return I18n.t("tag_intersection_navigator.link.text");
          }
        };
      });

C’est presque comme si vous deviez inclure le modèle pour la route actuelle, ce qui est bizarre
bsp!

1 « J'aime »

quel est le résultat de ce réglage ? il semble fonctionner correctement lorsque je le fais manuellement :

get models() {
  return ["featured", "tv"];
}
2 « J'aime »

oui, ça marche, c’est vraiment utile, merci !

le réglage est juste une chaîne de caractères. Je me compliquais la vie, je crois.

le nom “models” pour les paramètres de la requête n’est pas intuitif à 100 %, par contre.

Votre PR rendra tout cela beaucoup plus clair, merci !

2 « J'aime »

oui, ce n’était pas clair pour moi non plus au début, mais c’est parce qu’en fin de compte, il utilise le composant LinkTo d’Ember, qui attend un argument de modèle…

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.