Sí, me refiero a limitar la cantidad máxima de elementos en el array de objetos.
Actualmente, la versión oficial no lo soporta, por lo que he extendido esta funcionalidad en un componente de tema privado personalizado. La configuración es la siguiente (solo como referencia):
Configuración para limitar el número máximo de elementos en el array:
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "Imagen de carrusel"
max: 9 // Nueva configuración extendida para limitar la cantidad máxima de elementos en el array
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
Código específico de la extensión:
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(() => {
// Utilizar classPrepend para extender el componente SchemaSettingNewEditor y soportar la limitación max para el tipo objects
// Cargar este componente solo en el contexto de administrador
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// Los usuarios que no son administradores no pueden cargar este componente, omitir la extensión
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// Verificar si se ha alcanzado el límite max
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];
// Verificar si se ha alcanzado el límite max
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);
}
};
});
});
Configuración de traducción del tema:
themes/quectel-custom-homepage/locales/zh_CN.yml
zh_CN:
theme_settings:
errors:
objects_value_not_valid_max: "La cantidad no puede superar %{count}"
Efecto concreto:
- Mensaje de error
- No se pueden añadir más elementos
