WIp - fix displaying related model names in lookup fields

This commit is contained in:
Francisco Gaona
2025-12-30 04:22:56 +01:00
parent b4bdeeb9f6
commit d37183ba45
2 changed files with 18 additions and 1 deletions

View File

@@ -28,6 +28,14 @@ export interface ObjectMetadata {
} }
export class DynamicModelFactory { export class DynamicModelFactory {
/**
* Get relation name from lookup field API name
* Converts "ownerId" -> "owner", "customFieldId" -> "customfield"
*/
static getRelationName(lookupFieldApiName: string): string {
return lookupFieldApiName.replace(/Id$/, '').toLowerCase();
}
/** /**
* Create a dynamic model class from object metadata * Create a dynamic model class from object metadata
* @param meta Object metadata * @param meta Object metadata
@@ -69,7 +77,7 @@ export class DynamicModelFactory {
// Store lookup fields metadata for later use // Store lookup fields metadata for later use
const lookupFieldsInfo = lookupFields.map(f => ({ const lookupFieldsInfo = lookupFields.map(f => ({
apiName: f.apiName, apiName: f.apiName,
relationName: f.apiName.replace(/Id$/, '').toLowerCase(), relationName: DynamicModelFactory.getRelationName(f.apiName),
referenceObject: f.referenceObject, referenceObject: f.referenceObject,
targetTable: this.getTableName(f.referenceObject), targetTable: this.getTableName(f.referenceObject),
})); }));

View File

@@ -5,6 +5,7 @@ import { ObjectDefinition } from '../models/object-definition.model';
import { FieldDefinition } from '../models/field-definition.model'; import { FieldDefinition } from '../models/field-definition.model';
import { RecordShare } from '../models/record-share.model'; import { RecordShare } from '../models/record-share.model';
import { AbilityFactory, AppAbility, Action } from './ability.factory'; import { AbilityFactory, AppAbility, Action } from './ability.factory';
import { DynamicModelFactory } from '../object/models/dynamic-model.factory';
import { subject } from '@casl/ability'; import { subject } from '@casl/ability';
@Injectable() @Injectable()
@@ -171,6 +172,14 @@ export class AuthorizationService {
if (data[field.apiName] !== undefined) { if (data[field.apiName] !== undefined) {
filtered[field.apiName] = data[field.apiName]; filtered[field.apiName] = data[field.apiName];
} }
// For lookup fields, also include the related object (e.g., ownerId -> owner)
if (field.type === 'LOOKUP') {
const relationName = DynamicModelFactory.getRelationName(field.apiName);
if (data[relationName] !== undefined) {
filtered[relationName] = data[relationName];
}
}
} }
} }