Le categorie disabilitate e non categorizzate vengono mostrate nei menu a tendina delle categorie

Ho capito, ho appena fatto un po’ di debug locale, confermo che è riproducibile al 100% su installazioni Discourse predefinite.

Ricapitoliamo qui:

Ci sono 2 impostazioni per quanto riguarda le non categorizzate:

allow_uncategorized_topics predefinito disattivato
suppress_uncategorized_badge predefinito attivato

quando allow_uncategorized_topics è disabilitato (configurazione predefinita) ne facciamo trapelare la presenza in determinati punti.

Se provi a risolvere abilitando le non categorizzate in modo da poterle eliminare, ti viene presentato:

In Discourse questa categoria è molto strana in quanto:

  1. Deve esserci
  2. Non può essere eliminata
  3. La inseriamo in molta logica in molti punti:

Possiamo risolvere la fuga di notizie aggiungendo sempre più condizionali, probabilmente siamo già a 10 sia lato client che lato server.

Oppure possiamo risolvere alla radice, permettendo agli amministratori di eliminare la categoria, quindi scompare e non abbiamo più bisogno di controllarla.

La mia raccomandazione qui è

  1. Eliminare entrambe le impostazioni ed eliminare l’impostazione nascosta uncategorized_category_id
  2. Avere un concetto di categoria predefinita (che abbiamo già) - abbiamo già default_composer_category
  3. ‘uncategorized’ quindi non è più un concetto speciale, meno cose su cui ragionare.
  4. Avere un componente tema per coloro che devono avere una “categoria senza badge”

Il bug di ricerca corrente può essere risolto con qualcosa come

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(
        <template><SearchAdvancedCategoryChooser /></template>
      );

      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(
        <template><SearchAdvancedCategoryChooser /></template>
      );

      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(
        <template><SearchAdvancedCategoryChooser /></template>
      );

      assert.strictEqual(
        this.subject.header().label(),
        "All categories",
        "has correct default none label"
      );
    });
  }
);

Ma quello è solo il bug della ricerca avanzata, stiamo giocando a acchiappa la talpa…

3 Mi Piace