From 1c945e9bbc13a85122b09ce7bb95561dc6c8a55a Mon Sep 17 00:00:00 2001 From: Richard Treier Date: Wed, 28 Aug 2024 07:42:55 +0200 Subject: [PATCH] fix: limits check should also support unlimited agreements (#806) --- .../asset-detail-dialog-data.service.ts | 6 +++++- .../asset-detail-dialog-data.ts | 1 + .../asset-detail-dialog.component.ts | 9 +-------- .../core/services/connector-limits.service.ts | 2 +- .../catalog-browser-page.component.ts | 19 +++++++++++++++---- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.service.ts b/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.service.ts index 7cef5f1d4..4a29a29f9 100644 --- a/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.service.ts +++ b/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.service.ts @@ -48,7 +48,10 @@ export class AssetDetailDialogDataService { }; } - dataOfferDetails(dataOffer: DataOffer): AssetDetailDialogData { + dataOfferDetails( + dataOffer: DataOffer, + consumingLimitsExceeded: boolean, + ): AssetDetailDialogData { const asset = dataOffer.asset; const propertyGridGroups = [ this.assetPropertyGridGroupBuilder.buildAssetPropertiesGroup(asset, null), @@ -66,6 +69,7 @@ export class AssetDetailDialogDataService { asset: asset, dataOffer, propertyGridGroups, + consumingLimitsExceeded, }; } diff --git a/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.ts b/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.ts index b219cf004..550156d83 100644 --- a/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.ts +++ b/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.ts @@ -8,6 +8,7 @@ export interface AssetDetailDialogData { propertyGridGroups: PropertyGridGroup[]; asset: UiAssetMapped; dataOffer?: DataOffer; + consumingLimitsExceeded?: boolean; contractAgreement?: ContractAgreementCardMapped; showDeleteButton?: boolean; showEditButton?: boolean; diff --git a/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog.component.ts b/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog.component.ts index d6e04f6fc..5ada2c9af 100644 --- a/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog.component.ts +++ b/src/app/component-library/catalog/asset-detail-dialog/asset-detail-dialog.component.ts @@ -101,16 +101,9 @@ export class AssetDetailDialogComponent implements OnDestroy { setData(data: AssetDetailDialogData) { this.data = data; + this.limitsExceeded = data.consumingLimitsExceeded ?? null; this.asset = this.data.asset; this.propGroups = this.data.propertyGridGroups; - - if (this.limitsExceeded == null && this.data.type === 'data-offer') { - this.connectorLimitsService - .isConsumingAgreementLimitExceeded() - .subscribe((limitsExceeded) => { - this.limitsExceeded = limitsExceeded; - }); - } } onContactClick() { diff --git a/src/app/core/services/connector-limits.service.ts b/src/app/core/services/connector-limits.service.ts index cbe0d80a9..d35b6dc36 100644 --- a/src/app/core/services/connector-limits.service.ts +++ b/src/app/core/services/connector-limits.service.ts @@ -26,6 +26,6 @@ export class ConnectorLimitsService { const max = limits.maxActiveConsumingContractAgreements; const current = limits.numActiveConsumingContractAgreements; - return max != null && current >= max; + return max != null && max >= 0 && current >= max; }; } diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts index 9cea0a04e..10cf2d982 100644 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts +++ b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts @@ -7,10 +7,12 @@ import { Subject, distinctUntilChanged, sampleTime, + switchMap, } from 'rxjs'; import {filter, map} from 'rxjs/operators'; import {AssetDetailDialogDataService} from '../../../../component-library/catalog/asset-detail-dialog/asset-detail-dialog-data.service'; import {AssetDetailDialogService} from '../../../../component-library/catalog/asset-detail-dialog/asset-detail-dialog.service'; +import {ConnectorLimitsService} from '../../../../core/services/connector-limits.service'; import {DataOffer} from '../../../../core/services/models/data-offer'; import {value$} from '../../../../core/utils/form-group-utils'; import {CatalogBrowserFetchDetailDialogComponent} from '../catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component'; @@ -38,6 +40,7 @@ export class CatalogBrowserPageComponent implements OnInit, OnDestroy { private catalogBrowserPageService: CatalogBrowserPageService, private catalogApiUrlService: CatalogApiUrlService, private matDialog: MatDialog, + private connectorLimitsService: ConnectorLimitsService, ) {} ngOnInit(): void { @@ -54,10 +57,18 @@ export class CatalogBrowserPageComponent implements OnInit, OnDestroy { } onDataOfferClick(dataOffer: DataOffer) { - const data = this.assetDetailDialogDataService.dataOfferDetails(dataOffer); - this.assetDetailDialogService - .open(data, this.ngOnDestroy$) - .pipe(filter((it) => !!it?.refreshList)) + this.connectorLimitsService + .isConsumingAgreementLimitExceeded() + .pipe( + switchMap((isConsumingLimitsExceeded) => { + const data = this.assetDetailDialogDataService.dataOfferDetails( + dataOffer, + isConsumingLimitsExceeded, + ); + return this.assetDetailDialogService.open(data, this.ngOnDestroy$); + }), + filter((it) => !!it?.refreshList), + ) .subscribe(() => this.fetch$.next(null)); }