Aggiungi una casella di conferma quando rispondi a vecchi argomenti

(in gran parte copiato da Creating a component to show last-chance warning when replying to old topics)

Gestisco una community che storicamente ha un po’ di problemi con il “necro-bumping” dei thread.

Conosco warn_reviving_old_topic_age (e lo abbiamo impostato), ma sembra che molti utenti non vedano l’avviso. Inoltre, non vogliamo implementare timer globali per gli argomenti perché ci sono effettivamente casi d’uso in cui rianimare vecchi thread è utile.

La nostra soluzione precedente era bloccare la pubblicazione con una finestra di dialogo “sei sicuro” basata su questo componente:

ma quel componente è contrassegnato come non funzionante (e infatti anche la nostra versione non funziona). Come da consiglio della mia richiesta di supporto originale, ho iniziato a esaminare il rilevatore di codice non formattato, che è stato molto utile, ma sto lottando per arrivare alla fine.

Attualmente, ho qualcosa di simile a questo:

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 = `L'ultimo post in questo thread è stato ${diffH} fa. Sei sicuro di voler riattivare questo thread?`;
              this.dialog.yesNoConfirm({
                message: confirmationMessage,
                didConfirm: () => {
                  super.save(...args)
                }
              });
            } else {
              super.save(...args);
            }
          }
        });
    });
  },
};

ma non sembra funzionare. L’aggiunta di alcuni log di debug conferma che this.model?.topic?.last_posted_at è effettivamente undefined, e non ho idea se anche la finestra di dialogo di conferma funzioni.

Qualsiasi consiglio sarebbe apprezzato! Penso che ottenere una stringa ISO della data di bump corrente dell’argomento (se presente) sarebbe sufficiente per fare progressi.

3 Mi Piace