From f2edf7ade7b5b5ed517137793f32e69657150a4c Mon Sep 17 00:00:00 2001 From: Vishesh 'ironeagle' Bangotra Date: Sat, 13 Jun 2026 16:19:40 +0530 Subject: [PATCH] fixes --- react-openapi/components/GenericForm.tsx | 1 + react-openapi/components/fields/RelationField.tsx | 11 ++++++++--- react-openapi/utils/options.ts | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/react-openapi/components/GenericForm.tsx b/react-openapi/components/GenericForm.tsx index 9a51076..b683c33 100644 --- a/react-openapi/components/GenericForm.tsx +++ b/react-openapi/components/GenericForm.tsx @@ -45,6 +45,7 @@ export default function GenericForm({ let relations: string[] = []; Object.values(fields).forEach(field => { if (field.relation) relations.push(field.relation); + if (field.refers) relations.push(field.refers); if (field.schema) relations = [...relations, ...getRelationFields(field.schema)]; }); return Array.from(new Set(relations)); diff --git a/react-openapi/components/fields/RelationField.tsx b/react-openapi/components/fields/RelationField.tsx index 0c28a02..8233216 100644 --- a/react-openapi/components/fields/RelationField.tsx +++ b/react-openapi/components/fields/RelationField.tsx @@ -3,15 +3,20 @@ import { getFieldOptions } from '../../utils/options'; import { FieldComponentProps } from '../../types/overrides'; export default function RelationField({ field, value, onChange, disabled, relationDataMap = {} }: FieldComponentProps) { - if (!field.relation || !relationDataMap[field.relation]) { - return null; + const relationName = field.relation ?? (field as any).refers; + if (!relationName || !relationDataMap[relationName]) { + throw new Error(`Relation data for "${relationName}" is missing – cannot render options for field "${field.label}"`); } - const relationData = relationDataMap[field.relation]; + const relationData = relationDataMap[relationName]; const isArrayRelation = field.type === 'array'; const options = getFieldOptions(field, relationData); + if (options.length === 0) { + throw new Error(`No selectable options available for field "${field.label}" (relation "${relationName}")`); + } const keyField = field.enumOption?.key ?? 'id'; + const normalizedValue = (() => { if (isArrayRelation && Array.isArray(value)) { return value.map((v: any) => (v != null && typeof v === 'object' ? String(v[keyField] ?? '') : String(v))); diff --git a/react-openapi/utils/options.ts b/react-openapi/utils/options.ts index 2188492..d9090a6 100644 --- a/react-openapi/utils/options.ts +++ b/react-openapi/utils/options.ts @@ -17,6 +17,9 @@ export function getFieldOptions(field: ResourceField, relationData?: any[]): Sel if (field.relation) { const data = Array.isArray(relationData) ? relationData : []; + if (data.length === 0) { + throw new Error(`Relation data for "${field.relation}" is missing or empty – cannot build options for field "${field.label}"`); + } const enumOption = field.enumOption; if (!enumOption) { throw new Error(