Permitir a los usuarios ocultar los "me gusta" en las publicaciones a través de una preferencia de usuario o un campo de usuario

Recientemente hubo un gran debate en un foro que administro sobre si se deberían eliminar o no los «Me gusta». La mitad quiere que desaparezcan y la otra mitad desea que se mantengan. He encontrado el componente del tema que oculta la capacidad de dar «Me gusta» a una publicación a los usuarios de nivel TL0 y a los anónimos, y lo he adaptado en gran medida para nuestro uso; sin embargo, no estoy seguro de cómo vincularlo con un campo booleano de usuario que he creado («toggle likes»). En el componente del tema original, se utiliza algo como “settings.hide_for_anon_user” y crea una configuración de tema en settings.yml llamada “hide_for_anon_user”, pero eso solo puede ser activado o desactivado por un administrador y no a nivel de usuario.

¿Cómo podría hacer referencia al campo personalizado para esto? Ya lo he añadido a public_user_custom_fields, pero no sé cómo referenciarlo en el archivo JS del componente. He probado userCustomFields.user_field_10, settings.current_user.custom_fields.user_field_10 y current_user.custom_fields.user_field_10, pero ninguno funciona; simplemente ocultan todas las publicaciones de un hilo.

Agradecería mucho cualquier ayuda.

2 Me gusta

Creo que puedes crear un grupo sin ‘me gusta’ y usarlo para ocultar los ‘me gusta’, tal como lo hace tl0. Configura el grupo para que cualquiera pueda unirse.

1 me gusta

¿Pero cómo hago referencia al grupo en este caso?

Reemplacé
this.currentUser.trust_level === 0;
por
this.currentUser.no_likes;

pero no funcionó. De nuevo, no estoy seguro de cómo hacer referencia a grupos personalizados; al igual que con los campos de usuario, parece que no está claramente especificado en ninguna documentación.

Esto parece funcionar para el grupo de usuarios 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>

Pero aún me gustaría ver si hay una manera de hacerlo para que verifique el campo booleano personalizado del usuario en lugar de obligar a las personas a unirse a un grupo. He estado revisando otros complementos para tener una idea de cómo hacerlo, pero todo lo que he probado hasta ahora no ha funcionado.

ETA: Esto parece funcionar, pero necesitas recargar la página después de marcar o desmarcar el campo booleano del usuario.

<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 Me gusta

Aparentemente, esto está ocultando las publicaciones cuando los usuarios no han iniciado sesión. No estoy seguro de cómo modificar el código. ¿Alguien tiene alguna sugerencia?

<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>

Parece que funciona. Si hay una forma más limpia de hacerlo, no dudes en hacérmelo saber.

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