Campos de usuario condicionales

Caso de uso

Estamos trabajando en mejorar la experiencia de incorporación de nuestra comunidad. Naturalmente, nos gustaría usar la información que conocemos sobre el usuario para hacer/mostrar ciertas cosas basándonos en la información que nos proporcionan.

Hoy en día, nuestros usuarios inician la creación de su cuenta a través de nuestra integración OIDC creando una cuenta con nuestra empresa. Proporcionan correo electrónico, nombre y nombre de usuario a OIDC antes de que los devuelva a Discourse.

El problema

Nos gustaría ahora darles algunos campos de usuario adicionales para completar, ¡lo cual es genial porque Discourse ofrece esto! Desafortunadamente, no podemos mostrar campos basados en las respuestas de campos anteriores. Por ejemplo, nos gustaría preguntar: “¿Qué rol te describe mejor?” con las opciones, desarrollador, administrador y analista.

  • Si eligen desarrollador, por supuesto, quiero preguntarles cuáles son sus lenguajes de programación preferidos. También los agregaré más tarde al grupo de usuarios desarrolladores.
  • Si eligen analista, quiero hacerles una serie diferente de preguntas y agregarlos a un grupo de usuarios diferente.

Solución propuesta

Muchas opciones de formularios en la web hoy en día ofrecen campos de formulario condicionales (por ejemplo, ¿dónde nos conoció? si se selecciona ‘otro’, aparece un campo adicional para decir por qué). Sería genial si comenzaran un camino similar (aunque más robusto) como lo han hecho con las plantillas de formularios de nuevos temas, aunque con el requisito adicional de la capacidad de depender del ID de otro campo, y específicamente de la entrada de ese campo. Como ejemplo, podría verse algo así:

- type: dropdown
  id: user-type
  choices:
    - "Desarrollador"
    - "Administrador de Aplicaciones"
    - "Analista"
  attributes:
    none_label: "Elige tu rol..."
    label: "¿Qué opción describe mejor tu trabajo?"
  validations:
    required: true
- type: dropdown
  id: developer-type-programming-language
  depends: user-type
    choices:
      - "Desarrollador"
  choices:
    - "Desarrollador"
    - "Administrador de Aplicaciones"
    - "Analista"
  attributes:
    none_label: "Lenguaje de programación preferido..."
    label: "¿Cuál es el lenguaje de programación principal utilizado en tu rol?"
  validations:
    required: true

En este ejemplo, a todos los usuarios se les haría la primera pregunta. Si el usuario selecciona Desarrollador de la lista desplegable, entonces aparecería una segunda pregunta en el formulario preguntando cuál es su lenguaje de programación preferido.

Esta mejora de campo condicional podría usarse tanto en el proceso de incorporación de usuarios como en el lugar original previsto de nuevos temas.

5 Me gusta

Puedes echar un vistazo a GitHub - discourse/discourse-authentication-validations que hace precisamente eso, excepto solo para la página de registro de usuarios. No parece trivial adaptarlo a la página de preferencias del usuario donde se editan esos campos.

Pero estás pidiendo una función, no buscando una solución a tu problema inmediato.

6 Me gusta

Suena prometedor; me encantaría ver más documentación al respecto.

Para más información, por favor consulte: url to meta topic

Parece que la intención estaba ahí.

1 me gusta

Eso es todo lo que hay, me temo.

Eso es código repetitivo de GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins

2 Me gusta

El plugin es bastante intuitivo.

La casilla de verificación inferior añade la opción de autenticación.

Luego, rellena las respuestas del desencadenador que activarán los siguientes campos personalizados del usuario. En mi caso, es un número de auriculares mayor que Ninguno.

Una vez rellenados, apunta a los campos de usuario personalizados que deseas mostrar. En mi ejemplo, si es de 1 a 6 o más, se le pedirá al usuario que introduzca los HMD primarios y secundarios.

Esto sería genial si se extendiera a las plantillas de formulario experimentales.

5 Me gusta

Ha estado en mi lista de tareas pendientes por un tiempo… Me aseguraré de agregarlo esta semana :slight_smile:

3 Me gusta

Pensé que ya había escrito esto… :sweat_smile:

Actualizaré el repositorio con el enlace de meta.

1 me gusta

Doh! Lo siento, yo también lo había olvidado.

¿Será posible tener esas condiciones en el perfil de usuario en lugar de solo en la página de creación de cuenta? (Estoy bastante seguro de que entiendo que solo funciona en la página de creación de cuenta; tengo a alguien que quiere que la gente regrese e ingrese cosas y que esas reglas se apliquen).

1 me gusta

Sí, esta es actualmente la única ubicación afectada por este plugin.

Déjame asegurarme de que estamos en la misma página:

¿Quieres la capacidad de actualizar campos de usuario personalizados públicos a través de /preferences/profile y aplicamos la misma lógica condicional de ocultar/mostrar que hacemos en el modal de creación de cuenta?

¿Algo como, si el valor del campo personalizado 1 es mostrar campo personalizado 2, entonces mostrar el segundo campo personalizado?

2 Me gusta

Sí. Quiero que a todos los custom_user_fields que sean Editable after signup se les apliquen las mismas reglas en la página /preferences/profile.

Creo que sí. Las mismas reglas que están en vigor en el modal de creación de cuenta estarían en vigor en la página de perfil.

3 Me gusta

Creo que sería una gran adición. Mover la lógica de campos condicionales a la página de perfil debería ser bastante fácil.

Este sería un buen candidato para pr-welcome, pero también puedo intentar echarle un vistazo en el próximo mes.

4 Me gusta

Bueno, ¡para ti, quizás! Lo intenté y me perdí rápidamente. Parecía que debería ser casi tan fácil como copiar algunas cosas a la página de preferencias, pero solo qué cosas era más de lo que pude entender rápidamente.

¡Eso sería genial!

4 Me gusta