Je vois, j’ai fait un peu de débogage local, je confirme que c’est reproductible à 100 % sur les installations Discourse par défaut.
Permettez-moi de récapituler ici :
Il y a 2 paramètres concernant les non catégorisés :
allow_uncategorized_topics par défaut désactivé
suppress_uncategorized_badge par défaut activé
lorsque allow_uncategorized_topics est désactivé (configuration par défaut), nous en divulguons la présence à certains endroits.
Si vous essayez de contourner le problème en activant les non catégorisés afin de pouvoir les supprimer, vous êtes confronté à :
Dans Discourse, cette catégorie est très étrange dans le sens où :
- Elle doit exister
- Elle ne peut pas être supprimée
- Nous l’injectons dans beaucoup de logiques à de nombreux endroits :
Nous pouvons corriger la fuite en ajoutant simplement de plus en plus de conditions, nous en avons probablement au moins 10 maintenant, côté client et côté serveur.
Ou nous pouvons corriger cela à la base, permettre simplement aux administrateurs de supprimer la catégorie, alors elle disparaît et nous n’avons plus jamais besoin de la vérifier.
Ma recommandation ici est :
- Supprimer les deux paramètres et supprimer le paramètre caché
uncategorized_category_id - Avoir un concept de catégorie par défaut (ce que nous avons déjà) - nous avons déjà
default_composer_category - ‘uncategorized’ n’est alors plus un concept spécial, moins de choses à considérer.
- Avoir un composant de thème pour ceux qui doivent avoir une « catégorie sans badge »
Le bug de recherche actuel peut être corrigé avec quelque chose comme :
diff --git a/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js b/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
index a678919d16..83a9ed27db 100644
--- a/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
+++ b/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
@@ -1,4 +1,5 @@
import { classNames } from \"@ember-decorators/component\";
+import { setting } from \"discourse/lib/computed\";
import CategoryChooserComponent from \"select-kit/components/category-chooser\";
import {
pluginApiIdentifiers,
@@ -7,11 +8,13 @@ import {
@classNames(\"search-advanced-category-chooser\")
@selectKitOptions({
- allowUncategorized: true,
+ allowUncategorized: \"allowUncategorized\",
clearable: true,
none: \"category.all\",
displayCategoryDescription: false,
permissionType: null,
})
@pluginApiIdentifiers(\"search-advanced-category-chooser\")
-export default class SearchAdvancedCategoryChooser extends CategoryChooserComponent {}
+export default class SearchAdvancedCategoryChooser extends CategoryChooserComponent {
+ @setting(\"allow_uncategorized_topics\") allowUncategorized;
+}
import { render } from \"@ember/test-helpers\";
import { module, test } from \"qunit\";
import { setupRenderingTest } from \"discourse/tests/helpers/component-test\";
import selectKit from \"discourse/tests/helpers/select-kit-helper\";
import SearchAdvancedCategoryChooser from \"select-kit/components/search-advanced-category-chooser\";
module(
\"Integration | Component | select-kit/search-advanced-category-chooser\",
function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
this.set(\"subject\", selectKit());
});
test(\"respects allow_uncategorized_topics setting when false\", async function (assert) {
this.siteSettings.allow_uncategorized_topics = false;
await render(\u003ctemplate\u003e\u003cSearchAdvancedCategoryChooser /\u003e\u003c/template\u003e);
await this.subject.expand();
// Uncategorized category (ID 17 in test data) should not be present when setting is false
assert.false(
this.subject.rowByValue(17).exists(),
\"uncategorized category is not available when allow_uncategorized_topics is false\"
);
});
test(\"shows uncategorized category when allow_uncategorized_topics is true\", async function (assert) {
this.siteSettings.allow_uncategorized_topics = true;
await render(\u003ctemplate\u003e\u003cSearchAdvancedCategoryChooser /\u003e\u003c/template\u003e);
await this.subject.expand();
// Uncategorized category (ID 17 in test data) should be present when setting is true
assert.true(
this.subject.rowByValue(17).exists(),
\"uncategorized category is available when allow_uncategorized_topics is true\"
);
});
test(\"has correct default options\", async function (assert) {
await render(\u003ctemplate\u003e\u003cSearchAdvancedCategoryChooser /\u003e\u003c/template\u003e);
assert.strictEqual(
this.subject.header().label(),
\"All categories\",
\"has correct default none label\"
);
});
}
);
Mais ce n’est que le bug de la recherche avancée, nous jouons à la taupe ici…

