From 5ef08912effc4923de10646930e8dac6a512249f Mon Sep 17 00:00:00 2001 From: William Horn Date: Thu, 27 Jun 2024 08:28:00 -0800 Subject: [PATCH] fix: on demand jobs no longer get stuck in loading --- .../scenes-list/scenes-list.component.ts | 3 ++- src/app/store/scenes/scenes.reducer.ts | 17 +++++++++++++++-- src/app/store/search/search.effect.ts | 12 ++++++------ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/app/components/results-menu/scenes-list/scenes-list.component.ts b/src/app/components/results-menu/scenes-list/scenes-list.component.ts index 73d2c6b00..5d65c0665 100644 --- a/src/app/components/results-menu/scenes-list/scenes-list.component.ts +++ b/src/app/components/results-menu/scenes-list/scenes-list.component.ts @@ -142,8 +142,8 @@ export class ScenesListComponent implements OnInit, OnDestroy, AfterContentInit scenes => { this.scenes = scenes; - this.loadDummyProducts(scenes); this.removeLoadedScenes(scenes); + this.loadDummyProducts(scenes); } ) ); @@ -500,6 +500,7 @@ export class ScenesListComponent implements OnInit, OnDestroy, AfterContentInit } private loadDummyProducts(scenes: CMRProduct[]) { + const scenesToLoad = scenes .slice(0, this.numberProductsInList) .filter(s => s.isDummyProduct) diff --git a/src/app/store/scenes/scenes.reducer.ts b/src/app/store/scenes/scenes.reducer.ts index a201a3293..272656fcb 100644 --- a/src/app/store/scenes/scenes.reducer.ts +++ b/src/app/store/scenes/scenes.reducer.ts @@ -66,7 +66,8 @@ export const initState: ScenesState = { export function scenesReducer(state = initState, action: ScenesActions): ScenesState { switch (action.type) { case ScenesActionType.SET_SCENES: { - let subproducts: CMRProduct[] = [] + let subproducts: CMRProduct[] = []; + let searchResults = action.payload.products.map(p => p.metadata.productType === 'BURST' ? ({ ...p, @@ -89,8 +90,15 @@ export function scenesReducer(state = initState, action: ScenesActions): ScenesS searchResults = searchResults.concat(subproducts) + const products = searchResults .reduce((total, product) => { + if (product.isDummyProduct && isAlreadyLoaded(product, state.products[product.id])) { + total[product.id] = state.products[product.id]; + + return total; + } + total[product.id] = product; return total; @@ -111,6 +119,7 @@ export function scenesReducer(state = initState, action: ScenesActions): ScenesS groupCriteria = product.id; } } + const scene = total[groupCriteria] || []; total[groupCriteria] = [...scene, product.id]; @@ -118,7 +127,6 @@ export function scenesReducer(state = initState, action: ScenesActions): ScenesS }, {}); for (const [groupId, productNames] of Object.entries(productGroups)) { - (productNames).sort( (a, b) => products[a].bytes - products[b].bytes ).reverse(); @@ -177,6 +185,7 @@ export function scenesReducer(state = initState, action: ScenesActions): ScenesS bytes: jobFile.size, groupId: job.job_id, id: job.job_id, + isDummyProduct: false, metadata: { ...product.metadata, fileName: jobFile.filename || '', @@ -567,6 +576,10 @@ const productsForScene = (selected, state) => { }).reverse(); }; +const isAlreadyLoaded = (product, oldProduct) => { + return !!oldProduct && !oldProduct.isDummyProduct && product.isDummyProduct; +} + export const getAreProductsLoaded = createSelector( getScenes, state => state.length > 0 diff --git a/src/app/store/search/search.effect.ts b/src/app/store/search/search.effect.ts index 22d99b606..847f00214 100644 --- a/src/app/store/search/search.effect.ts +++ b/src/app/store/search/search.effect.ts @@ -372,18 +372,18 @@ export class SearchEffects { const jobs = jobsRes.hyp3Jobs; const granuleNames = this.getAllGranulesFromJobs(jobs); - const asfApiListQuery = this.dummyProducts$(granuleNames); + const fakeApiListQuery = this.dummyProducts$(granuleNames); - return asfApiListQuery.pipe( - map(products => { - return products + return fakeApiListQuery.pipe( + map(dummyProducts => { + return dummyProducts .reduce((prodsByName, p) => { prodsByName[p.name] = p; return prodsByName; }, {}); }), - map(products => { - return this.hyp3JobToProducts(jobs, products); + map(dummyProducts => { + return this.hyp3JobToProducts(jobs, dummyProducts); }), withLatestFrom(this.store$.select(getIsCanceled)), map(([products, isCanceled]) =>