¿Cómo configurar un objeto de matriz en un complemento? ¿Usar json_schema? type: objects?

¿Cómo configurar un objeto de matriz en un complemento? Intenté usar json_schema, pero la configuración de propiedades del objeto no permite selectores como ‘category’, solo entrada de texto. Además, type: objects no funciona en absoluto en la configuración del complemento.

Configuración de json_schema

  quectel_online_customer_category_customers:
    default: "[]"
    client: true
    json_schema: QuectelOnlineCustomer::SiteSettings::CategoryCustomersJsonSchema

plugins/quectel-online-customer/lib/quectel_online_customer/site_settings/category_customers_json_schema.rb

# frozen_string_literal: true

module QuectelOnlineCustomer
  module SiteSettings
    class CategoryCustomersJsonSchema
      def self.schema
        @schema ||= begin
          {
            type: "array",
            uniqueItems: true,
            default: [],
            items: {
              type: "object",
              title: "Configuración de atención al cliente por categoría",
              additionalProperties: false, # Prohibir enviar campos no definidos
              required: %w[category customers], # Ambos campos son obligatorios
              properties: {
                category: {
                  type: "category",
                  description: "Categoría del foro vinculada",
                  label: "Categoría"
                },
                customers: {
                  type: "usernames", # Selección múltiple de usuarios, alternativa a username único
                  description: "Cuentas de atención al cliente asignadas a esta categoría, admite selección múltiple",
                  label: "Usuarios de atención al cliente"
                }
              }
            }
          }
        end
      end
    end
  end
end

type:objects debería funcionar en los plugins. Nosotros mismos lo usamos aquí como ejemplo:

https://github.com/discourse/discourse/blob/eba9a3b69cf637fccba1a00978f2269b4fccf9d4/plugins/discourse-openid-connect/config/settings.yml#L59-L71

Sí, es posible. Sin embargo, type:objects tampoco admite type:category. Mi necesidad es seleccionar categorías y grupos.

Ah, entiendo. Entonces, la configuración del objeto se añade directamente a tu settings.yml. Querrías formatearlo de esta manera:

oauth2_category_example:
    type: objects
    default: []
    area: "oauth2"
    schema:
      name: category_rule
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Nombre de la regla
          description: Una etiqueta para esta regla
        category:
          type: categories
          required: true
          label: Categoría
          description: La categoría a la que se aplica esta regla
          validations:
            max: 1
        groups:
          type: groups
          label: Grupos
          description: Grupos asociados a esta categoría

Lo cual produciría un desplegable de categorías como este

¿No se admite la selección única de type:category?

Según esta configuración

quectel_online_customer_category_customer_group:
    type: objects
    default: []
    schema:
      name: "Categoría de grupo de atención al cliente"
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Nombre
          description: Nombre
        category:
          type: categories
          required: true
          label: "Categoría"
          description: "Nombre de la categoría, consulte la página <a href=\"/categories\" target=\"_blank\">Todas las categorías</a>"
        group_name:
          type: groups
          required: true
          label: "Nombre del grupo de atención al cliente"
          description: "Nombre del grupo de atención al cliente, caracteres en inglés, consulte la página <a href=\"/admin/groups\" target=\"_blank\">Grupos de atención al cliente</a>"

He encontrado el siguiente error:

Error ocurrido:

- Durante la renderización:
  {{outlet}} para -top-level
    -top-level
      {{outlet}} para application
        application
          DiscourseRoot
            {{outlet}} para admin
              admin
                {{outlet}} para admin.schema
                  schema
                    SchemaSettingNewEditor
                      SchemaSettingField
                        SchemaSettingTypeCategories
                          CategorySelector

section-link.gjs:149
 Se intentó volver a renderizar, pero la aplicación Ember ha experimentado un error irrecuperable durante la renderización. Debe recargar la aplicación después de corregir la causa del error.
categories.gjs:13
 Uncaught (in promise) TypeError: this.args.value?.map no es una función
    at SchemaSettingTypeCategories.<anónimo> (categories.gjs:13:9)

¿Tiene esto que ver con mi versión?

Discourse v2026.1.4 — Commits · discourse/discourse · GitHub — Ember v6.6.0

¿Tienes alguna configuración obsoleta guardada en la configuración? ¿Podrías intentar restablecerla a la predeterminada con el botón de restablecer si aparece?

No veo el botón de restablecer. La página se ve exactamente como en la captura de pantalla; los elementos debajo de la categoría no se están mostrando.

Mmm, no estoy seguro de qué podría estar fallando ahí… He probado la opción de categorías con el tipo de objetos y sé que funciona, así que no debería ser un problema con tu versión. Todavía me pregunto si algo está atascado en un estado incorrecto en algún lugar, ¿podrías probar una configuración separada con un nombre nuevo solo para probarlo? ¿Está esto en GitHub o en algún otro lugar para que pueda probarlo?

type:categories está bien, type:category no.

Sin embargo, la siguiente configuración también funciona correctamente cuando solo se selecciona una opción, por lo que type:category no es necesario.

category:
  type: categories
  required: true
  label: "Categoría"
  description: "Nombre de la categoría"
  validations:
	max: 1