feat(schema): FK тип в schema-builder — picker для x-references
Раньше для добавления FK поля admin должен был лезть в JSON-tab
и руками писать 'x-references': 'dict.field' — рискованно
(typo в имени словаря не диагностится до save), и неочевидно для
не-дев пользователей.
Теперь:
- В Type dropdown появилось 'Ссылка на словарь (FK)' рядом с Enum
- При выборе reference показывается двухпольный picker:
- SingleSelect списка доступных словарей (через useDictionaries
запрос — admin видит full list с displayName)
- TextInput поля в target (default 'code', соответствует
x-id-source большинства словарей)
- Highlight border-ultramarain/20 + bg-ultramarain/4 — визуально
отличается от обычного scalar-конфига
types.ts:
- 'reference' в PropertyKind union + PROPERTY_KINDS list
- referenceTarget?: string в PropertyDef ('dict.field')
- propertyToSchema → {type:'string','x-references':'...'}
- inferKind распознаёт x-references → reference kind (не opaque
fallback) — round-trip preserved
- kindOf включает 'reference' для diff: смена reference↔string
ловится как breaking change
Tests: +1 (76 total) — reference roundtrip build→parse.
После CI rebuild создатели справочников делают FK без JSON tab.
This commit is contained in:
@@ -208,11 +208,18 @@ i18n
|
||||
'schema.kind.number': 'Число',
|
||||
'schema.kind.boolean': 'Логическое',
|
||||
'schema.kind.enum': 'Enum (выбор из списка)',
|
||||
'schema.kind.reference': 'Ссылка на словарь (FK)',
|
||||
'schema.kind.localized': 'I18N строка (ru-RU/en-US/...)',
|
||||
'schema.kind.date': 'Дата',
|
||||
'schema.kind.datetime': 'Дата+время',
|
||||
'schema.kind.array_string': 'Массив строк',
|
||||
'schema.kind.opaque': 'Сложный (JSON)',
|
||||
'schema.reference.title': 'FK на запись справочника',
|
||||
'schema.reference.hint': 'Значение поля будет проверяться при сохранении: оно должно совпадать с business-key или указанным полем существующей записи целевого словаря.',
|
||||
'schema.reference.targetDict': 'Целевой словарь',
|
||||
'schema.reference.targetField': 'Поле',
|
||||
'schema.reference.targetFieldHint': 'Обычно code или business_key',
|
||||
'schema.reference.required': 'Заполните оба: словарь и поле — иначе FK не сработает.',
|
||||
'schema.opaque.title': 'Сложное поле — редактируется только через JSON-таб',
|
||||
'schema.opaque.hint': 'Nested object / array of objects. Поля-табе нет редактора, raw schema показан ниже. Меняй через вкладку "JSON".',
|
||||
'field.name': 'Наименование',
|
||||
@@ -450,6 +457,7 @@ i18n
|
||||
'schema.kind.number': 'Number',
|
||||
'schema.kind.boolean': 'Boolean',
|
||||
'schema.kind.enum': 'Enum (pick from list)',
|
||||
'schema.kind.reference': 'Reference to dictionary (FK)',
|
||||
'schema.kind.localized': 'I18N string (ru-RU/en-US/...)',
|
||||
'schema.kind.date': 'Date',
|
||||
'schema.kind.datetime': 'Date+time',
|
||||
@@ -457,6 +465,12 @@ i18n
|
||||
'schema.kind.opaque': 'Complex (JSON)',
|
||||
'schema.opaque.title': 'Complex field — edit only via JSON tab',
|
||||
'schema.opaque.hint': 'Nested object / array of objects. No editor in Fields tab, raw schema shown below. Edit via JSON tab.',
|
||||
'schema.reference.title': 'FK to dictionary record',
|
||||
'schema.reference.hint': 'Value is validated on save: must match the business-key or specified field of an existing record in the target dictionary.',
|
||||
'schema.reference.targetDict': 'Target dictionary',
|
||||
'schema.reference.targetField': 'Field',
|
||||
'schema.reference.targetFieldHint': 'Usually code or business_key',
|
||||
'schema.reference.required': 'Fill both target dictionary and field — otherwise FK will not work.',
|
||||
'field.name': 'Name',
|
||||
'field.designator': 'Designator (COSPAR)',
|
||||
'field.norad_id': 'NORAD ID',
|
||||
|
||||
Reference in New Issue
Block a user