Obrigado por apontar isso, @NateDhaliwal
Não, ele apenas verifica a URL em busca de uma string específica e preenche previamente o composer com um de alguns modelos quando encontra essa string.
O plugin Docus insere essa string em URLs como uma de suas funções, mas este componente funcionará com qualquer string ou mecanismo de entrega que alguém queira usar, então ele pode ser autônomo. Vou atualizar o readme para explicar isso.
Por exemplo, você poderia dizer a ele para procurar por: /tag/introductions e ele se tornaria um componente de modelo de tag. Ou você poderia usá-lo como eu estou usando para colocar esse modelo em interseções de tags, como: tags/intersection/introductions/webdevs
Vou mover a string que ele procura para a seção de administração, para que seja mais fácil para os outros modificarem e usarem sem vasculhar o código.
Sinceramente, tenho lutado contra um bug com ele nos últimos dias e tenho puxado meu (pouco cabelo restante) e provavelmente não deveria tê-lo compartilhado ainda. Ele sempre insere um modelo quando encontra essa string na URL.
Às vezes você quer que isso aconteça toda vez que encontra essa string, às vezes você só quer que aconteça se não houver outros tópicos já existentes, e às vezes você só quer que aconteça se aquele usuário específico ainda não tiver criado um tópico naquele local.
O que está acontecendo agora:
O inicializador observa uma tag/string na URL e abre automaticamente um modelo no Discourse sempre que vê uma correspondência. Isso funciona bem quando eu sempre quero abrir um modelo, mas desmorona quando preciso de condições como “não abrir se algum tópico já existir” ou “não abrir se este usuário já postou”.
O que eu tentei:
- Introduzi um sinalizador
settings.auto_open_check_user_only. Quando está ligado, o código procura portags:tag1+tag2 @username; quando está desligado, ele procura apenas portags:tag1+tag2. O objetivo era distinguir entre “qualquer tópico existe” e “o tópico deste usuário existe”. - Adicionei um atraso de 500 ms antes de reativar a economia de rascunho para evitar conflitos com a economia automática do Discourse.
- Comecei a registrar informações básicas (ID do gatilho, nome do modelo) para que eu pudesse pelo menos ver quando a abertura automática é acionada.
Eu suspeito que os problemas são:
- A API de pesquisa do Discourse retorna resultados antes que o índice de pesquisa seja atualizado, então o sistema continua pensando que “nenhum tópico existe”, mesmo logo após um usuário postar.
- Filtrar por
@usernamenão ajuda se o nome de usuário não corresponder exatamente ou se as tags não se alinharem com as configurações do modelo. - Eu nunca cancelo os temporizadores de rascunho pendentes do Discourse, então, embora eu bloqueie as economias por 500 ms, as economias enfileiradas ainda são executadas mais tarde e trazem o rascunho/composer de volta.
Estou atualmente tentando:
- Após chamar
deleteDraft, cancelar imediatamente o debounce_saveDraftdo Discourse para que rascunhos antigos não reapareçam. - Criar um cache de curta duração lembrando “Eu já criei um tópico aqui com estas tags” para cobrir o atraso do índice de pesquisa.
- Criar 3 modos que podem ser escolhidos na seção de Administração
always (sempre)
Abre o modelo toda vez que a(s) tag(s) correspondem. Sem pesquisas, sem verificações — apenas abra o composer.
ifNoTopics (seNãoHouverTópicos)
Usa a pesquisa do Discourse para perguntar: Já existe algum tópico com estas tags?
- Se sim → não abrir.
- Se não → abrir.
Bom para situações de “apenas um tópico deve existir”.
ifUserHasNoTopic (seUsuárioNãoTiverTópico)
Pesquisa por: Este usuário específico já criou um tópico com estas tags?
- Se sim → não abrir.
- Se não → abrir.
Útil quando cada usuário deve ter seu próprio tópico pessoal.
Se alguém tiver alguma sugestão sobre como abordaria a criação dessas configurações, eu adoraria ouvi-las.