This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch 3960-make-datasets-a-first-class-ui-view in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 356b1b9cf346c116187aaa4fb1fe074a891b8d1c Author: Dominik Riemer <[email protected]> AuthorDate: Wed Dec 3 17:40:18 2025 +0100 Modify imports after merge --- ui/src/app/configuration/configuration.module.ts | 18 +- .../datalake-configuration.component.html | 551 --------------------- .../datalake-configuration.component.html | 107 ++++ .../datalake-configuration.component.ts | 6 +- ui/src/app/dataset/dataset.module.ts | 6 + .../data-retention-log-dialog.component.html | 0 .../data-retention-log-dialog.component.ts | 0 .../data-retention-now-dialog.component.html | 0 .../data-retention-now-dialog.component.ts | 0 .../export-provider-connection-test.component.html | 0 .../export-provider-connection-test.component.ts | 0 11 files changed, 117 insertions(+), 571 deletions(-) diff --git a/ui/src/app/configuration/configuration.module.ts b/ui/src/app/configuration/configuration.module.ts index cd177cdc0a..71a8f65e77 100644 --- a/ui/src/app/configuration/configuration.module.ts +++ b/ui/src/app/configuration/configuration.module.ts @@ -26,12 +26,8 @@ import { MatTooltipModule } from '@angular/material/tooltip'; import { FlexLayoutModule } from '@ngbracket/ngx-layout'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - import { MessagingConfigurationComponent } from './messaging-configuration/messaging-configuration.component'; import { DragDropModule } from '@angular/cdk/drag-drop'; -import { DatalakeConfigurationComponent } from './datalake-configuration/datalake-configuration.component'; -import { DeleteDatalakeIndexComponent } from './dialog/delete-datalake-index/delete-datalake-index-dialog.component'; -import { ExportProviderConnectionTestComponent } from './dialog/export-provider-connection-test/export-provider-connection-test.component'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { SecurityConfigurationComponent } from './security-configuration/security-configuration.component'; import { CoreUiModule } from '../core-ui/core-ui.module'; @@ -107,15 +103,7 @@ import { AlternateIdConfigurationComponent } from './security-configuration/alte import { UserAcknowledgmentComponent } from './general-configuration/user-acknowledgement/user-acknowledgment.component'; import { QuillEditorComponent } from 'ngx-quill'; import { MatStepperModule } from '@angular/material/stepper'; -import { DataRetentionDialogComponent } from './dialog/data-retention-dialog/data-retention-dialog.component'; -import { ExportProviderComponent } from './dialog/export-provider-dialog/export-provider-dialog.component'; -import { SelectDataComponent } from './dialog/data-retention-dialog/components/select-retention/select-data.component'; -import { SelectDataRetentionComponent } from './dialog/data-retention-dialog/components/select-retention/select-data-retention/select-data-retention.component'; -import { SelectRetentionActionComponent } from './dialog/data-retention-dialog/components/select-retention/select-retention-action/select-retention-action.component'; -import { SelectDataExportComponent } from './dialog/data-retention-dialog/components/select-export/select-format.component'; -import { DeleteExportProviderComponent } from './dialog/delete-export-provider/delete-export-provider-dialog.component'; -import { DataRetentionNowDialogComponent } from './dialog/data-retention-now-dialog/data-retention-now-dialog.component'; -import { DataRetentionLogDialogComponent } from './dialog/data-retention-log-dialog/data-retention-log-dialog.component'; + @NgModule({ imports: [ CommonModule, @@ -221,10 +209,6 @@ import { DataRetentionLogDialogComponent } from './dialog/data-retention-log-dia ServiceConfigsBooleanComponent, ServiceConfigsItemComponent, ServiceConfigsNumberComponent, - DeleteDatalakeIndexComponent, - DataRetentionNowDialogComponent, - DataRetentionLogDialogComponent, - ExportProviderConnectionTestComponent, EditAssetLocationComponent, EditAssetLocationAreaComponent, EditRoleDialogComponent, diff --git a/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html b/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html deleted file mode 100644 index b61961aa85..0000000000 --- a/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html +++ /dev/null @@ -1,551 +0,0 @@ -<!-- -~ Licensed to the Apache Software Foundation (ASF) under one or more -~ contributor license agreements. See the NOTICE file distributed with -~ this work for additional information regarding copyright ownership. -~ The ASF licenses this file to You under the Apache License, Version 2.0 -~ (the "License"); you may not use this file except in compliance with -~ the License. You may obtain a copy of the License at -~ -~ http://www.apache.org/licenses/LICENSE-2.0 -~ -~ Unless required by applicable law or agreed to in writing, software -~ distributed under the License is distributed on an "AS IS" BASIS, -~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -~ See the License for the specific language governing permissions and -~ limitations under the License. -~ ---> - -<sp-basic-nav-tabs [spNavigationItems]="tabs" [activeLink]="'datalake'"> - <div fxLayout="row" class="page-container-padding"> - <div fxFlex="100" fxLayout="column" fxLayoutAlign="start start"> - <sp-split-section - [title]="'Data Lake Settings' | translate" - [subtitle]="'Manage persisted data streams' | translate" - > - <button - section-actions - color="accent" - mat-icon-button - [matTooltip]="'Refresh' | translate" - data-cy="refresh-data-lake-measures" - (click)="loadAvailableMeasurements()" - > - <mat-icon>refresh</mat-icon> - </button> - <div fxFlex="100" fxLayout="column"> - <table - fxFlex="100" - mat-table - data-cy="datalake-settings" - [dataSource]="dataSource" - style="width: 100%" - matSort - > - <ng-container matColumnDef="name"> - <th - mat-header-cell - mat-sort-header - *matHeaderCellDef - > - {{ 'Name' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - {{ configurationEntry.name }} - </td> - </ng-container> - - <ng-container matColumnDef="pipeline"> - <th - mat-header-cell - mat-sort-header - *matHeaderCellDef - > - {{ 'Related Pipeline' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - {{ configurationEntry.pipelines }} - </td> - </ng-container> - - <ng-container matColumnDef="events"> - <th - mat-header-cell - mat-sort-header - *matHeaderCellDef - > - {{ '# Events' | translate }} - </th> - <td - mat-cell - data-cy="datalake-number-of-events" - *matCellDef="let configurationEntry" - > - @if (configurationEntry.events < 0) { - <mat-spinner - [diameter]="20" - fxLayoutAlign="center" - style="margin: 10px 0 5px 0" - color="accent" - data-cy="datalake-number-of-events-spinner" - >{{ 'Loading' | translate }} - </mat-spinner> - } @else { - <span> - {{ configurationEntry.events | number }} - </span> - } - </td> - </ng-container> - - <ng-container matColumnDef="download"> - <th mat-header-cell *matHeaderCellDef>Download</th> - <td mat-cell *matCellDef="let configurationEntry"> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - [matTooltip]=" - 'Download data from index' - | translate - " - matTooltipPosition="above" - data-cy="datalake-download-btn" - (click)=" - openDownloadDialog( - configurationEntry.name - ) - " - > - <i class="material-icons" - >download</i - > - </button> - </span> - </div> - </td> - </ng-container> - - <ng-container matColumnDef="truncate"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Truncate' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - [matTooltip]=" - 'Truncate all data from index' - | translate - " - matTooltipPosition="above" - data-cy="datalake-truncate-btn" - (click)=" - cleanDatalakeIndex( - configurationEntry.name - ) - " - > - <i class="material-icons" - >local_fire_department</i - > - </button> - </span> - </div> - </td> - </ng-container> - - <ng-container matColumnDef="remove"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Remove' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - [matTooltip]=" - 'Remove index from database' - | translate - " - data-cy="datalake-delete-btn" - matTooltipPosition="above" - [disabled]=" - !configurationEntry.remove - " - (click)=" - deleteDatalakeIndex( - configurationEntry.name - ) - " - > - <i class="material-icons">delete</i> - </button> - </span> - </div> - </td> - </ng-container> - - <ng-container matColumnDef="retention"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Retention Rate' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - [matTooltip]=" - 'Set retention rate' | translate - " - data-cy="datalake-retention-btn" - matTooltipPosition="above" - (click)=" - openRetentionDialog( - configurationEntry.elementId - ) - " - > - <i - class="material-icons" - [ngStyle]="{ - color: configurationEntry?.retention - ? 'green' - : 'red' - }" - >history</i - > - </button> - </span> - </div> - </td> - </ng-container> - - <ng-container matColumnDef="retentionlog"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Retention Log' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - @if (configurationEntry?.retention) { - <button - color="accent" - mat-icon-button - [matTooltip]=" - ('Open Retention Log' - | translate) + - (configurationEntry - ?.retention - ?.retentionExportConfig - ?.lastExport - ? ' • ' + - (configurationEntry - .retention - .retentionExportConfig - .lastExport - | date - : 'yyyy-MM-dd HH:mm:ss') - : '') - " - data-cy="datalake-retention-log-btn" - matTooltipPosition="above" - (click)=" - openRetentionLog( - configurationEntry - ?.retention - .retentionExportConfig - .retentionLog - ) - " - > - <i - class="material-icons" - [ngStyle]="{ - color: - configurationEntry - ?.retention - ?.retentionExportConfig - ?.retentionLog - ?.length && - configurationEntry - .retention - .retentionExportConfig - .retentionLog[ - configurationEntry - .retention - .retentionExportConfig - .retentionLog - .length - 1 - ].status - ? 'green' - : 'red' - }" - >list_alt</i - > - </button> - } @else { - <p>-</p> - } - </span> - </div> - </td> - </ng-container> - - <tr - mat-header-row - *matHeaderRowDef="displayedColumns" - ></tr> - <tr - mat-row - *matRowDef="let row; columns: displayedColumns" - ></tr> - </table> - </div> - <div fxFlex="100" fxLayoutAlign="end end"> - <mat-paginator - [pageSizeOptions]="[pageSize]" - [pageSize]="pageSize" - (page)="onPageChange($event)" - ></mat-paginator> - </div> - @if (availableMeasurements.length === 0) { - <h5>{{ '(no stored measurements)' | translate }}</h5> - } - </sp-split-section> - <sp-split-section - [title]="'Export Providers' | translate" - [subtitle]=" - 'Add, Edit, and Delete export providers used for backing up data lakes.' - | translate - " - > - <div - fxLayout="row" - fxLayoutAlign="end center" - section-actions - fxLayoutGap="5px" - > - <button - mat-flat-button - matTooltip="{{ 'New' | translate }}" - data-cy="new-export-providers" - (click)="createExportProvider(null)" - > - <mat-icon>add</mat-icon> - <span>{{ 'New' | translate }}</span> - </button> - <button - mat-icon-button - matTooltip="{{ 'Refresh' | translate }}" - data-cy="refresh-export-providers-measures" - (click)="loadAvailableExportProvider()" - > - <mat-icon>refresh</mat-icon> - </button> - </div> - <table - fxFlex="100" - mat-table - data-cy="exportproviders-settings" - [dataSource]="dataSourceExport" - style="width: 100%" - matSort - > - <ng-container matColumnDef="providertype"> - <th mat-header-cell mat-sort-header *matHeaderCellDef> - {{ 'Provider Type' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - {{ configurationEntry.providerType }} - </td> - </ng-container> - - <ng-container matColumnDef="endpoint"> - <th mat-header-cell mat-sort-header *matHeaderCellDef> - {{ 'Endpoint' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - {{ configurationEntry.endPoint }} - </td> - </ng-container> - - <ng-container matColumnDef="bucket"> - <th mat-header-cell mat-sort-header *matHeaderCellDef> - {{ 'Bucket' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - {{ configurationEntry.bucketName }} - </td> - </ng-container> - - <ng-container matColumnDef="editExportProvider"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Edit' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - @if (configurationEntry.providerId !== 'FOLDER') { - <div> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - matTooltip="{{ - 'Edit Export Provider' - | translate - }}" - matTooltipPosition="above" - data-cy="exportProvider-edit-btn" - (click)=" - createExportProvider( - configurationEntry - ) - " - > - <i class="material-icons" - >edit</i - > - </button> - </span> - </div> - </div> - } - </td> - </ng-container> - - <ng-container matColumnDef="delete"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Remove' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - @if (configurationEntry.providerId !== 'FOLDER') { - <div> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - matTooltip="{{ - 'Remove export provider configuration' - | translate - }}" - data-cy="exportProvider-delete-btn" - matTooltipPosition="above" - (click)=" - deleteExportProvider( - configurationEntry.providerId - ) - " - > - <i class="material-icons" - >delete</i - > - </button> - </span> - </div> - </div> - } - </td> - </ng-container> - - <ng-container matColumnDef="test"> - <th mat-header-cell *matHeaderCellDef> - {{ 'Test' | translate }} - </th> - <td mat-cell *matCellDef="let configurationEntry"> - <div> - <div fxLayout="row"> - <span - fxFlex - fxFlexOrder="3" - fxLayout="row" - fxLayoutAlign="start center" - > - <button - color="accent" - mat-icon-button - matTooltip="{{ - 'Test export provider configuration' - | translate - }}" - data-cy="exportProvider-test-btn" - matTooltipPosition="above" - (click)=" - testExportProvider( - configurationEntry.providerId - ) - " - > - <i class="material-icons" - >bug_report</i - > - </button> - </span> - </div> - </div> - </td> - </ng-container> - - <tr - mat-header-row - *matHeaderRowDef="displayedColumnsExport" - ></tr> - <tr - mat-row - *matRowDef="let row; columns: displayedColumnsExport" - ></tr> - </table> - - @if ( - !availableExportProvider || - availableExportProvider.length === 0 - ) { - <div> - <h5>{{ 'no stored export providers' | translate }}</h5> - </div> - } - </sp-split-section> - </div> - </div> -</sp-basic-nav-tabs> diff --git a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html index 8b75f4bc4a..d7a58c29a4 100644 --- a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html +++ b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html @@ -131,6 +131,77 @@ </td> </ng-container> + <ng-container matColumnDef="retentionlog"> + <th mat-header-cell *matHeaderCellDef> + {{ 'Retention Log' | translate }} + </th> + <td mat-cell *matCellDef="let configurationEntry"> + <div fxLayout="row"> + <span + fxFlex + fxFlexOrder="3" + fxLayout="row" + fxLayoutAlign="start center" + > + @if (configurationEntry?.retention) { + <button + color="accent" + mat-icon-button + [matTooltip]=" + ('Open Retention Log' | translate) + + (configurationEntry?.retention + ?.retentionExportConfig + ?.lastExport + ? ' • ' + + (configurationEntry.retention + .retentionExportConfig + .lastExport + | date + : 'yyyy-MM-dd HH:mm:ss') + : '') + " + data-cy="datalake-retention-log-btn" + matTooltipPosition="above" + (click)=" + openRetentionLog( + configurationEntry?.retention + .retentionExportConfig + .retentionLog + ) + " + > + <i + class="material-icons" + [ngStyle]="{ + color: + configurationEntry + ?.retention + ?.retentionExportConfig + ?.retentionLog + ?.length && + configurationEntry.retention + .retentionExportConfig + .retentionLog[ + configurationEntry + .retention + .retentionExportConfig + .retentionLog + .length - 1 + ].status + ? 'green' + : 'red' + }" + >list_alt</i + > + </button> + } @else { + <p>-</p> + } + </span> + </div> + </td> + </ng-container> + <ng-template spTableActions let-element> <button mat-menu-item @@ -310,6 +381,42 @@ </td> </ng-container> + <ng-container matColumnDef="test"> + <th mat-header-cell *matHeaderCellDef> + {{ 'Test' | translate }} + </th> + <td mat-cell *matCellDef="let configurationEntry"> + <div> + <div fxLayout="row"> + <span + fxFlex + fxFlexOrder="3" + fxLayout="row" + fxLayoutAlign="start center" + > + <button + color="accent" + mat-icon-button + matTooltip="{{ + 'Test export provider configuration' + | translate + }}" + data-cy="exportProvider-test-btn" + matTooltipPosition="above" + (click)=" + testExportProvider( + configurationEntry.providerId + ) + " + > + <i class="material-icons">bug_report</i> + </button> + </span> + </div> + </div> + </td> + </ng-container> + <tr mat-header-row *matHeaderRowDef="displayedColumnsExport"></tr> <tr mat-row diff --git a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts index 61eaaffd7f..42a473f89d 100644 --- a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts +++ b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts @@ -49,8 +49,8 @@ import { DataRetentionDialogComponent } from '../../dialog/data-retention-dialog import { ExportProviderComponent } from '../../dialog/export-provider-dialog/export-provider-dialog.component'; import { DeleteExportProviderComponent } from '../../dialog/delete-export-provider/delete-export-provider-dialog.component'; import { TranslateService } from '@ngx-translate/core'; -import { ExportProviderConnectionTestComponent } from '../dialog/export-provider-connection-test/export-provider-connection-test.component'; -import { DataRetentionLogDialogComponent } from '../dialog/data-retention-log-dialog/data-retention-log-dialog.component'; +import { ExportProviderConnectionTestComponent } from '../../dialog/export-provider-connection-test/export-provider-connection-test.component'; +import { DataRetentionLogDialogComponent } from '../../dialog/data-retention-log-dialog/data-retention-log-dialog.component'; @Component({ selector: 'sp-datalake-configuration', @@ -83,8 +83,8 @@ export class DatalakeConfigurationComponent implements OnInit { 'pipeline', 'events', 'retention', - 'actions', 'retentionlog', + 'actions', ]; displayedColumnsExport: string[] = [ diff --git a/ui/src/app/dataset/dataset.module.ts b/ui/src/app/dataset/dataset.module.ts index 0fdad9b66e..6141db5427 100644 --- a/ui/src/app/dataset/dataset.module.ts +++ b/ui/src/app/dataset/dataset.module.ts @@ -50,6 +50,9 @@ import { MatSelectModule } from '@angular/material/select'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatInputModule } from '@angular/material/input'; import { MatMenuModule } from '@angular/material/menu'; +import { DataRetentionNowDialogComponent } from './dialog/data-retention-now-dialog/data-retention-now-dialog.component'; +import { DataRetentionLogDialogComponent } from './dialog/data-retention-log-dialog/data-retention-log-dialog.component'; +import { ExportProviderConnectionTestComponent } from './dialog/export-provider-connection-test/export-provider-connection-test.component'; @NgModule({ imports: [ @@ -88,6 +91,9 @@ import { MatMenuModule } from '@angular/material/menu'; ], declarations: [ DeleteDatalakeIndexComponent, + DataRetentionNowDialogComponent, + DataRetentionLogDialogComponent, + ExportProviderConnectionTestComponent, DatalakeConfigurationComponent, DataRetentionDialogComponent, ExportProviderComponent, diff --git a/ui/src/app/configuration/dialog/data-retention-log-dialog/data-retention-log-dialog.component.html b/ui/src/app/dataset/dialog/data-retention-log-dialog/data-retention-log-dialog.component.html similarity index 100% rename from ui/src/app/configuration/dialog/data-retention-log-dialog/data-retention-log-dialog.component.html rename to ui/src/app/dataset/dialog/data-retention-log-dialog/data-retention-log-dialog.component.html diff --git a/ui/src/app/configuration/dialog/data-retention-log-dialog/data-retention-log-dialog.component.ts b/ui/src/app/dataset/dialog/data-retention-log-dialog/data-retention-log-dialog.component.ts similarity index 100% rename from ui/src/app/configuration/dialog/data-retention-log-dialog/data-retention-log-dialog.component.ts rename to ui/src/app/dataset/dialog/data-retention-log-dialog/data-retention-log-dialog.component.ts diff --git a/ui/src/app/configuration/dialog/data-retention-now-dialog/data-retention-now-dialog.component.html b/ui/src/app/dataset/dialog/data-retention-now-dialog/data-retention-now-dialog.component.html similarity index 100% rename from ui/src/app/configuration/dialog/data-retention-now-dialog/data-retention-now-dialog.component.html rename to ui/src/app/dataset/dialog/data-retention-now-dialog/data-retention-now-dialog.component.html diff --git a/ui/src/app/configuration/dialog/data-retention-now-dialog/data-retention-now-dialog.component.ts b/ui/src/app/dataset/dialog/data-retention-now-dialog/data-retention-now-dialog.component.ts similarity index 100% rename from ui/src/app/configuration/dialog/data-retention-now-dialog/data-retention-now-dialog.component.ts rename to ui/src/app/dataset/dialog/data-retention-now-dialog/data-retention-now-dialog.component.ts diff --git a/ui/src/app/configuration/dialog/export-provider-connection-test/export-provider-connection-test.component.html b/ui/src/app/dataset/dialog/export-provider-connection-test/export-provider-connection-test.component.html similarity index 100% rename from ui/src/app/configuration/dialog/export-provider-connection-test/export-provider-connection-test.component.html rename to ui/src/app/dataset/dialog/export-provider-connection-test/export-provider-connection-test.component.html diff --git a/ui/src/app/configuration/dialog/export-provider-connection-test/export-provider-connection-test.component.ts b/ui/src/app/dataset/dialog/export-provider-connection-test/export-provider-connection-test.component.ts similarity index 100% rename from ui/src/app/configuration/dialog/export-provider-connection-test/export-provider-connection-test.component.ts rename to ui/src/app/dataset/dialog/export-provider-connection-test/export-provider-connection-test.component.ts
