هل api.decoratePluginOutlet لا تعمل؟

لدي مكون سمة لعدم عرض العلامات والفئات المكتومة في البحث، ولكني قمت بتعطيله ثم أعدت تمكينه لاختبار شيء آخر، والآن لا يعمل، بما في ذلك console.log. لا يمكنني جعل api.decoratePluginOutlet يفعل أي شيء على الإطلاق، حتى في مكون سمة جديد ونظيف يعتمد على المثال الموجود في plugin-api.js.

أ. هل هناك خدعة لجعل decoratePluginOutlet يعمل، وب. هل هناك طريقة أفضل لإضافة فئة إلى عنصر قائمة نتائج البحث؟ حاليًا، أستخدم decoratePluginOutlet للحصول على العنصر والمشي لأعلى ولأسفل التسلسل الهرمي للعثور على الفئة ثم إضافتها، ولكن هذا يبدو فوضويًا. الكود الكامل أدناه.

<script type="text/discourse-plugin" version="0.8">
const discourseComputed = require("discourse-common/utils/decorators").default;
let currentUser = api.getCurrentUser();

api.decoratePluginOutlet(
  "full-page-search-category",
  (elem, args) => {
    console.log(currentUser)
    let searchCategory = elem.parentElement.parentElement
    let fpsTopic = searchCategory.parentElement.parentElement
    let category_id = searchCategory.children[0].getAttribute('href').split("/").slice(-1);
    let search_children = searchCategory.children
    let searchArray = Array.from(search_children)
    let tags = searchArray.filter(item => item.classList.contains("discourse-tags"))
    if (tags[0]) {
        let tagList = Array.from(tags[0].children).map(x => x.innerText)
        for (let index = 0; index < tagList.length; ++index) {
            fpsTopic.classList.add("tagged_" + tagList[index])
        }
        console.log()
    }
    fpsTopic.classList.add("category_" + category_id)
    
    if (currentUser) {
        const muted_categories = currentUser.muted_category_ids
        const muted_tags = currentUser.muted_tags
        if (muted_categories) {
            if (muted_categories.includes(parseInt(category_id))) {
                const children = fpsTopic.childNodes;
                            const newNode = document.createElement("a");
                            const textNode = document.createTextNode("This result is from a category you have muted.");
                            newNode.classList.add("block-notice")
                            newNode.appendChild(textNode);
                            newNode.onclick = function() { showComment(this); };
                            fpsTopic.insertBefore(newNode, fpsTopic.children[0]);
                            fpsTopic.classList.add("blocker-blocked");
                            newNode.classList.remove("blocker-blocked");
            }
        }
        
        if (muted_tags && tags[0]) {
            let tagList = Array.from(tags[0].children).map(x => x.innerText)
            if (muted_tags.some(v => tagList.includes(v))) {
                const children = fpsTopic.childNodes;
                            const newNode = document.createElement("a");
                            const textNode = document.createTextNode("This result is from a tag you have muted.");
                            newNode.classList.add("block-notice")
                            newNode.appendChild(textNode);
                            newNode.onclick = function() { showComment(this); };
                            fpsTopic.insertBefore(newNode, fpsTopic.children[0]);
                            fpsTopic.classList.add("blocker-blocked");
                            newNode.classList.remove("blocker-blocked");
            }
        }
    }
  }
 );
 
function showComment(elem) {
    const cooked = elem.parentNode;
    elem.remove();
    cooked.classList.remove("blocker-blocked");
}
</script>