È possibile passare parametri all'API che crea Community Links?

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

… non funzionerà perché quella route richiede un tag_id.

Ho provato ad aggiungere:

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

… ma ho il forte sospetto che questo non venga elaborato come necessario dall’api …

4 Mi Piace

Ho fatto progressi!

Riguarda questo:

3 Mi Piace

Nello specifico, penso sia qui: discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub

se aggiungiamo questo dovrebbe funzionare:

get models() {
 return args.models;
}
3 Mi Piace

Oh grazie per l’apertura!

1 Mi Piace

Ah, e dato che c’è una condizione typeof args === "function", potresti fare subito qualcosa del genere:

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 Mi Piace

sì, è quello che sto già facendo… ma c’è qualcosa di strano più avanti nel processo

1 Mi Piace

Per qualche ragione, non è proprio questo e ricevo un errore riguardante la mancanza di postStream al click:

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");
          }
        };
      });

È quasi come se fosse necessario includere il modello per la route corrente, il che è strano!

1 Mi Piace

qual è l’output di questa impostazione? sembra funzionare bene quando lo faccio manualmente:

get models() {
  return ["featured", "tv"];
}
2 Mi Piace

sì, funziona, è davvero utile, grazie!

l’impostazione è solo una stringa. Penso che ci stessi pensando troppo.

il nome “models” per i parametri della query non è intuitivo al 100% però?

La tua PR renderà tutto molto più ordinato, grazie!

2 Mi Piace

sì, neanche a me era chiaro all’inizio, ma è perché alla fine utilizza il componente LinkTo di Ember, che si aspetta un argomento model…

1 Mi Piace

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