Modifiche suggerite di Discourse

Per tua informazione, questo plugin sta generando un errore:

plugin-api.gjs:234 [PLUGIN discourse-suggested-edits] Tentativo di modifica di "service:composer", ma è già stato inizializzato in precedenza durante il processo di avvio (ad esempio tramite una lookup()). Rimuovi quella lookup o sposta la chiamata a modifyClass in una fase precedente del processo di avvio affinché le modifiche abbiano effetto. https://meta.discourse.org/t/262064
_resolveClass @ plugin-api.gjs:234

Sembra che l’inizializzatore stia chiamando api.customizeComposerText() subito prima di api.modifyClass("service:composer", {...}). Penso che il codice debba essere riordinato in modo che api.modifyClass venga eseguito prima di api.customizeComposerText:

forse dovrebbe essere così?
  // modifica prima la classe del composer

  api.modifyClass("service:composer", {
    pluginId: "discourse-suggested-edits",

    async open(opts) {
      if (isSuggestedEditAction(opts.action) && this.model) {
        this.model.set("disableDrafts", true);
        this.skipAutoSave = true;
        this.close();
        this.skipAutoSave = false;
      }
      setSuggestEditActive(
        isSuggestedEditAction(opts.action),
        opts.metaData?.originalRaw
      );
      await this._super(opts);
      if (isSuggestedEditModel(this.model)) {
        this.model.setProperties({
          disableDrafts: true,
          draftStatus: null,
          draftConflictUser: null,
        });
      }
    },

    cancelComposer(opts) {
      if (isSuggestedEditModel(this.model)) {
        setSuggestEditActive(false);
        this.skipAutoSave = true;
        this.close();
        this.appEvents.trigger("composer:cancelled");
        this.skipAutoSave = false;
        return Promise.resolve();
      }
      return this._super(opts);
    },

    destroyDraft() {
      if (isSuggestedEditModel(this.model)) {
        return Promise.resolve();
      }
      return this._super();
    },

    _saveDraft(showToast = false) {
      if (isSuggestedEditModel(this.model)) {
        return Promise.resolve();
      }

      return this._super(showToast);
    },

    save(force, options = {}) {
      if (isSuggestedEditModel(this.model)) {
        return this._saveSuggestedEdit();
      }
      return this._super(force, options);
    },

    async _saveSuggestedEdit() {
      const model = this.model;
      const meta = model.metaData || {};

      if (model.reply?.trim() === meta.originalRaw?.trim()) {
        this.toasts.error({
          data: {
            message: i18n("discourse_suggested_edits.composer.no_changes"),
          },
          duration: "short",
        });
        return;
      }

      try {
        if (meta.existingSuggestionId) {
          await updateSuggestedEdit(meta.existingSuggestionId, {
            raw: model.reply,
            reason: meta.reason,
          });
          this.toasts.success({
            data: {
              message: i18n("discourse_suggested_edits.toast.updated"),
            },
            duration: "short",
          });
        } else {
          const result = await createSuggestedEdit({
            postId: meta.postId,
            raw: model.reply,
            reason: meta.reason,
          });
          if (model.topic) {
            model.topic.set(
              "own_pending_suggested_edit_id",
              result.suggested_edit.id
            );
          }
          this.toasts.success({
            data: {
              message: i18n("discourse_suggested_edits.toast.created"),
            },
            duration: "short",
          });
        }

        setSuggestEditActive(false);
        this.close();
      } catch (e) {
        popupAjaxError(e);
      }
    },
  });

  // aggiungi le personalizzazioni dopo che la classe è stata modificata

  api.customizeComposerText({
    actionTitle(model) {
      if (model.action === SUGGEST_EDIT_ACTION) {
        return i18n("discourse_suggested_edits.composer.action_title");
      }
    },
    saveLabel(model) {
      if (model.action === SUGGEST_EDIT_ACTION) {
        return "discourse_suggested_edits.composer.save_label";
      }
    },
  });
1 Mi Piace