Type d'objets pour le réglage du thème

Oui, je parle bien de limiter le nombre maximum d’objets dans le tableau.

Actuellement, cette fonctionnalité n’est pas prise en charge officiellement. J’ai donc étendu les capacités correspondantes dans un composant de thème privé personnalisé. Voici la configuration (à titre de référence uniquement) :

Configuration de la limite maximale du tableau :

themes/quectel-custom-homepage/settings.yml

banner_images:
  type: objects
  default: []
  schema:
    name: "Diaporama"
    max: 9 // Nouvelle configuration étendue pour limiter le nombre maximum d'éléments dans le tableau
    identifier: image_url
    properties:
      image_url:
        type: upload
        required: true
      link_url:
        type: string
        min: 0
        max: 1023

Code d’extension spécifique :

themes/quectel-custom-homepage/javascripts/discourse/api-initializers/quectel-custom-homepage.gjs

import { action } from "@ember/object";
import { apiInitializer } from "discourse/lib/api";
import classPrepend from "discourse/lib/class-prepend";
import { i18n } from "discourse-i18n";

export default apiInitializer(() => {
  // Utiliser classPrepend pour étendre le composant SchemaSettingNewEditor afin de prendre en charge la limite max pour le type objects
  // Ce composant n'est chargé que dans le contexte administrateur
  let SchemaSettingNewEditor;
  try {
    SchemaSettingNewEditor =
      require("discourse/admin/components/schema-setting/editor").default;
  } catch {
    // Les utilisateurs non administrateurs ne peuvent pas charger ce composant, passer l'extension
    return;
  }

  classPrepend(SchemaSettingNewEditor, (Superclass) => {
    return class extends Superclass {
      @action
      addItem() {
        // Vérifier si la limite max est atteinte
        const maxLimit = this.args.setting.max || this.activeSchema?.max;

        if (maxLimit && this.activeData.length >= maxLimit) {
          this.validationErrorMessage = i18n(
            themePrefix("theme_settings.errors.objects_value_not_valid_max"),
            {
              count: maxLimit,
            }
          );
          return;
        }

        return super.addItem(...arguments);
      }

      @action
      addChildItem(propertyName, parentNodeIndex) {
        const propertySchema = this.activeSchema.properties[propertyName];

        // Vérifier si la limite max est atteinte
        if (
          propertySchema?.max &&
          this.activeData[parentNodeIndex][propertyName].length >=
            propertySchema.max
        ) {
          this.validationErrorMessage = i18n(
            themePrefix("theme_settings.errors.objects_value_not_valid_max"),
            {
              count: propertySchema.max,
            }
          );
          return;
        }

        return super.addChildItem(...arguments);
      }
    };
  });
});

Configuration de traduction du thème :

themes/quectel-custom-homepage/locales/zh_CN.yml

zh_CN:
  theme_settings:
    errors:
      objects_value_not_valid_max: "Le nombre ne peut pas dépasser %{count}"

Effet concret :

  1. Message d’erreur
  2. Impossible d’ajouter davantage
1 « J'aime »