Minimum category / sub-category dept level to post a topic

Hi,

  • We have a category called “Help & Support”.

  • This category has a bunch of subcategories. “Robotics”, “Programming”, etc.

  • So far users can post in “Help & Support”.

  • Our issue is that nobody is choosing a subcategory.

We would like to limit posting to only those subcategories.

One solution would be to lock the “Help & Support” category. However, we tested this options and since this disable the “New topic” button, people stopped posting there altogether.

Is there a way to keep a category open but configure the minimum depth level of subcategories selected?

Ideally, the current category (“Help & Support”) would be preselected and people would only need to click and select the subcategory.

Does anyone have an idea on how we could achieve this or similar behavior?

Thanks,
R.

1 Like

Hey there, did you figure out how to do this?

We used the API to modify the post composer controller and add error to is. I don’t have the latest version of the code at hand but it was something like this:

var computed = require("ember-addons/ember-computed-decorators").default;
api.modifyClass('controller:composer',
    {
      save(opts) {
        var categoryNb = $('.category-input .category-chooser .selected-name > span').length;
        if((categoryNb !== 0 && categoryNb < 2)  ) {
            this.set("lastValidatedAt", Date.now());
            return false;
        }
        return this._super(opts);
      },
      @computed("model.categoryId", "lastValidatedAt")
      categoryValidation(categoryId, lastValidatedAt) {
          var InputValidation = require("discourse/models/input-validation").default;
          var categoryNb = $('.category-input .category-chooser .selected-name > span').length;
          if( (categoryNb !== 0 && categoryNb < 2)  ) {
              return InputValidation.create({
                  failed: true,
                  reason: 'You need to select a subcategory',
                  lastShownAt: lastValidatedAt
                });
          } else {
              return this._super(categoryId, lastValidatedAt);
          }
      }
  }
);

In short, this simply looks for the number of elements in the category input and output an error if it’s only one or zero. A subcategory will always have two elements ‘<PARENT><CHILD>’. In this version of the snippet I had laying around, this was done via jQuery. I believe that there was another API call to get the depth of a category.

3 Likes