This commit is contained in:
2026-06-13 16:19:40 +05:30
parent cd89eb4c88
commit f2edf7ade7
3 changed files with 12 additions and 3 deletions

View File

@@ -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));

View File

@@ -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)));

View File

@@ -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(