Permitir que usuários ocultem curtidas em posts através de uma preferência de usuário ou campo de usuário

Recentemente, houve uma grande discussão em um fórum que administro sobre se os Likes deveriam ser removidos ou não. Metade quer que desapareçam, a outra metade quer que permaneçam. Encontrei o componente de tema que oculta a capacidade de curtir uma postagem para usuários TL0 e anônimos, e adaptei-o em grande parte para o nosso uso. No entanto, não tenho certeza de como conectá-lo a um campo booleano de usuário que criei (“toggle likes”). No componente de tema original, algo como “settings.hide_for_anon_user” é usado, criando uma configuração de tema no settings.yml chamada “hide_for_anon_user”, mas isso só pode ser alterado por um administrador e não no nível do usuário.

Como eu faria para referenciar o campo personalizado para isso? Já o adicionei a public_user_custom_fields, mas não sei como referenciá-lo no arquivo JS do componente. Tentei userCustomFields.user_field_10, settings.current_user.custom_fields.user_field_10 e current_user.custom_fields.user_field_10, mas nenhum deles funcionou; eles apenas ocultaram todas as postagens em um tópico.

Agradeceria muito qualquer ajuda.

2 curtidas

Acho que você pode criar um grupo sem curtidas e usá-lo para ocultar as curtidas, assim como o tl0 faz. Configure o grupo para que qualquer pessoa possa entrar.

1 curtida

Mas como eu referencio o grupo neste caso?

Eu substituí
this.currentUser.trust_level === 0;
por
this.currentUser.no_likes;

mas não funcionou. Novamente, não tenho certeza de como referenciar grupos personalizados; assim como os campos de usuário, não parece estar claramente indicado em nenhuma documentação.

Isso parece funcionar para o grupo de usuários personalizado:

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if(user.primary_group_name.toLowerCase() === "no_likes") {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>

Mas eu ainda gostaria de ver se há uma maneira de fazer isso verificando o campo booleano do usuário personalizado em vez de fazer as pessoas se juntarem a um grupo. Tenho procurado em outros plugins para ter uma ideia de como fazer isso, mas tudo o que tentei até agora não funcionou.

ETA: Isso parece funcionar, mas você precisa atualizar a página após marcar ou desmarcar o booleano do campo de usuário.

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if(user.custom_fields['user_field_10']) {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>
2 curtidas

Aparentemente, isso está ocultando posts quando as pessoas estão deslogadas. Não tenho certeza de como modificar o código – alguém tem alguma sugestão?

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if (api.getCurrentUser() == null || user.custom_fields['user_field_10'])  {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>

Isso parece funcionar. Se houver uma maneira mais limpa de fazer isso, fique à vontade para me avisar.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.