Схема налаштувань (GenerateConfig)

Викликайте GenerateConfig([...]) під час завантаження аддона, щоб оголосити поля налаштувань. Схеми зберігаються в конфігурації застосунку; значення — у addonsParams[id]. Значення за замовчуванням зливаються під час реєстрації та при відкритті сторінки налаштувань.

Структура поля

Кожне поле має:

Властивість Опис
key Ключ зберігання в об'єкті params
type text, textarea, hidden, color, number, boolean, array, object, select, choice, button, folder, file, info, spoiler, page
default Початкове значення
editor Якщо присутній — поле з'являється в UI налаштувань з міткою, валідацією тощо
options Для select / choice: { value, label?, description? }[]
visibleWhen Необов'язково { key, equals } — сховати поле, поки params[key] !== equals
items Для array: 'text' або 'number'. Для spoiler / page: вкладені записи схеми (той самий формат, що й аргументи GenerateConfig; рекурсія дозволена)
fields Для object: вкладені поля
event Для button: ім'я події при натисканні (обробляйте через events.On)

Поля без editor зберігаються (внутрішні лічильники, токени), але не показуються в UI.

Поля в одному рядку

Обгорніть кілька полів у вкладений масив, щоб відобразити їх в одному рядку налаштувань:

GenerateConfig([
  fieldA,
  [fieldB, fieldC],
  fieldD,
]);

Підтримувані типи

Поля всередині spoiler / page зберігаються на рівні батьківських params (ключі-сусіди контейнера), а не під ключем контейнера.

Необов'язковий visibleWhen: { key, equals } ховає поле в UI, поки значення сусіднього параметра не збіжиться.

Приклад spoiler / page

{
  key: 'advanced',
  type: 'spoiler',
  editor: {
    label: { en: 'Advanced', ru: 'Дополнительно', uk: 'Додатково' },
    description: { en: 'Optional tuning', uk: 'Додаткові параметри' },
  },
  items: [
    {
      key: 'debug',
      type: 'boolean',
      default: false,
      editor: { label: { en: 'Debug logging', uk: 'Налагоджувальний лог' } },
    },
    {
      key: 'network',
      type: 'page',
      editor: { label: { en: 'Network', uk: 'Мережа' } },
      items: [
        {
          key: 'timeout_ms',
          type: 'number',
          default: 5000,
          editor: { label: { en: 'Timeout (ms)', uk: 'Таймаут (мс)' } },
        },
      ],
    },
  ],
},

Приклад

GenerateConfig([
  {
    key: 'api_server',
    type: 'text',
    default: 'https://example.com:2083',
    editor: {
      label: { en: 'API server', ru: 'API сервер', uk: 'API сервер' },
    },
  },
  {
    key: 'theme',
    type: 'select',
    default: 'dark',
    options: [
      { value: 'dark', label: { en: 'Dark', ru: 'Тёмная', uk: 'Темна' } },
      { value: 'light', label: { en: 'Light', ru: 'Светлая', uk: 'Світла' } },
    ],
    editor: { label: { en: 'Theme', ru: 'Тема', uk: 'Тема' } },
  },
  { key: 'last_sync', type: 'number', default: 0 },
  {
    key: 'reconnect',
    type: 'button',
    event: 'onReconnect',
    editor: { label: { en: 'Reconnect', ru: 'Переподключиться', uk: 'Перепідключитися' } },
  },
]);

events.On('onReconnect', async () => {
  // user clicked Reconnect in settings
});

Читання params

const params = await api.config.getParams();
await api.config.updateParams({ last_sync: Date.now() });

Ліміт розміру: 10 000 байт JSON на аддон, якщо не надано INCREASE_CONFIG_SIZE (1 000 000 байт).