1cb0d868c8
Три массива в instrument были comma-separated текстом с подсказкой «businessKey'и из X». Пользователь не знал что туда вписать — справочника доступных значений рядом нет. UI: добавлен ReferenceMultiSelectField — array-аналог ReferenceSelectField. Триггер — `items["x-references"]` на string-массиве. Под капотом — готовый MultiSelect (popover + cmdk-поиск). Fallback на comma-separated TextInput сохраняется когда target dict недоступен (scope-hide / 403 / 404), сервер всё равно валидирует FK через ReferenceValidator. Schema: - spacecraft_codes → items.x-references: spacecraft.designator - supported_format_codes → items.x-references: data_format.code - supported_level_codes → items.x-references: processing_level.code instrument schemaVersion 1.0.0 → 1.1.0, bundle 1.3.2 → 1.3.3 — CuodBundleImporter перепишет schema_json в БД на старте writer'а, admin-ui подхватит свежую схему через /api/v1/dictionaries/instrument. Tests: 2 новых кейса в SchemaDrivenForm.test.tsx — happy path (MultiSelect рендерится, запрос ушёл на правильный dict) + fallback (comma-separated с подсказкой «список недоступен»). 171/171 passed.
Ordinis Admin UI
React 19 + Vite 7 + TanStack Router + TanStack Query + Tailwind v4 + i18next.
Локально
cd ordinis-admin-ui
pnpm install
# .env.local: VITE_API_PROXY=http://localhost:8081 (port-forward read-api)
pnpm dev
Контракт API
GET /api/v1/dictionaries(read-api) — список справочниковGET /api/v1/{dictionaryName}/records(read-api) — записи с локализациейPOST /api/v1/dictionaries(writer) — создание справочника (TODO в UI)POST /api/v1/dictionaries/{name}/records(writer) — создание записи (TODO в UI)
Сборка / Docker
docker build -t repo.nstart.cloud/terravault/ordinis-admin-ui:dev .
docker run --rm -p 8088:80 repo.nstart.cloud/terravault/ordinis-admin-ui:dev
# → http://localhost:8088
В кластере nginx проксирует /api/v1/* в ordinis-read-api (GET) и
ordinis-app (POST/PUT/PATCH/DELETE).