Al final del día, necesito un botón de nuevo tema en el cuerpo de la lista de temas en el tema central de Discourse. Todos los ingenieros se quejan de que no les gusta que el botón de iniciar nueva conversación esté solo en la parte inferior de la lista de temas dentro de cada categoría. No quieren usar la opción del menú de nuevo tema en la parte superior porque eso no inicia el tema en la categoría en la que se encuentran actualmente.
He ejecutado esto a través de Llama 3.1 405B, así como GPT4 a través de ask.discourse.com, pero no puedo obtener una versión de JavaScript que compile. Constantemente obtengo un error de compilación: SyntaxError: Private field must be used in an enclosing class
También obtengo un error de registro de widgets, pero eso se debe a que el widget personalizado nunca se crea debido al error de compilación de JavaScript.
Estoy usando el tema Discourse Central.
Dado este encabezado:
"<script type=\"text/discourse-plugin\" version=\"0.8.18\">
api.createWidget('custom-new-topic-button', {
tagName: 'div.custom-new-topic-button',
buildKey: () => `custom-new-topic-button`,
html() {
return [
this.attach('button', {
className: 'btn btn-primary',
action: 'createNewTopic',
contents: 'New Topic'
})
];
},
click() {
const composerController = this.container.lookup("controller:composer");
const currentCategory = this.container.lookup("controller:navigation/category").get("model.id");
composerController.open({
action: require("discourse/models/composer").default.CREATE_TOPIC,
draftKey: require("discourse/models/composer").default.DRAFT,
categoryId: currentCategory,
});
return false;
},
});
api.decorateWidget('topic-list:before', (helper) => {
if (api.getCurrentUser()) {
helper.appendChild(helper.createWidget('custom-new-topic-button'));
}
});
</script>"
con esta sección de encabezado
"<script>
{{#if currentUser}}
<div class="topic-list-body-new-topic">
{{custom-new-topic-button}}
</div>
{{/if}}
</script>
y este CSS
.topic-list-body::before {
content: "";
display: block;
position: relative; /* Important to allow absolute positioning within */
}
.topic-list-body-new-topic {
position: absolute;
top: 0;
left: 0;
padding: 10px;
background: #f2f3f5;
border-bottom: 1px solid #ccc;
}
.custom-new-topic-button .btn.btn-primary {
background-color: #007bff;
border-color: #007bff;
color: #fff;
}
Ese fue mi código original, la última recomendación es
<script type="text/discourse-plugin" version="0.8.18">
api.createWidget('custom-new-topic-button', {
tagName: 'div.custom-new-topic-button',
buildKey() {
return 'custom-new-topic-button';
},
defaultState() {
return {};
},
html() {
return [
this.attach('button', {
className: 'btn btn-primary',
action: 'createNewTopic',
contents: 'New Topic'
})
];
},
createNewTopic() {
const composerController = this.container.lookup("controller:composer");
const currentCategory = this.container.lookup("controller:navigation/category").get("model.id");
const Composer = require("discourse/models/composer").default;
composerController.open({
action: Composer.CREATE_TOPIC,
draftKey: Composer.DRAFT,
categoryId: currentCategory,
});
return false;
},
});
api.decorateWidget('topic-list:before', (helper) => {
if (api.getCurrentUser()) {
helper.appendChild(helper.createWidget('custom-new-topic-button'));
}
});
</script>

