1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-24 15:27:43 +01:00

feat: Aggiunto supporto alle relations per getModelValue

This commit is contained in:
Maicol Battistini 2022-01-26 15:38:44 +01:00
parent 0348df7547
commit 81e4b3214f

View File

@ -380,7 +380,7 @@ export class RecordsPage extends Page {
data.each((value, field) => { data.each((value, field) => {
if (typeof field === 'string' && field.includes(':')) { if (typeof field === 'string' && field.includes(':')) {
const [relation, fieldName] = field.split(':'); const [relation, fieldName] = field.split(':');
const relationModel = this.getRelation(model, relation); const relationModel = this.getRelation(model, relation, true) as IModel;
relationModel[fieldName] = value; relationModel[fieldName] = value;
relations[relation] = relationModel; relations[relation] = relationModel;
} else { } else {
@ -401,23 +401,27 @@ export class RecordsPage extends Page {
return response.getModelId(); return response.getModelId();
} }
getRelation(model: IModel, relation: string) { getRelation(model: IModel, relation: string, createIfNotExists = false) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call const relationModel = (model[`get${capitalize(relation)}`] as Function)() as IModel;
const relationModel = model[`get${capitalize(relation)}`]() as IModel;
if (relationModel) { if (relationModel) {
return relationModel; return relationModel;
} }
const relationship = model[relation] as ToOneRelation<IModel> | ToManyRelation<IModel>; const relationship = model[relation] as ToOneRelation<IModel> | ToManyRelation<IModel>;
const modelClass = relationship.getType() as InstantiableModel; const RelationshipModel = relationship.getType() as InstantiableModel;
// eslint-disable-next-line new-cap return createIfNotExists ? new RelationshipModel() : undefined;
return new modelClass();
} }
getModelValue(model: IModel, field: string, raw = false): any { getModelValue(model: IModel, field: string, raw = false): any {
const column = this.columns[field]; const column = this.columns[field];
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment let value: unknown;
let value: any = model[field]; if (field.includes(':')) {
const [relation, fieldName] = field.split(':');
const relationModel = this.getRelation(model, relation);
value = relationModel?.[fieldName];
} else {
value = model[field];
}
if (typeof column === 'object' && column.valueModifier) { if (typeof column === 'object' && column.valueModifier) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment