Reazioni ai post e alle discussioni specifiche della categoria

È possibile avere reazioni a topic e post specifiche per categoria?

Non sto trovando nulla pronto all’uso e nessun componente esistente.

Se al momento non è possibile, quali sarebbero i passaggi per ottenere qualcosa di simile?

Ciao Noah,

Hai ragione, al momento non c’è modo di mostrare reazioni diverse per post/argomenti in base a una determinata categoria.

La cosa migliore che puoi fare è chiedere su Marketplace

1 Mi Piace

Perfetto :slight_smile:

Ho una certa esperienza con lo sviluppo in altri ambienti, ma sto esplorando se è possibile farlo tramite un componente tema.

Con un piccolo aiuto dall’IA :sweat_smile: sembra che ci sia riuscito, ma non sono sicuro al 100% se questo sia il modo corretto per realizzarlo in Discourse:


  api.onPageChange(() => {
    try {
      const isTopicPage = /^\/t\//.test(window.location.pathname);
      
      // Esegui solo nelle pagine degli argomenti
      if (!isTopicPage) return;

      const allowedCategories = ['ask-a-question']; // Usa direttamente gli slug delle categorie

      // Accedi ai dettagli dell'argomento per ottenere lo slug della categoria
      const topic = Discourse.__container__.lookup("controller:topic");
      const categorySlug = topic && topic.get("model.category.slug");
      const isAllowedCategory = categorySlug && allowedCategories.includes(categorySlug);

      // Funzione per nascondere o mostrare l'emoji specifica
      const toggleReactionEmoji = () => {
        const emoji = document.querySelector("[data-reaction='frog']");
        
        if (emoji) {
          emoji.style.display = isAllowedCategory ? '' : 'none';
          console.log(`Emoji con data-reaction='frog' ${isAllowedCategory ? 'mostrata' : 'nascosta'}.`);
        }
      };

      // Controllo iniziale nel caso in cui l'elemento sia già nel DOM
      toggleReactionEmoji();

      // Imposta un osservatore di mutazioni per nascondere/mostrare l'emoji in base ai cambiamenti di categoria
      const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
          mutation.addedNodes.forEach(node => {
            if (node.nodeType === 1) { // Controlla se è un nodo elemento
              const emoji = node.querySelector("[data-reaction='frog']");
              if (emoji) {
                emoji.style.display = isAllowedCategory ? '' : 'none';
                console.log(`Emoji con data-reaction='frog' trovata nella mutazione e ${isAllowedCategory ? 'mostrata' : 'nascosta'}.`);
              }
            }
          });
        });
      });

      // Osserva il body per modifiche alla lista dei figli (es. aggiunta di reazioni)
      observer.observe(document.body, { childList: true, subtree: true });

      // Pulisci l'osservatore durante la navigazione
      api.cleanupStream(() => observer.disconnect());

    } catch (error) {
      console.error("Si è verificato un errore nello script di attivazione/disattivazione emoji:", error);
    }
  });

1 Mi Piace