Adicionar caixa de confirmação ao responder tópicos antigos

(largamente copiado de Creating a component to show last-chance warning when replying to old topics)

Estou administrando uma comunidade que historicamente tem um problema com “necro-bumping” (ressuscitar tópicos antigos).

Eu conheço warn_reviving_old_topic_age (e o temos configurado), mas parece que muitos usuários não estão vendo o alerta. Também não queremos instituir temporizadores globais de tópicos, pois realmente existem casos de uso onde reviver um tópico antigo é útil.

Nossa solução anterior era bloquear a postagem em um diálogo de “tem certeza?” baseado neste componente:

mas esse componente está marcado como quebrado (e de fato nossa versão também está quebrada). Conforme o conselho em minha solicitação de suporte original, comecei a olhar para o detector de código não formatado, que tem sido muito útil, mas estou lutando para chegar ao fim.

Atualmente, tenho algo parecido com isto:

import { withPluginApi } from "discourse/lib/plugin-api";
import { inject as service } from "@ember/service";

export default {
  name: "discourse-necro-warnings",
  initialize() {
    withPluginApi("0.8.8", (api) => {
      api.modifyClass("service:composer", (Superclass) => class extends Superclass {
        save(...args) {
          let lastPostedAt = moment(this.model?.topic?.last_posted_at);
          let now = moment();
          let diff = now - lastPostedAt;
          console.log(diff)
          let d = moment.duration(settings.death_timer);

          if((diff >= d) && !skipWarning) {
            // TODO: i18n
            let diffH = moment.duration(diff).humanize();
            let confirmationMessage = `A última postagem neste tópico foi há ${diffH}. Tem certeza de que deseja ressuscitar este tópico?`;
            this.dialog.yesNoConfirm({
              message: confirmationMessage,
              didConfirm: () => {
                super.save(...args)
              }
            });
          } else {
            super.save(...args);
          }
        }
      });
    });
  },
};

mas não parece estar funcionando. Adicionar alguns logs de depuração confirma que this.model?.topic?.last_posted_at é de fato indefinido, e não tenho ideia se o diálogo de confirmação funciona também.

Qualquer conselho seria apreciado! Acho que apenas obter uma string ISO da data de “bump” atual do tópico (se houver) seria o suficiente para eu progredir.

3 curtidas