import { IndexedRecord, LockOpenListItem } from '@pbkware/js-utils'; import { RevReferenceableColumnLayouts } from '../../../../../column-layout/server'; import { RevRecordRowOrderDefinition } from '../../../../../record/server'; import { RevTableFieldSourceDefinitionFactory } from '../field-source'; import { RevTableRecordSourceFactory } from '../record-source'; import { RevDataSource } from './data-source'; import { RevReferenceableDataSourceDefinition } from './definition'; /** @public */ export class RevReferenceableDataSource extends RevDataSource implements LockOpenListItem< RevReferenceableDataSource, RevDataSource.LockErrorIdPlusTryError >, IndexedRecord { readonly name: string; readonly upperCaseName: string; constructor( referenceableColumnLayouts: RevReferenceableColumnLayouts | undefined, tableFieldSourceDefinitionFactory: RevTableFieldSourceDefinitionFactory, tableRecordSourceFactory: RevTableRecordSourceFactory, lockedDefinition: RevReferenceableDataSourceDefinition, index: number, ) { const id = lockedDefinition.id; super(referenceableColumnLayouts, tableFieldSourceDefinitionFactory, tableRecordSourceFactory, lockedDefinition, id, id); this.name = lockedDefinition.name; this.upperCaseName = this.name.toUpperCase(); } override createDefinition( rowOrderDefinition: RevRecordRowOrderDefinition ): RevReferenceableDataSourceDefinition { const tableRecordSourceDefinition = this.createTableRecordSourceDefinition(); const columnLayoutOrReferenceDefinition = this.createColumnLayoutOrReferenceDefinition(); return new RevReferenceableDataSourceDefinition( this.id, this.name, tableRecordSourceDefinition, columnLayoutOrReferenceDefinition, rowOrderDefinition, ); } }