Come configurare un oggetto array in un plugin? Usare json_schema? type: objects?

Come configurare oggetti di tipo array nei plugin. Ho provato a utilizzare json_schema, ma le configurazioni delle proprietà degli oggetti non supportano selettori come category; è possibile inserire solo testo. Inoltre, type: objects non funziona affatto nelle configurazioni dei plugin.

Configurazione di 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: "Configurazione servizio clienti per categoria",
              additionalProperties: false, # Vieta l'invio di campi non definiti
              required: %w[category customers], # Entrambi i campi sono obbligatori
              properties: {
                category: {
                  type: "category",
                  description: "Categoria del forum associata",
                  label: "Categoria"
                },
                customers: {
                  type: "usernames", # Selezione multipla di utenti, alternativa al singolo username
                  description: "Account del servizio clienti assegnati a questa categoria, supporta selezione multipla",
                  label: "Utenti del servizio clienti",
                }
              }
            }
          }
        end
      end
    end
  end
end

type:objects dovrebbe funzionare nei plugin! Lo usiamo anche noi qui, ad esempio

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

Sì, è effettivamente possibile. Tuttavia, anche in type:objects non è supportato type:category. La mia esigenza è selezionare categorie e gruppi.

Ah, capisco, quindi le impostazioni dell’oggetto vengono aggiunte direttamente al tuo settings.yml. Dovresti formattarlo in questo modo:

oauth2_category_example:
    type: objects
    default: []
    area: "oauth2"
    schema:
      name: category_rule
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Nome della regola
          description: Un'etichetta per questa regola
        category:
          type: categories
          required: true
          label: Categoria
          description: La categoria a cui si applica questa regola
          validations:
            max: 1
        groups:
          type: groups
          label: Gruppi
          description: Gruppi associati a questa categoria

Ciò produrrà un menu a discesa per le categorie simile a questo

Non è possibile selezionare un solo valore per type:category?

Secondo questa configurazione

quectel_online_customer_category_customer_group:
    type: objects
    default: []
    schema:
      name: "Gruppo categorie assistenza clienti"
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Nome
          description: Nome
        category:
          type: categories
          required: true
          label: "Categoria"
          description: "Nome della categoria, visualizzabile nella pagina <a href=\"/categories\" target=\"_blank\">tutte le categorie</a>"
        group_name:
          type: groups
          required: true
          label: "Nome del gruppo assistenza clienti"
          description: "Nome del gruppo assistenza clienti, caratteri alfabetici, visualizzabile nella pagina <a href=\"/admin/groups\" target=\"_blank\">gruppi assistenza clienti</a>"

ho riscontrato il seguente errore:

Si è verificato un errore:

- Durante il rendering:
  {{outlet}} per -top-level
    -top-level
      {{outlet}} per application
        application
          DiscourseRoot
            {{outlet}} per admin
              admin
                {{outlet}} per admin.schema
                  schema
                    SchemaSettingNewEditor
                      SchemaSettingField
                        SchemaSettingTypeCategories
                          CategorySelector

section-link.gjs:149
 Tentativo di ridisegno, ma l'applicazione Ember ha registrato un errore irreversibile durante il rendering. È necessario ricaricare l'applicazione dopo aver risolto la causa dell'errore.
categories.gjs:13
 Uncaught (in promise) TypeError: this.args.value?.map non è una funzione
    at SchemaSettingTypeCategories.<anonymous> (categories.gjs:13:9)

Ha a che fare con la mia versione?

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

Hai qualche configurazione obsoleta salvata nelle impostazioni? Potresti provare a reimpostarla ai valori predefiniti utilizzando il pulsante di ripristino, se appare?

Non vedo il pulsante di reset; la pagina è esattamente come nell’immagine, e le categorie sottostanti non vengono visualizzate.

Mmmh, non sono sicuro di cosa possa andare storto lì… Ho testato l’opzione delle categorie con il tipo di oggetto, quindi so che funziona, e non dovrebbe essere un problema della tua versione. Mi chiedo ancora se qualcosa sia rimasto in uno stato errato da qualche parte: potresti provare a creare una nuova impostazione con un nome diverso, solo per fare una prova? È su GitHub o da qualche altra parte, così posso provarlo anch’io?

type:categories va bene, type:category no.

Tuttavia, la configurazione seguente funziona correttamente anche nel caso in cui venga selezionata una sola voce, quindi type:category non è necessario.

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