import { RevColumnLayoutDefinition } from '../../../column-layout/server'; import { RevTableFieldSourceDefinition, RevTableFieldSourceDefinitionFactory } from '../../../sourced-field/record/table/server'; /** @public */ export class RevStandardTableFieldSourceDefinitionCachingFactoryService { private readonly _definitionsByTypeId = new Map>(); private readonly _definitionsByName = new Map>(); constructor(readonly definitionFactory: RevTableFieldSourceDefinitionFactory) { } get(typeId: TypeId): RevTableFieldSourceDefinition { let definition = this._definitionsByTypeId.get(typeId); if (definition === undefined) { definition = this.definitionFactory.create(typeId); this._definitionsByTypeId.set(typeId, definition); } return definition; } createLayoutDefinition(fieldIds: RevTableFieldSourceDefinition.FieldId[]): RevColumnLayoutDefinition { const count = fieldIds.length; const fieldNames = new Array(count); for (let i = 0; i < count; i++) { const fieldId = fieldIds[i]; const fieldName = this.get(fieldId.sourceTypeId).getFieldNameById(fieldId.id); fieldNames[i] = fieldName; } return RevColumnLayoutDefinition.createFromFieldNames(fieldNames); } }