Можно ли передать параметры в API, создающее ссылки сообщества?

Например,

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

… не сработает, так как этот маршрут требует параметра tag_id.

Я пробовал добавить:

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

… но я сильно подозреваю, что API не обрабатывает это так, как необходимо…

Ах, я добился прогресса!

Это связано с этим:

Конкретно, я думаю, это здесь: discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub

Если мы добавим это, должно сработать:

get models() {
 return args.models;
}

О, спасибо, что открыли!

Кстати, так как есть условие typeof args === "function", вы можете сразу сделать вот так:

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

  }
);

Да, я уже это делаю… но позже в процессе возникает какая-то странность.

По какой-то причине это работает не совсем так, как нужно, и при клике возникает ошибка, связанная с отсутствием postStream:

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

Кажется, будто нужно включить модель для текущего маршрута, что странно!

Какой результат дает эта настройка? Похоже, что при ручном выполнении всё работает нормально:

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

Да, это работает, это действительно полезно, спасибо!

Настройка — это просто строка. Я, кажется, слишком усложнил.

Хотя название “models” для параметров запроса не на 100% интуитивно понятно?

Твой PR сделает это намного аккуратнее, спасибо!

Да, сначала и мне это было не совсем ясно, но дело в том, что в итоге используется компонент LinkTo из Ember, который ожидает аргумент model…