import {Injectable, EventEmitter} from '@angular/core';
import {Observable} from 'rxjs';
-import {map, tap, finalize} from 'rxjs/operators';
+import {map, tap, finalize, merge} from 'rxjs/operators';
import {OrgService} from '@eg/core/org.service';
import {UnapiService} from '@eg/share/catalog/unapi.service';
import {IdlService, IdlObject} from '@eg/core/idl.service';
import {CATALOG_CCVM_FILTERS} from './search-context';
import {ElasticService} from './elastic.service';
+// Start with this number of records in the first batch so results
+// can start displaying sooner. A batch of 5 gets a decent chunk of
+// data on the page while waiting for the other results to appear.
+const INITIAL_REC_BATCH_SIZE = 5;
+
@Injectable()
export class CatalogService {
const isMeta = ctx.termSearch.isMetarecordSearch();
+ // When fetching batches of search results, fetch the first
+ // few records first so results lists can start rendering
+ // before the full data set has arrived and been processed.
+ let ids1 = ctx.currentResultIds();
+ let ids2 = [];
+ if (ids1.length > INITIAL_REC_BATCH_SIZE) {
+ ids1 = ctx.currentResultIds().slice(0, INITIAL_REC_BATCH_SIZE);
+ ids2 = ctx.currentResultIds().slice(INITIAL_REC_BATCH_SIZE);
+ }
+
let observable: Observable<BibRecordSummary>;
+ const bibFunc = isMeta ? 'getMetabibSummary' : 'getBibSummary';
const options: any = {pref_ou: ctx.prefOu};