WIp - fix displaying related model names in lookup fields
This commit is contained in:
@@ -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),
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -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];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user