Превращение клавиатурных сокращений «предыдущая/следующая тема» в компонент темы

Я хотел бы превратить эти сочетания клавиш для кнопок «Предыдущая/Следующая тема» в компонент темы, который добавляет в заголовок кнопки << Пред. тема и След. тема >>.

Может кто-нибудь порекомендовать существующий компонент темы с фрагментом кода, реализующим кнопку, которая просто активирует уже существующее сочетание клавиш?

Я начинаю с

Такая функция уже существует (но сфокусирована на Next).

Она использует Core API, поэтому должна продолжать работать…

PR принимается, если вы хотите добавить опцию кнопки «Назад» с настройкой.

Спасибо, @merefield! Я застрял (по крайней мере, мне так кажется :nerd_face:) на фрагменте JavaScript для кнопки «Назад»…

discourse-tc-topic-next-button/javascripts/discourse/components/topic-previous-button.js at master · denvergeeks/discourse-tc-topic-next-button · GitHub, где сейчас у меня вот что…

import Component from '@glimmer/component';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
import {
  nextTopicUrl,
  previousTopicUrl,
} from "discourse/lib/topic-list-tracker";
import DiscourseURL from "discourse/lib/url";
import { inject as service } from "@ember/service";

export default class TopicPreviousButton extends Component {
  @service site;
  @tracked label = "";
  @tracked showButton = false;
  @tracked lastURL = "";

  constructor(owner, args) {
    super(owner, args);
    previousTopicUrl().then((url) => {
      if (url) {
        this.showButton = true;
        this.lastURL = url;
      } else {
        this.showButton = false;
        this.lastURL = "";
      }
    })
  };

  get goFirst() {
    return settings.topic_next_always_go_to_first_post
  }

  @action
  goToPreviousTopic() {
    let url;
    if (this.lastURL) {
      url = this.goFirst
        ? this.lastURL.substring(0, this.lastURL.nextIndexOf("/"))
        : this.lastURL;
      DiscourseURL.routeTo(url);
    }
  };
}

Кажется, проблема внизу, в строке:

? this.lastURL.substring(0, this.lastURL.nextIndexOf("/"))

Есть какие-то идеи?

Я пробовал:

? this.lastURL.substring(0, this.lastURL.indexOf("/"))

Скорее всего, вам не стоит создавать отдельный компонент для кнопки «Назад» и обрабатывать всю логику в том же компоненте. Просто расширьте существующий шаблон и JS-файл по мере необходимости. В противном случае вы, вероятно, получите три шаблона вместо одного, что кажется излишним для такого небольшого «компонента»?

Хм… не совсем понимаю, что вы видите в моём коде, но я просто добавляю код в ваш существующий компонент :grinning:

Да, мы используем здесь, в Development, другое определение компонента :slight_smile:

Это другой компонент Glimmer.

То есть один компонент темы, содержащий один компонент Glimmer. Вы собирались создать ещё один?

Я предлагаю вам отредактировать тот же файл, что потребует двух действий, а не одного. И, возможно, метка должна появляться только тогда, когда кнопка «Назад» не активирована в новом параметре?

Спасибо, Роберт — думаю, я понял. Попробую.