From 7cf1e93096763f6e204492171fa26ab15c3616a2 Mon Sep 17 00:00:00 2001 From: Semyon Krestyaninov <krestyaninov@perx.ru> Date: Fri, 14 Feb 2025 10:37:57 +0000 Subject: [PATCH] =?UTF-8?q?chore:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=81=D0=BF=D0=B5=D1=86=D0=B8=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20JSON=20Schema=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=81=D1=85=D0=B5=D0=BC=D1=8B=20=D0=BA=D0=BE=D0=BB?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../json-schema/perxis-collection-schema.json | 1420 +++++++++++++++++ 1 file changed, 1420 insertions(+) create mode 100644 assets/json-schema/perxis-collection-schema.json diff --git a/assets/json-schema/perxis-collection-schema.json b/assets/json-schema/perxis-collection-schema.json new file mode 100644 index 00000000..d5874a92 --- /dev/null +++ b/assets/json-schema/perxis-collection-schema.json @@ -0,0 +1,1420 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema", + "title": "Perxis Collection Schema", + "$defs": { + "view": { + "type": "object", + "properties": { + "widget": { + "description": "Виджет для отображения поля РІ СЃРїРёСЃРєРµ", + "type": "string" + }, + "options": { + "description": "Опции виджета, РЅР° усмотрения виджета", + "type": "object" + } + } + }, + "translation": { + "type": "object", + "properties": { + "locale": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "locale" + ] + }, + "include": { + "type": "object", + "properties": { + "ref": { + "description": "Рдентификатор коллекции подключаемой схемы", + "type": "string" + }, + "optional": { + "description": "Параметр определяющий обязательность подключение схемы", + "type": "boolean" + } + } + }, + "field": { + "type": "object", + "properties": { + "type": { + "description": "РўРёРї поля. Доступные значения: bool, array, file, location, number, object, reference, string, time, timestamp", + "type": "string", + "enum": [ + "bool", + "array", + "file", + "location", + "number", + "object", + "reference", + "string", + "time", + "timestamp" + ] + }, + "title": { + "description": "Заголовок поля", + "type": "string" + }, + "description": { + "description": "Описание поля", + "type": "string" + }, + "translations": { + "description": "Локализация заголовка Рё описания поля", + "type": "array", + "items": { + "$ref": "#/$defs/translation" + } + }, + "options": { + "description": "Может содержать правила валидации или модификации данных для поля", + "type": "object", + "properties": { + "readonly": { + "description": "Только для чтения", + "type": "boolean" + }, + "required": { + "description": "Обязательно для заполнения. РќРµ учитывается для переводов", + "type": "boolean" + }, + "value": { + "description": "Формула значения (опционально). Р’ случае если формула указана, то РїСЂРё сохранении значение РёР· данных будет заменено РЅР° результат вычисления формулы", + "type": "string" + } + } + }, + "ui": { + "description": "Описывает отображение объекта РІ интерфейсе", + "type": "object", + "properties": { + "widget": { + "description": "Виджет для отображения поля", + "type": "string" + }, + "placeholder": { + "description": "Местозаполнитель для полей", + "type": "string" + }, + "options": { + "description": "Опции виджета, РЅР° усмотрения виджета", + "type": "object", + "properties": { + "title": { + "description": "Поле используемое РІ качестве заголовка РїСЂРё отображении", + "type": "string" + }, + "key": { + "description": "Поле используемое РІ качестве ключевого значения", + "type": "string" + }, + "subtitle": { + "description": "Поле используемое РІ качестве подзаголовков РїСЂРё отображении", + "type": "string" + }, + "description": { + "description": "Поле используемое РІ качестве описания РїСЂРё отображении", + "type": "string" + }, + "icon": { + "description": "Поле используемое РІ качестве имени РёРєРѕРЅРєРё (РёР· библиотеки приложения) РїСЂРё отображении", + "type": "string" + }, + "images": { + "description": "Поля используемые РІ качестве изображений. Поддерживаются поля типа file Рё reference. Р’ случае file файл должен должен быть изображением. Р’ случае reference, РІ схеме коллекции РЅР° элемент которой ссылается reference должно быть указано поле ui.options.images которое РІ СЃРІРѕСЋ очередь так Р¶Рµ может указывать РЅР° поля типа file Рё reference Рё.С‚.Рґ", + "type": "array", + "items": { + "type": "string" + } + }, + "refs": { + "description": "Определяет какие поля (Reference/[]Reference) используются для отображения связанных записей, Р° так Р¶Рµ РёС… РїРѕСЂСЏРґРѕРє", + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "description": "РРјСЏ поля для отображения", + "type": "string" + }, + "expand": { + "description": "Раздел поля раскрыт (РїРѕ умолчанию отображается свернутым)", + "type": "boolean" + } + } + } + }, + "fields": { + "description": "РџРѕСЂСЏРґРѕРє следования полей РїРѕ умолчанию. Параметр указывает только РїРѕСЂСЏРґРѕРє следования", + "type": "array", + "items": { + "type": "string" + } + }, + "color": { + "description": "Поле используемое РІ качестве цвета фона РїСЂРё отображении записи РІ таблице Рё РІ виджете Block/BlockList. Р’ качестве значения поля используемого для указания цвета может быть: Название цвета antd: magenta, red, volcano, orange, gold, lime, green, cyan, blue, geekblue, purple. Название статуса antd: success, processing, error, warning, default. Любое значение цвета, которое поддерживается библиотекой TinyColor: hex: #ff0000 hex8: #ff0000ff rgb: rgb(255, 0, 0) hsl: hsl(0, 100%, 50%) hsv: hsv(0, 100%, 100%)", + "type": "string" + }, + "collection_icon": { + "description": "Название РёРєРѕРЅРєРё для отображения коллекции РІ меню или РІ СЃРїРёСЃРєРµ коллекций", + "type": "string" + }, + "fieldProps": { + "description": "Параметры отображения поля РІ grid сетке" + } + } + }, + "read_view": { + "description": "Настройки для отображения экрана РІ режиме просмотра элемента", + "$ref": "#/$defs/view" + }, + "edit_view": { + "description": "Настройки для отображения экрана РІ режиме редактирования элемента", + "$ref": "#/$defs/view" + }, + "list_view": { + "description": "Настройки для отображения экрана РІ режиме СЃРїРёСЃРєРµ элементов", + "allOf": [ + { + "$ref": "#/$defs/view" + }, + { + "properties": { + "options": { + "properties": { + "fields": { + "description": "РЎРїРёСЃРѕРє отображаемых полей Рё РїРѕСЂСЏРґРѕРє РёС… отображения РІ СЃРїРёСЃРєРµ РїРѕ умолчанию (пользователь может изменить). Если РЅРµ задан, то используется РѕСЃРЅРѕРІРЅРѕР№ параметр fields", + "type": "array", + "items": { + "type": "string" + } + }, + "sort": { + "description": "Настройка сортировки СЃРїРёСЃРєР° РїРѕ умолчанию", + "type": "array", + "items": { + "type": "string" + } + }, + "page_size": { + "description": "Настройка размера страниц РїРѕ умолчанию", + "type": "integer" + } + } + } + } + } + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "widget": { + "const": "LogViewer" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "maxHeight": { + "description": "Высота поля, число отображаемых строк", + "type": "integer" + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "RTE" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "mediaCollections": { + "description": "РЎРїРёСЃРѕРє коллекций доступных РїСЂРё вставке изображения", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "CodeEditor" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "height": { + "description": "Высота редактора, число отображаемых строк", + "type": "integer" + }, + "defaultLanguage": { + "description": "Язык РїРѕ-умолчанию. Доступны для выбора - html, json, markdown, plaintext, yaml. Если РЅРµ указан, будет выбран plaintext", + "type": "string", + "enum": [ + "html", + "json", + "markdown", + "plaintext", + "yaml" + ] + }, + "allowChangeLanguage": { + "description": "Активация возможности переключения языка РІ самом виджете РІРѕ время редактирования РєРѕРґР°", + "type": "boolean" + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "DateTimePicker" + } + } + }, + "then": { + "properties": { + "list_view": { + "type": "object", + "properties": { + "options": { + "properties": { + "format": { + "description": "Рспользуется метод format библиотеки dayjs https://day.js.org/docs/en/display/format", + "type": "string" + } + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "TimestampPicker" + } + } + }, + "then": { + "properties": { + "list_view": { + "type": "object", + "properties": { + "options": { + "properties": { + "format": { + "description": "Рспользуется метод format библиотеки dayjs https://day.js.org/docs/en/display/format", + "type": "string" + } + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "Select" + } + } + }, + "then": { + "properties": { + "list_view": { + "type": "object", + "properties": { + "options": { + "properties": { + "enum": { + "description": "", + "type": "array", + "items": { + "type": "object", + "properties": { + "value": { + "type": [ + "string", + "integer" + ] + }, + "color": { + "description": "Цвет тега как РІ документации https://ant.design/components/tag/", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "SelectList" + } + } + }, + "then": { + "properties": { + "list_view": { + "type": "object", + "properties": { + "options": { + "properties": { + "enum": { + "type": "array", + "items": { + "type": "object", + "properties": { + "value": { + "type": [ + "string", + "integer" + ] + }, + "color": { + "description": "Цвет тега как РІ документации https://ant.design/components/tag/", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "Radio" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "option_type": { + "description": "РўРёРї переключателей", + "type": "string", + "enum": [ + "button", + "default" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "option_type": { + "const": "default" + } + } + }, + "then": { + "properties": { + "direction": { + "description": "Вариант отображения переключателей", + "type": "string", + "enum": [ + "horizontal", + "vertical" + ] + } + } + } + } + ] + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "SpaceSelect" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "allowSpacesFromAllOrgs": { + "description": "Выбор пространств РёР· всех доступных организаций", + "type": "boolean" + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "Group" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "group": { + "description": "Разместить поля РїРѕ grid сетке", + "type": "boolean" + }, + "groupProps": { + "description": "Параметры grid сетки, компонент Row", + "type": "object" + } + } + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "widget": { + "const": "Lookup" + } + } + }, + { + "properties": { + "widget": { + "const": "LookupList" + } + } + } + ] + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "itemsFilter": { + "description": "Дополнительная фильтрация элементов СЃ возможностью подстановки значений РёР· текущего контекста", + "type": "string" + }, + "collectionsFilter": { + "description": "Дополнительная фильтрация коллекций СЃ возможностью подстановки значений РёР· текущего контекста. Указывается массив значений для фильтрации РїРѕ id", + "type": "array" + }, + "allowedCollections": { + "type": "array", + "items": { + "type": "object", + "properties": { + "valueField": { + "description": "РРјСЏ поля значения", + "type": "string" + }, + "collection": { + "description": "ID коллекции", + "type": "string" + }, + "titleField": { + "description": "РРјСЏ поля заголовка", + "type": "string" + }, + "descriptionField": { + "description": "РРјСЏ поля описания", + "type": "string" + }, + "imageField": { + "description": "РРјСЏ поля изображения", + "type": "string" + } + }, + "required": [ + "valueField", + "collection" + ] + } + } + } + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "widget": { + "const": "Block" + } + } + }, + { + "properties": { + "widget": { + "const": "BlockList" + } + } + } + ] + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "create": { + "description": "Настройки интерфейса создания новых элементов РІ виджете", + "type": "object", + "properties": { + "disable": { + "description": "Создание элементов отключено (только выбор существующих)", + "type": "boolean" + }, + "classes": { + "description": "Классы действий применимые для создания", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "widget": { + "const": "Reference" + } + } + }, + { + "properties": { + "widget": { + "const": "ReferenceList" + } + } + } + ] + }, + "then": { + "properties": { + "list_view": { + "properties": { + "options": { + "properties": { + "allow_preview": { + "description": "Отображение предпросмотра ссылки как Блока РІРѕ всплывающем окошке РїСЂРё наведении РЅР° тег ссылки РІ таблице элементов", + "type": "boolean" + } + } + } + } + }, + "options": { + "type": "object", + "properties": { + "itemsFilter": { + "description": "Дополнительная фильтрация элементов СЃ возможностью подстановки значений РёР· текущего контекста", + "type": "string" + }, + "collectionsFilter": { + "description": "Дополнительная фильтрация коллекций СЃ возможностью подстановки значений РёР· текущего контекста", + "type": "array" + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "Media" + } + } + }, + "then": { + "properties": { + "list_view": { + "type": "object", + "properties": { + "options": { + "type": "object", + "properties": { + "size": { + "description": "Размер изображения", + "type": "string", + "enum": [ + "small", + "middle", + "large" + ] + } + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "MediaList" + } + } + }, + "then": { + "properties": { + "list_view": { + "type": "object", + "properties": { + "options": { + "type": "object", + "properties": { + "images_count": { + "description": "Количество отображаемых изображений", + "type": "integer" + }, + "size": { + "description": "Размер изображения", + "type": "string", + "enum": [ + "small", + "middle", + "large" + ] + } + } + } + } + } + } + } + }, + { + "if": { + "properties": { + "widget": { + "const": "Collection" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "includeHidden": { + "description": "Показывать скрытые коллекции РІ СЃРїРёСЃРєРµ возможных вариантов", + "type": "boolean" + } + } + } + } + } + } + ] + }, + "includes": { + "description": "Включает РІ поле РґСЂСѓРіРёРµ схемы", + "type": "array", + "items": { + "$ref": "#/$defs/include" + } + }, + "single_locale": { + "description": "Флаг, показывающий, что данные РІ поле РЅРµ РјРѕРіСѓС‚ быть локализованы", + "type": "boolean" + }, + "indexed": { + "description": "Флаг, определяющий индексацию данных РІ этом поле для ускорения фильтрации", + "type": "boolean" + }, + "unique": { + "description": "Флаг, указывающий, что поле может иметь только уникальное значение среди всех записей РІ коллекции. РџСЂРё попытке добавить дублирующее значение будет возвращена ошибка Рё отказ сохранить или обновить запись. Для переводов записи РЅР° РґСЂСѓРіРёРµ языки проверка уникальности осуществляется отдельно для каждого языка", + "type": "boolean" + }, + "text_search": { + "description": "Флаг, указывающий, что РїРѕ данному полю должен осуществляться полнотекстовый РїРѕРёСЃРє. Полнотекстовый РїРѕРёСЃРє выполняется РїРѕ всем полям СЃ данным флагом Рё РёС… переводам", + "type": "boolean" + }, + "condition": { + "description": "Формула, результат вычисление определяет видимость поля Рё присутствия поля данных. Формула должна возвращать булево значение. Если данный параметр РЅРµ указан, то поле считается видимым", + "type": "string" + }, + "additional_values": { + "description": "Позволяет указывать дополнительные пользовательские значения РІРЅРµ ограничений наложенных правилами Enum, Lookup Рё РґСЂСѓРіРёРјРё правилами ограничивающими значения поля", + "type": "boolean" + } + }, + "required": [ + "type" + ], + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "bool" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "enum": { + "description": "Выбор РёР· заданных значений", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "boolean" + } + } + } + }, + "default": { + "type": "boolean" + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "Checkbox", + "Switch" + ] + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "array" + } + } + }, + "then": { + "properties": { + "params": { + "type": "object", + "properties": { + "item": { + "description": "Описание типа поля элементов", + "$ref": "#/$defs/field" + } + }, + "required": [ + "item" + ] + }, + "options": { + "type": "object", + "properties": { + "maxItems": { + "description": "Максимальное количество элементов РІ поле", + "type": "integer" + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "SelectList", + "SpaceSelect", + "LocaleSelect", + "List", + "Tags", + "LookupList", + "BlockList", + "ReferenceList", + "MediaList", + "Collection" + ] + } + } + } + }, + "required": [ + "params" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "file" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object" + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "File" + ] + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "location" + } + } + }, + "then": { + "properties": { + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup" + ] + }, + "options": { + "type": "object" + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "number" + } + } + }, + "then": { + "properties": { + "params": { + "type": "object", + "properties": { + "format": { + "description": "Конкретный числовой тип данных", + "type": "string", + "enum": [ + "int", + "float" + ] + } + }, + "required": [ + "format" + ] + }, + "options": { + "type": "object", + "properties": { + "max": { + "description": "Максимальное значение", + "type": "integer" + }, + "min": { + "description": "Минимальное значение", + "type": "integer" + }, + "multipleOf": { + "description": "Кратность", + "type": "integer" + }, + "enum": { + "description": "Выбор РёР· заданных значений", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "integer" + } + } + } + }, + "default": { + "description": "Значение РїРѕ умолчанию", + "type": "integer" + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "NumberInput", + "Select", + "SelectList", + "Radio" + ] + } + } + } + }, + "required": [ + "params" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "object" + } + } + }, + "then": { + "properties": { + "options": { + "type": "object", + "properties": { + "default": { + "description": "Значение РїРѕ умолчанию", + "type": "object" + } + } + }, + "params": { + "type": "object", + "properties": { + "inline": { + "description": "флаг, указывающий РЅР° то что объект является “встроенным” РІ родительский объект", + "type": "boolean" + }, + "fields": { + "description": "РЎРїРёСЃРѕРє полей объекта СЃ описанием", + "type": "object", + "patternProperties": { + "^[a-zA-Z0-9._-]+$": { + "$ref": "#/$defs/field" + } + } + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "Group", + "Tabs", + "Accordion" + ] + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "reference" + } + } + }, + "then": { + "properties": { + "params": { + "type": "object", + "properties": { + "allowedCollections": { + "description": "РЎРїРёСЃРѕРє коллекций, ссылки РЅР° элементы которых РјРѕРіСѓС‚ быть использованы РІ поле. Поддерживаются glob выражения. Необязательно для заполнения - РІ случае, если поле РЅРµ заполнено, разрешен РїРѕРёСЃРє РїРѕ всем коллекциям", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + } + }, + "options": { + "type": "object", + "properties": { + "minItems": { + "description": "Минимальное количество связей РІ поле", + "type": "integer" + }, + "maxItems": { + "description": "Максимальное количество связей РІ поле", + "type": "integer" + }, + "enum": { + "description": "Выбор РёР· заданных значений", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "object" + } + } + } + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "Block", + "Reference", + "Media" + ] + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "string" + } + } + }, + "then": { + "properties": { + "options": { + "properties": { + "maxLength": { + "description": "Максимальное количество символов РІ тексте", + "type": "integer" + }, + "minLength": { + "description": "Минимальное количество символов РІ тексте", + "type": "integer" + }, + "enum": { + "description": "Выбор РёР· заданных значений", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "default": { + "description": "Значение РїРѕ умолчанию", + "type": "string" + }, + "trimSpace": { + "description": "Убрать лишние пробелы РІ начале Рё конце строки", + "type": "boolean" + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "StringInput", + "Textarea", + "LogViewer", + "RTE", + "CodeEditor", + "SchemaEditor", + "Timezone", + "Select", + "Radio", + "Password", + "Icon", + "SpaceSelect", + "LocaleSelect", + "Collection" + ] + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "time" + } + } + }, + "then": { + "properties": { + "params": { + "type": "object", + "properties": { + "layout": { + "description": "Формат времени. Необязательно Рє заполнению. РџРѕ умолчанию предполагается формат времени, описанный RFC3339. РњРѕР¶РЅРѕ указать РґСЂСѓРіРѕР№ формат. Для описания необходимо использовать конкретную дату Mon Jan 2 15:04:05 MST 2006 (Unix 1136239445)", + "type": "string" + } + } + }, + "options": { + "properties": { + "default": { + "description": "Значение РїРѕ умолчанию", + "type": "string" + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "DateTimePicker" + ] + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "timestamp" + } + } + }, + "then": { + "properties": { + "options": { + "properties": { + "default": { + "description": "Значение РїРѕ умолчанию", + "type": "integer" + } + } + } + }, + "ui": { + "properties": { + "widget": { + "enum": [ + "Lookup", + "TimestampPicker" + ] + } + } + } + } + } + ] + } + }, + "anyOf": [ + { + "$ref": "#/$defs/field", + "properties": { + "metadata": { + "type": [ + "object", + "null" + ], + "properties": { + "collection_id": { + "type": "string" + }, + "collection_name": { + "type": "string" + }, + "collection_hidden": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "schema": { + "type": "object", + "allOf": [ + { + "$ref": "#/$defs/field" + } + ], + "properties": { + "loaded": { + "type": "boolean" + }, + "metadata": { + "type": [ + "object", + "null" + ] + } + } + }, + "no_data": { + "description": "Коллекция РЅРµ содержит данных", + "type": "boolean" + }, + "single": { + "description": "Коллекция может содержать СЂРѕРІРЅРѕ РѕРґРЅСѓ запись", + "type": "boolean" + }, + "hidden": { + "description": "Скрыть коллекцию РІ интерфейсе РѕС‚ пользователя", + "type": "boolean" + }, + "no_archive": { + "description": "Коллекция без архива", + "type": "boolean" + }, + "no_publish": { + "description": "Коллекция без публикации", + "type": "boolean" + }, + "no_revisions": { + "description": "Коллекция без истории изменений (ревизии)", + "type": "boolean" + }, + "max_revisions": { + "description": "Старые ревизии сверх указанного количества Р±СѓРґСѓС‚ автоматически удаляться. 0, пусто - без ограничений", + "type": "integer" + }, + "revision_ttl": { + "description": "Ревизии старше указанного времени хранения Р±СѓРґСѓС‚ автоматически удалятся. 0, пусто - без ограничений", + "type": "integer" + } + }, + "required": [ + "id", + "name", + "schema" + ], + "additionalProperties": false + } + ] +} \ No newline at end of file -- GitLab