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 :
await click(".sidebar-section-link[data-link-name='unread']");
assert.strictEqual(currentURL(), "/unread", "links to the right URL");
});
test("adding section link via plugin API with callback function", async function (assert) {
let teardownCalled = false;
withPluginApi("1.2.0", (api) => {
api.addCommunitySectionLink((baseSectionLink) => {
return class CustomSectionLink extends baseSectionLink {
get name() {
return "user-summary";
}
get route() {
return "user.summary";
}
get model() {
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;
}
main ← dev-community-sidebar-models
opened 03:15PM - 04 Jun 25 UTC
Without this, you can't add a custom link like this...
```js
api.addCommunit… ySectionLink({
name: "tag-link",
route: "tag.show",
title: "foo",
text: "bar",
models: ["baz"]
})
```
...because the route needs a model
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 »
system
(system)
A fermé ce sujet ()
Juillet 4, 2025, 3:48
11
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.