Campi utente condizionali

Caso de uso

Estamos trabalhando para melhorar a experiência de integração de nossa comunidade. Naturalmente, gostaríamos de usar as informações que sabemos sobre o usuário para fazer/mostrar certas coisas com base nas informações que eles nos fornecem.

Hoje, nossos usuários iniciam a criação de suas contas através de nossa integração OIDC, criando uma conta em nossa empresa. Eles fornecem e-mail, nome e nome de usuário para o OIDC antes que ele os redirecione de volta para o Discourse.

O problema

Gostaríamos agora de fornecer a eles alguns campos de usuário adicionais para preencher — o que é ótimo, pois o Discourse oferece isso! Infelizmente, não podemos mostrar campos com base nas respostas de campos anteriores. Por exemplo, gostaríamos de perguntar: “Qual função descreve melhor você?” com as opções desenvolvedor, administrador e analista.

  • Se eles escolherem desenvolvedor, é claro que quero perguntar quais são suas linguagens de programação preferidas. Também os adicionarei posteriormente ao grupo de usuários desenvolvedores.
  • Se eles escolherem analista, quero fazer uma série diferente de perguntas e adicioná-los a um grupo de usuários diferente.

Solução proposta

Muitas opções de formulário na web hoje oferecem campos de formulário condicionais (por exemplo, onde você ouviu falar de nós? se ‘outro’ for selecionado, um campo adicional aparece para dizer por quê.). Seria ótimo se você começasse um caminho semelhante (embora mais robusto) como você fez com os modelos de formulário de novos tópicos, embora com o requisito adicional de poder depender do ID de outro campo e, especificamente, da entrada desse campo. Como exemplo, poderia parecer algo assim:

- type: dropdown
  id: user-type
  choices:
    - "Desenvolvedor"
    - "Administrador de Aplicações"
    - "Analista"
  attributes:
    none_label: "Escolha sua função..."
    label: "Qual opção descreve melhor seu trabalho"
  validations:
    required: true
- type: dropdown
  id: developer-type-programming-language
  depends: user-type
    choices:
      - "Desenvolvedor"
  choices:
    - "Desenvolvedor"
    - "Administrador de Aplicações"
    - "Analista"
  attributes:
    none_label: "Linguagem de programação preferida..."
    label: "Qual é a linguagem de programação principal usada em sua função?"
  validations:
    required: true

Neste exemplo, todos os usuários seriam questionados sobre a primeira pergunta. Se o usuário selecionar Desenvolvedor na lista suspensa, uma segunda pergunta aparecerá no formulário perguntando qual é sua linguagem de programação preferida.

Esta melhoria de campo condicional poderia ser usada tanto no processo de integração do usuário quanto no local originalmente pretendido de novos tópicos também.

5 Mi Piace

Puoi dare un’occhiata a GitHub - discourse/discourse-authentication-validations che fa proprio questo, tranne che solo per la pagina di registrazione dell’utente. Non sembra banale adottarlo per la pagina delle preferenze dell’utente in cui vengono modificati quei campi.

Ma stai chiedendo una funzionalità, non cercando una soluzione al tuo problema immediato.

6 Mi Piace

Sembra promettente, mi piacerebbe vedere più documentazione al riguardo.

Per maggiori informazioni, consultare: url to meta topic

Sembra che l’intenzione ci fosse.

1 Mi Piace

Questo è tutto, temo.

Questo è boilerplate da GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins

2 Mi Piace

Il plugin è in realtà piuttosto intuitivo.

La casella di controllo in basso aggiunge l’opzione di autenticazione.

Quindi popola le risposte del trigger che attiveranno i successivi campi personalizzati dell’utente. Nel mio caso, è il numero di cuffie maggiore di Nessuno.

Una volta popolati, individua i campi utente personalizzati che desideri visualizzare. Nel mio esempio, se 1-6+, all’utente verrà richiesto di inserire le cuffie primarie e secondarie.

Sarebbe fantastico se esteso ai modelli di modulo sperimentali.

5 Mi Piace

È nella mia lista delle cose da fare da un po’ di tempo… mi assicurerò di aggiungerla questa settimana :slight_smile:

3 Mi Piace

Pensavo di averlo già scritto.. :sweat_smile:

Aggiornerò il repository con il link meta.

1 Mi Piace

Accidenti! Mi dispiace, me ne ero dimenticato anch’io.

Sarà possibile avere quelle condizioni funzionanti nel profilo utente anziché solo nella pagina di creazione dell’account? (Sono abbastanza sicuro di aver capito che funziona solo nella pagina di creazione dell’account: ho qualcuno che vuole che le persone tornino indietro, inseriscano delle informazioni e che quelle regole vengano applicate.)

1 Mi Piace

Sì, questa è attualmente l’unica posizione interessata da questo plugin.

Lascia che mi assicuri che siamo sulla stessa pagina:

Desideri la possibilità di aggiornare campi utente personalizzati pubblici tramite /preferences/profile e applichiamo la stessa logica di visualizzazione/nascondimento condizionale che abbiamo nella modale di creazione dell’account?

Qualcosa del tipo, se il valore del campo personalizzato 1 è mostra campo personalizzato 2, allora mostra il secondo campo personalizzato?

2 Mi Piace

Sì. Voglio che a tutti i custom_user_fields che sono Modificabili dopo la registrazione vengano applicate le stesse regole nella pagina /preferences/profile.

Penso sia corretto. Le stesse regole che sono in vigore nella modale di creazione dell’account sarebbero in vigore nella pagina del profilo.

3 Mi Piace

Penso che sarebbe un’ottima aggiunta. Spostare la logica dei campi condizionali nella pagina del profilo dovrebbe essere abbastanza facile.

Questo sarebbe un buon candidato per pr-welcome, ma potrei anche provare a dargli un’occhiata nel prossimo mese circa.

4 Mi Piace

Beh, per te, forse! Ci ho provato e mi sono perso rapidamente. Sembrava che dovesse essere quasi facile come copiare alcune cose nella pagina delle preferenze, ma quali cose era più di quanto potessi capire rapidamente.

Sarebbe fantastico!

4 Mi Piace