Kleines Problem mit dem Argument der CustomComponent-Aktion

Ich versuche, eine kleine Aktionsbeschreibung nach einem Beitrag optional durch eine CustomComponent zu ersetzen.

Allerdings wird der Beitrag nicht korrekt an den Value Transformer übergeben.

Core-Code

  @cached
  get CustomComponent() {
    return applyValueTransformer("post-small-action-custom-component", null, {
      actionCode: this.code,
      post: this.post,
    });
  }

Mein Debugging-Code

  api.registerValueTransformer(
    "post-small-action-custom-component",
    (arg) => {
      console.log(arg);
    }
  );

Ausgabe:

context: Object { actionCode: "bid", post: undefined }
​​
Der Test prüft die Parameter nicht, daher bleibt dies unbemerkt.

Ich vermute, der post-Parameter sollte this.args.post und nicht this.post sein.

Ich habe versucht, dies als Workaround zu lösen, indem ich die Komponente bedingungslos hinzugefügt habe und sie selbst prüfen lasse, was sie tun soll, aber leider scheinen die Argumente auch hier nicht korrekt übergeben zu werden, sodass sowohl der Workaround als auch eine normale Implementierung hier ebenfalls fehlschlagen:

              <this.CustomComponent
                @code={{this.code}}
                @post={{this.post}}
                @createdAt={{this.createdAt}}
                @path={{this.path}}
                @username={{this.username}}
              />

Es gibt Getter in PostSmallAction für code, createdAt und path, aber (wieder) this.post existiert nicht und username() scheint ebenfalls einen Fehler zu haben (gibt es kein action_code_who in this.args.post?), sodass diese Attribute leer bleiben.

Ich kann keine bestehende “echte” Implementierung finden. Bin ich wirklich der Erste, der das benutzt? :thinking:

2 „Gefällt mir“

Ich habe einen PR erstellt, der dieses Problem behebt: FIX: correct argument passing for small action post value transformer and custom component by communiteq · Pull Request #34915 · discourse/discourse · GitHub

@david @saquetim könntet ihr euch das bitte ansehen? :pleading_face:

2 „Gefällt mir“

Vielen Dank, dass Sie auf dieses Problem aufmerksam gemacht haben.

Sie haben Recht; der Parameter post sollte this.args.post und nicht this.post sein.

username ist hier etwas irreführend. action_code_who ist in der Tat korrekt, wird aber von einigen Plugins wie dem assign-Plugin verwendet, sodass es nicht immer im post-Objekt vorhanden ist. Um den Benutzer zu erhalten, der die kleine Aktion erstellt hat, können Sie @post.username verwenden.

Ich war mir nicht sicher, ob ich Änderungen an Ihrem PR vornehmen konnte, daher habe ich den untenstehenden geöffnet, um diese Probleme anzugehen:

  • Korrigieren des post-Arguments, das sowohl an den Transformer als auch an die benutzerdefinierte Komponente übergeben wird
  • Umbenennen des username-Arguments in who, um die Verwirrung um dieses Argument zu minimieren
  • Hinzufügen von Tests, um zu überprüfen, ob die Argumente korrekt übergeben werden

Ich glaube schon. :smiley:

Soweit ich weiß, wurde die alte API in keiner der Anpassungen verwendet, die wir in den all-the-*-Repositories verfolgen. Ich habe diese nur hinzugefügt, um eine Alternative bereitzustellen, falls ein Self-Host-Nutzer sie verwendet.

:rocket: großartig!

Nun, vielen Dank für Ihre proaktive Vorgehensweise :slight_smile:
Ich glaube, discourse-encrypt hat sie früher verwendet, und drei (!) private Plugins, die wir warten.

Vielen Dank für die Erklärung, ich habe nicht verstanden, wie das funktioniert, und jetzt tue ich es.

Letzte Bitte: Könnte Ihre Korrektur auch in die stabile Version zurückportiert werden?

Die Korrektur wurde in Stable zurückportiert.

1 „Gefällt mir“

Dieses Thema wurde 24 Stunden nach der letzten Antwort automatisch geschlossen. Neue Antworten sind nicht mehr möglich.