Como configurar um objeto de array em um plugin? Usar json_schema? type: objects?

Como configurar objetos de array em um plugin? Tentei usar json_schema, mas as propriedades do objeto não aceitam seletores como category, permitindo apenas entrada de texto. Já type: objects simplesmente não funciona nas configurações do plugin.

Configuração do 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: "Configuração de Atendimento por Categoria",
              additionalProperties: false, # Impede o envio de campos não definidos
              required: %w[category customers], # Ambos os campos são obrigatórios
              properties: {
                category: {
                  type: "category",
                  description: "Categoria do fórum vinculada",
                  label: "Categoria"
                },
                customers: {
                  type: "usernames", # Seleção múltipla de usuários, substituindo o username único
                  description: "Contas de atendimento atribuídas a esta categoria, com suporte a seleção múltipla",
                  label: "Usuários de Atendimento"
                }
              }
            }
          }
        end
      end
    end
  end
end

type:objects deve funcionar nos plugins! Nós mesmos o utilizamos aqui, por exemplo:

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

Sim, é possível. No entanto, type:objects também não suporta type:category. Minha necessidade é selecionar categorias e grupos.

Ah, entendi. Então as configurações do objeto são adicionadas diretamente ao seu settings.yml. Você deve formatá-lo assim:

oauth2_category_example:
    type: objects
    default: []
    area: "oauth2"
    schema:
      name: category_rule
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Nome da regra
          description: Um rótulo para esta regra
        category:
          type: categories
          required: true
          label: Categoria
          description: A categoria à qual esta regra se aplica
          validations:
            max: 1
        groups:
          type: groups
          label: Grupos
          description: Grupos associados a esta categoria

Isso resultaria em um menu suspenso de categorias assim

Não há suporte para seleção única type:category?

Seguindo esta configuração:

quectel_online_customer_category_customer_group:
    type: objects
    default: []
    schema:
      name: "Categoria de Grupo de Atendimento ao Cliente"
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Nome
          description: Nome
        category:
          type: categories
          required: true
          label: "Categoria"
          description: "Nome da categoria, verifique na página <a href=\"/categories\" target=\"_blank\">Todas as Categorias</a>"
        group_name:
          type: groups
          required: true
          label: "Nome do Grupo de Atendimento ao Cliente"
          description: "Nome do grupo de atendimento ao cliente, use caracteres em inglês, verifique na página <a href=\"/admin/groups\" target=\"_blank\">Grupos de Atendimento ao Cliente</a>"

Encontrei o seguinte erro:

Ocorreu um erro:

- Ao renderizar:
  {{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
 Tentativa de re-renderização falhou, mas o aplicativo Ember encontrou um erro irrecoverável durante a renderização. Você deve recarregar o aplicativo após corrigir a causa do erro.
categories.gjs:13
 Uncaught (in promise) TypeError: this.args.value?.map não é uma função
    at SchemaSettingTypeCategories.<anonymous> (categories.gjs:13:9)

Isso tem relação com minha versão?

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

Você tem alguma configuração obsoleta salva nas configurações? Poderia tentar redefini-la para o padrão com o botão de redefinir, se ele aparecer?

Não vi o botão de redefinir. A página está exatamente como na captura de tela, e os itens abaixo da categoria não estão sendo renderizados.

Hmmm, não tenho certeza do que pode estar dando errado lá… Testei a opção de categorias com o tipo de objetos e sei que funciona, então não deveria ser um problema com a sua versão. Ainda me pergunto se algo está travado em um estado ruim em algum lugar, você pode tentar uma configuração separada com um novo nome só para testar? Isso está no GitHub ou em algum outro lugar para eu tentar?

type:categories funciona, mas type:category não.

No entanto, a configuração abaixo também funciona bem para o caso de selecionar apenas uma opção, tornando type:category desnecessário.

category:
  type: categories
  required: true
  label: "Categoria"
  description: "Nome da categoria"
  validations:
	max: 1