|
|
|
@ -63,22 +63,7 @@ export class PublicMetasService {
|
|
|
|
|
|
|
|
|
|
// load related table metas
|
|
|
|
|
for (const col of view.model.columns) { |
|
|
|
|
if (UITypes.LinkToAnotherRecord === col.uidt) { |
|
|
|
|
const colOpt = await col.getColOptions<LinkToAnotherRecordType>(); |
|
|
|
|
relatedMetas[colOpt.fk_related_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: colOpt.fk_related_model_id, |
|
|
|
|
}); |
|
|
|
|
if (colOpt.type === 'mm') { |
|
|
|
|
relatedMetas[colOpt.fk_mm_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: colOpt.fk_mm_model_id, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} else if (UITypes.Lookup === col.uidt) { |
|
|
|
|
await this.extractLookupRelatedMetas({ |
|
|
|
|
lookupColOption: await col.getColOptions<LookupColumn>(), |
|
|
|
|
relatedMetas, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
await this.extractRelatedMetas({ col, relatedMetas }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
view.relatedMetas = relatedMetas; |
|
|
|
@ -86,6 +71,43 @@ export class PublicMetasService {
|
|
|
|
|
return view; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private async extractRelatedMetas({ |
|
|
|
|
col, |
|
|
|
|
relatedMetas = {}, |
|
|
|
|
}: { |
|
|
|
|
col: Column<any>; |
|
|
|
|
relatedMetas: Record<string, Model>; |
|
|
|
|
}) { |
|
|
|
|
if (UITypes.LinkToAnotherRecord === col.uidt) { |
|
|
|
|
await this.extractLTARRelatedMetas({ |
|
|
|
|
ltarColOption: await col.getColOptions<LinkToAnotherRecordColumn>(), |
|
|
|
|
relatedMetas, |
|
|
|
|
}); |
|
|
|
|
} else if (UITypes.Lookup === col.uidt) { |
|
|
|
|
await this.extractLookupRelatedMetas({ |
|
|
|
|
lookupColOption: await col.getColOptions<LookupColumn>(), |
|
|
|
|
relatedMetas, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private async extractLTARRelatedMetas({ |
|
|
|
|
ltarColOption, |
|
|
|
|
relatedMetas = {}, |
|
|
|
|
}: { |
|
|
|
|
ltarColOption: LinkToAnotherRecordColumn; |
|
|
|
|
relatedMetas: { [key: string]: Model }; |
|
|
|
|
}) { |
|
|
|
|
relatedMetas[ltarColOption.fk_related_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: ltarColOption.fk_related_model_id, |
|
|
|
|
}); |
|
|
|
|
if (ltarColOption.type === 'mm') { |
|
|
|
|
relatedMetas[ltarColOption.fk_mm_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: ltarColOption.fk_mm_model_id, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private async extractLookupRelatedMetas({ |
|
|
|
|
lookupColOption, |
|
|
|
|
relatedMetas = {}, |
|
|
|
@ -96,7 +118,7 @@ export class PublicMetasService {
|
|
|
|
|
const relationCol = await Column.get({ |
|
|
|
|
colId: lookupColOption.fk_relation_column_id, |
|
|
|
|
}); |
|
|
|
|
const lookupCol = await Column.get({ |
|
|
|
|
const lookedUpCol = await Column.get({ |
|
|
|
|
colId: lookupColOption.fk_lookup_column_id, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
@ -104,24 +126,23 @@ export class PublicMetasService {
|
|
|
|
|
// if not already extracted
|
|
|
|
|
if (!relatedMetas[relationCol.fk_model_id]) { |
|
|
|
|
relatedMetas[relationCol.fk_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: lookupCol.fk_model_id, |
|
|
|
|
id: relationCol.fk_model_id, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// extract meta for table in which looked up column belongs
|
|
|
|
|
// if not already extracted
|
|
|
|
|
if (!relatedMetas[lookupCol.fk_model_id]) { |
|
|
|
|
relatedMetas[lookupCol.fk_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: lookupCol.fk_model_id, |
|
|
|
|
if (!relatedMetas[lookedUpCol.fk_model_id]) { |
|
|
|
|
relatedMetas[lookedUpCol.fk_model_id] = await Model.getWithInfo({ |
|
|
|
|
id: lookedUpCol.fk_model_id, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if looked up column is a lookup column do the same for it by recursion
|
|
|
|
|
if (lookupCol.uidt === UITypes.Lookup) { |
|
|
|
|
await this.extractLookupRelatedMetas({ |
|
|
|
|
lookupColOption: await lookupCol.getColOptions<LookupColumn>(), |
|
|
|
|
relatedMetas, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
// extract metas related to the looked up column
|
|
|
|
|
await this.extractRelatedMetas({ |
|
|
|
|
col: lookedUpCol, |
|
|
|
|
relatedMetas, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async publicSharedBaseGet(param: { sharedBaseUuid: string }): Promise<any> { |
|
|
|
|