Problema con el argumento de CustomComponent en una acción pequeña

Estoy intentando reemplazar opcionalmente una descripción de acción pequeña de publicación con un CustomComponent.

Sin embargo, la publicación no se pasa correctamente al transformador de valores.

Código principal

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

Mi código de depuración

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

Salida:

context: Object { actionCode: "bid", post: undefined }
​​
La prueba no verifica los parámetros, por lo que esto pasa desapercibido.

Supongo que el parámetro post debería ser this.args.post y no this.post.

He estado intentando una solución alternativa agregando incondicionalmente el componente y haciendo que verifique por sí mismo qué hacer, pero desafortunadamente parece que los argumentos tampoco se están pasando correctamente, por lo que tanto la solución alternativa como una implementación normal fallan aquí también:

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

Hay getters en PostSmallAction para code, createdAt y path, pero (nuevamente) this.post no existe y username() parece tener un error también (¿no hay action_code_who en this.args.post?), por lo que esos atributos permanecen vacíos.

No puedo encontrar una implementación existente en el “mundo real”. ¿Soy realmente el primero en usar esto? :thinking:

2 Me gusta

He realizado una PR que soluciona este problema FIX: correct argument passing for small action post value transformer and custom component by communiteq · Pull Request #34915 · discourse/discourse · GitHub

@david @saquetim ¿podrían echarle un vistazo por favor? :pleading_face:

2 Me gusta

Gracias por notar este problema.

Tienes razón; el parámetro post debería ser this.args.post en lugar de this.post.

username es un poco engañoso aquí. action_code_who es efectivamente correcto pero es utilizado por algunos plugins como el plugin assign, por lo que no siempre está presente en el objeto post. Para obtener el usuario que creó la pequeña acción, puedes usar @post.username

No estaba seguro si podía enviar cambios a tu PR, así que abrí el siguiente para abordar estos problemas:

  • corregir el argumento post pasado tanto al transformer como al componente personalizado
  • renombrar el argumento username a who minimizando la confusión en torno a este argumento
  • añadir pruebas para verificar que los argumentos se pasan correctamente

Creo que sí. :smiley:

Hasta donde sé, la API antigua no se usó en ninguna de las personalizaciones que rastreamos en los repositorios all-the-*. Solo agregué esta para proporcionar una alternativa en caso de que un auto-anfitrión la estuviera usando.

:rocket: ¡genial!

Bueno, gracias por ser proactivo :slight_smile:
Creo que discourse-encrypt solía usarlo, y tres (!) plugins privados que estamos manteniendo.

Gracias por la explicación, no entendía cómo funcionaba y ahora sí.

Última petición: ¿podría su corrección ser retroportada también a la versión estable?

La corrección se exportó a estable.

1 me gusta

Este tema se cerró automáticamente 24 horas después de la última respuesta. Ya no se permiten nuevas respuestas.