diff --git a/src/app/modules/entity/entity-job/entity-job-config.interface.ts b/src/app/modules/entity/entity-job/entity-job-config.interface.ts
deleted file mode 100644
index af1ce4c5cf3..00000000000
--- a/src/app/modules/entity/entity-job/entity-job-config.interface.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface EntityJobConfig {
- title: string;
- closeOnClickOutside: boolean;
-}
diff --git a/src/app/modules/entity/entity-job/entity-job.component.html b/src/app/modules/entity/entity-job/entity-job.component.html
deleted file mode 100644
index 5d7eed743e3..00000000000
--- a/src/app/modules/entity/entity-job/entity-job.component.html
+++ /dev/null
@@ -1,113 +0,0 @@
-
{{ title | translate }}
-
- @if (showRealtimeLogs && realtimeLogs) {
-
-
{{ 'Logs' | translate }}
-
{{ realtimeLogs }}
-
- }
-
- @if (job?.state === JobState.Running) {
-
-
- {{ job.description ? job.description : job.method }}
- @if (!hideProgressValue) {
-
- {{ progressTotalPercent || 0 | number: '1.2-2' }}%
-
- }
-
-
-
- }
-
- @if (showHttpProgress) {
-
-
-
- {{ uploadPercentage || 0 | number: '1.2-2' }}%
-
-
0 ? 'determinate' : 'indeterminate'"
- >
-
-
- }
-
- @if (description) {
-
- }
-
- @if (!description && !job) {
-
-
-
- }
-
- @if (!description) {
-
- @if (altMessage) {
-
- } @else {
-
- @if (job?.state === JobState.Waiting) {
- {{ 'Waiting' | translate }}
- } @else {
- {{ 'Fetching data...' | translate }}
- }
-
- }
-
- }
-
-
-
- @if (job?.state === JobState.Failed) {
-
- } @else {
- @if (showAbortButton && job?.state === JobState.Running) {
-
- }
- @if (showCloseButton) {
-
- }
- }
-
-
diff --git a/src/app/modules/entity/entity-job/entity-job.component.scss b/src/app/modules/entity/entity-job/entity-job.component.scss
deleted file mode 100644
index cb2e6be9850..00000000000
--- a/src/app/modules/entity/entity-job/entity-job.component.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-@import 'scss-imports/variables';
-
-:host {
- display: block;
- position: relative;
-
- ::ng-deep {
- .mat-mdc-dialog-actions {
- position: static;
- }
- }
-}
-
-mat-dialog-content.entity-job-dialog {
- max-height: 350px;
- max-width: 100%;
- width: 100%;
-
- @media (min-width: $breakpoint-tablet) {
- max-width: 400px;
- min-width: 370px;
- }
-
- .mat-mdc-dialog-content {
- overflow: auto !important;
- }
-}
-
-.mat-dialog-close {
- position: absolute;
- right: 5px;
- top: 5px;
-}
-
-.entity-job-progress {
- margin: 3px 0;
-}
-
-.entity-job-description {
- opacity: 0.75;
- white-space: pre-line;
-}
-
-.entity-job-time {
- opacity: 0.5;
-}
-
-.logs-container {
- margin-bottom: 20px;
- max-height: 200px;
- overflow-y: auto;
-}
-
-.logs {
- background: rgba(0, 0, 0, 0.096);
- color: white;
- overflow-x: auto;
- padding: 5px;
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-
-.percentage-row {
- display: flex;
- gap: 8px;
- justify-content: space-between;
-}
diff --git a/src/app/modules/entity/entity-job/entity-job.component.ts b/src/app/modules/entity/entity-job/entity-job.component.ts
deleted file mode 100644
index 2bca3291e4f..00000000000
--- a/src/app/modules/entity/entity-job/entity-job.component.ts
+++ /dev/null
@@ -1,265 +0,0 @@
-import {
- HttpClient, HttpErrorResponse, HttpEvent, HttpEventType,
-} from '@angular/common/http';
-import {
- // eslint-disable-next-line no-restricted-imports
- OnInit, Component, Inject, AfterViewChecked, Output,
- EventEmitter,
-} from '@angular/core';
-import { MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
-import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
-import { replace } from 'lodash-es';
-import { Subscription } from 'rxjs';
-import { filter, map } from 'rxjs/operators';
-import { JobState } from 'app/enums/job-state.enum';
-import { ApiJobDirectory, ApiJobMethod } from 'app/interfaces/api/api-job-directory.interface';
-import { Job, JobProgress } from 'app/interfaces/job.interface';
-import { EntityJobConfig } from 'app/modules/entity/entity-job/entity-job-config.interface';
-import { WebSocketService } from 'app/services/ws.service';
-
-@UntilDestroy()
-// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
-@Component({
- selector: 'ix-entity-job-dialog',
- templateUrl: 'entity-job.component.html',
- styleUrls: ['./entity-job.component.scss'],
-})
-/**
- * @deprecated Use jobDialog in DialogService. Remember to handle errors.
- */
-export class EntityJobComponent implements OnInit, AfterViewChecked {
- job: Job = {} as Job;
- progressTotalPercent = 0;
- description: string;
- method: ApiJobMethod;
- args: ApiJobDirectory[ApiJobMethod]['params'] = [];
-
- title = '';
- showHttpProgress = false;
- uploadPercentage: number = null;
- showCloseButton = true;
- showAbortButton = false; // enable to abort job
- jobId: number;
- progressNumberType: string;
- hideProgressValue = false;
- altMessage: string;
- showRealtimeLogs = false;
- autoCloseOnSuccess = false;
- readonly JobState = JobState;
-
- private realtimeLogsSubscribed = false;
- realtimeLogs = '';
- // eslint-disable-next-line @angular-eslint/no-output-native
- @Output() progress = new EventEmitter();
- // eslint-disable-next-line @angular-eslint/no-output-native
- @Output() success = new EventEmitter();
- @Output() aborted = new EventEmitter();
- @Output() failure = new EventEmitter();
- @Output() prefailure = new EventEmitter();
-
- constructor(
- public dialogRef: MatDialogRef,
- private ws: WebSocketService,
- @Inject(MAT_DIALOG_DATA) public data: EntityJobConfig,
- protected http: HttpClient,
- ) {}
-
- ngOnInit(): void {
- if (this.data.title) {
- this.setTitle(this.data.title);
- }
-
- if (this.dialogRef.disableClose) {
- this.showCloseButton = false;
- }
- if (this.data.closeOnClickOutside) {
- this.showCloseButton = true;
- this.dialogRef.disableClose = true;
- }
- this.progress.pipe(untilDestroyed(this)).subscribe((progress: JobProgress) => {
- if (progress.description) {
- this.description = progress.description;
- }
- if (progress.percent) {
- if (this.progressNumberType === 'nopercent') {
- this.progressTotalPercent = progress.percent * 100;
- } else {
- this.progressTotalPercent = progress.percent;
- }
- }
- this.disableProgressValue(progress.percent === null);
- });
-
- this.failure.pipe(untilDestroyed(this)).subscribe((job) => {
- let error = replace(job.error, '<', '< ');
- error = replace(error, '>', ' >');
-
- this.description = 'Error: ' + error;
- });
- }
-
- ngAfterViewChecked(): void {
- this.scrollBottom();
- }
-
- setCall(method: K, args?: ApiJobDirectory[K]['params']): void {
- this.method = method;
- if (args) {
- this.args = args;
- }
- }
-
- setTitle(title: string): void {
- this.title = title;
- }
-
- enableRealtimeLogs(showRealtimeLogs: boolean): void {
- this.showRealtimeLogs = showRealtimeLogs;
- }
-
- changeAltMessage(msg: string): void {
- this.altMessage = msg;
- }
-
- disableProgressValue(hide: boolean): void {
- this.hideProgressValue = hide;
- }
-
- submit(): void {
- let logsSubscription: Subscription = null;
- this.ws.job(this.method, this.args)
- .pipe(untilDestroyed(this)).subscribe({
- next: (job) => {
- this.job = job;
- this.showAbortButton = this.job.abortable;
- if (this.showRealtimeLogs && this.job.logs_path && !this.realtimeLogsSubscribed) {
- logsSubscription = this.getRealtimeLogs();
- }
- if (job.progress && !this.showRealtimeLogs) {
- this.progress.emit(job.progress);
- }
- if (this.job.state === JobState.Aborted) {
- this.aborted.emit(this.job);
- }
- },
- error: (job: Job) => {
- this.job = job;
- this.failure.emit(this.job);
- },
- complete: () => {
- if (this.job.state === JobState.Success) {
- this.success.emit(this.job);
- } else if (this.job.state === JobState.Failed) {
- this.failure.emit(this.job);
- }
- if (this.realtimeLogsSubscribed) {
- logsSubscription.unsubscribe();
- }
- },
- });
- }
-
- wspostWithProgressUpdates(path: string, options: unknown): void {
- this.showHttpProgress = true;
- this.http.post(path, options, { reportProgress: true, observe: 'events' })
- .pipe(untilDestroyed(this))
- .subscribe({
- next: (event: HttpEvent) => {
- if (event.type === HttpEventType.UploadProgress) {
- const eventTotal = event.total ? event.total : 0;
- let progress = 0;
- if (eventTotal !== 0) {
- progress = Math.round(event.loaded / eventTotal * 100);
- }
- this.uploadPercentage = progress;
- } else if (event.type === HttpEventType.Response) {
- this.showHttpProgress = false;
- const body = event.body;
- this.job = body as Job; // Type is actually not a Job, but a { job_id: number }
- if (body && 'job_id' in body) {
- this.jobId = body.job_id;
- }
- this.wsshow();
- }
- },
- error: (err: HttpErrorResponse) => {
- this.showHttpProgress = false;
- this.prefailure.emit(err);
- },
- });
- }
-
- wsshow(): void {
- this.ws.call('core.get_jobs', [[['id', '=', this.jobId]]])
- .pipe(untilDestroyed(this)).subscribe((jobs) => {
- if (jobs.length > 0) {
- this.wsjobUpdate(jobs[0]);
- }
- });
- this.ws.subscribe('core.get_jobs')
- .pipe(
- filter((event) => event.id === this.jobId),
- map((event) => event.fields),
- untilDestroyed(this),
- )
- .subscribe((job) => {
- this.wsjobUpdate(job);
- });
- }
-
- wsjobUpdate(job: Job): void {
- this.job = job;
- this.showAbortButton = this.job.abortable;
- if ('progress' in job) {
- this.progress.emit(job.progress);
- }
- switch (job.state) {
- case JobState.Success:
- this.success.emit(this.job);
- if (this.autoCloseOnSuccess) {
- this.dialogRef.close();
- }
- break;
- case JobState.Failed:
- this.failure.emit(this.job);
- break;
- case JobState.Aborted:
- this.aborted.emit(this.job);
- break;
- default:
- break;
- }
- }
-
- abortJob(): void {
- this.ws.call('core.job_abort', [this.job.id]).pipe(untilDestroyed(this)).subscribe(() => {
- this.dialogRef.close();
- });
- }
-
- /**
- * This method returns the subscription id that is used when subscribing to real time
- * websocket updates. The subscription id is used to unsubscribe form those real time
- * websocket updates at a later time. Unsubscription is not possible without this id
- */
- getRealtimeLogs(): Subscription {
- this.realtimeLogsSubscribed = true;
- const subName = 'filesystem.file_tail_follow:' + this.job.logs_path;
- return this.ws.subscribeToLogs(subName)
- .pipe(map((apiEvent) => apiEvent.fields), untilDestroyed(this))
- .subscribe((logs) => {
- if (logs?.data && typeof logs.data === 'string') {
- this.realtimeLogs += logs.data;
- }
- });
- }
-
- scrollBottom(): void {
- const cardContainer = document.getElementsByClassName('entity-job-dialog')[0];
- const logsContainer = cardContainer.getElementsByClassName('logs-container')[0];
- if (!logsContainer) {
- return;
- }
- logsContainer.scrollTop = logsContainer.scrollHeight;
- }
-}
diff --git a/src/app/modules/entity/entity.module.ts b/src/app/modules/entity/entity.module.ts
deleted file mode 100644
index 4a334e0076b..00000000000
--- a/src/app/modules/entity/entity.module.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { DecimalPipe } from '@angular/common';
-import { NgModule } from '@angular/core';
-import { MatButtonModule } from '@angular/material/button';
-import { MatDialogModule } from '@angular/material/dialog';
-import { MatProgressBarModule } from '@angular/material/progress-bar';
-import { MatSliderModule } from '@angular/material/slider';
-import { TranslateModule } from '@ngx-translate/core';
-import { EntityJobComponent } from 'app/modules/entity/entity-job/entity-job.component';
-import { IxIconComponent } from 'app/modules/ix-icon/ix-icon.component';
-import { TestDirective } from 'app/modules/test-id/test.directive';
-
-@NgModule({
- imports: [
- MatDialogModule,
- MatProgressBarModule,
- MatButtonModule,
- IxIconComponent,
- TranslateModule,
- MatSliderModule,
- DecimalPipe,
- TestDirective,
- ],
- declarations: [
- EntityJobComponent,
- ],
-})
-export class EntityModule { }
diff --git a/src/app/modules/terminal/terminal.module.ts b/src/app/modules/terminal/terminal.module.ts
index f6a1895c9d6..a78fc37dd84 100644
--- a/src/app/modules/terminal/terminal.module.ts
+++ b/src/app/modules/terminal/terminal.module.ts
@@ -3,7 +3,6 @@ import { NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatDialogModule } from '@angular/material/dialog';
import { TranslateModule } from '@ngx-translate/core';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { ToolbarSliderComponent } from 'app/modules/forms/toolbar-slider/toolbar-slider.component';
import { PageHeaderModule } from 'app/modules/page-header/page-header.module';
import { CopyPasteMessageComponent } from 'app/modules/terminal/components/copy-paste-message/copy-paste-message.component';
@@ -13,7 +12,6 @@ import { TooltipComponent } from 'app/modules/tooltip/tooltip.component';
@NgModule({
imports: [
- EntityModule,
TranslateModule,
MatButtonModule,
MatDialogModule,
diff --git a/src/app/pages/account/account.module.ts b/src/app/pages/account/account.module.ts
index 2bb734f7013..a3fb4953a81 100644
--- a/src/app/pages/account/account.module.ts
+++ b/src/app/pages/account/account.module.ts
@@ -5,14 +5,12 @@ import { MatListModule } from '@angular/material/list';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSortModule } from '@angular/material/sort';
import { TranslateModule } from '@ngx-translate/core';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { IxIconComponent } from 'app/modules/ix-icon/ix-icon.component';
import { GroupsModule } from './groups/groups.module';
import { UsersModule } from './users/users.module';
@NgModule({
imports: [
- EntityModule,
ReactiveFormsModule,
TranslateModule,
MatSortModule,
diff --git a/src/app/pages/account/groups/groups.module.ts b/src/app/pages/account/groups/groups.module.ts
index f6f4c3f8b76..77c4edfcdf3 100644
--- a/src/app/pages/account/groups/groups.module.ts
+++ b/src/app/pages/account/groups/groups.module.ts
@@ -20,7 +20,6 @@ import { StoreModule } from '@ngrx/store';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -62,7 +61,6 @@ import { DeleteGroupDialogComponent } from './group-details-row/delete-group-dia
providers: [],
imports: [
EffectsModule.forFeature([GroupEffects]),
- EntityModule,
MatButtonModule,
IxIconComponent,
MatListModule,
diff --git a/src/app/pages/account/users/users.module.ts b/src/app/pages/account/users/users.module.ts
index 590d2d6b8ce..d84f0111adb 100644
--- a/src/app/pages/account/users/users.module.ts
+++ b/src/app/pages/account/users/users.module.ts
@@ -22,7 +22,6 @@ import { StoreModule } from '@ngrx/store';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -67,7 +66,6 @@ import { UserDetailsRowComponent } from './user-details-row/user-details-row.com
providers: [],
imports: [
EffectsModule.forFeature([UserEffects]),
- EntityModule,
MatButtonModule,
IxIconComponent,
MatListModule,
diff --git a/src/app/pages/api-keys/api-keys.module.ts b/src/app/pages/api-keys/api-keys.module.ts
index 7f7d693804b..4bd2c81809e 100644
--- a/src/app/pages/api-keys/api-keys.module.ts
+++ b/src/app/pages/api-keys/api-keys.module.ts
@@ -11,7 +11,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxInputComponent } from 'app/modules/forms/ix-forms/components/ix-input/ix-input.component';
@@ -38,7 +37,6 @@ import { ApiKeyComponentStore } from './store/api-key.store';
imports: [
ReactiveFormsModule,
ClipboardModule,
- EntityModule,
MatButtonModule,
MatCardModule,
MatSortModule,
diff --git a/src/app/pages/apps/apps.module.ts b/src/app/pages/apps/apps.module.ts
index 9d8f1da8288..089eff8a65b 100644
--- a/src/app/pages/apps/apps.module.ts
+++ b/src/app/pages/apps/apps.module.ts
@@ -26,7 +26,6 @@ import { IxDetailsHeightDirective } from 'app/directives/details-height/details-
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { IxDynamicFormModule } from 'app/modules/forms/ix-dynamic-form/ix-dynamic-form.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
@@ -161,7 +160,6 @@ import { InstalledAppsComponent } from './components/installed-apps/installed-ap
TranslateModule,
IxDynamicFormModule,
ReactiveFormsModule,
- EntityModule,
MatCardModule,
MatSelectModule,
MatCheckboxModule,
diff --git a/src/app/pages/credentials/credentials.module.ts b/src/app/pages/credentials/credentials.module.ts
index 7ad2f404f6c..0f6c471c352 100644
--- a/src/app/pages/credentials/credentials.module.ts
+++ b/src/app/pages/credentials/credentials.module.ts
@@ -16,7 +16,6 @@ import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-r
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { CopyButtonComponent } from 'app/modules/buttons/copy-button/copy-button.component';
import { OauthButtonModule } from 'app/modules/buttons/oauth-button/oauth-button.module';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { IxDynamicFormModule } from 'app/modules/forms/ix-dynamic-form/ix-dynamic-form.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
@@ -172,7 +171,6 @@ import { CertificateSubjectComponent } from './certificates-dash/forms/common-st
CloudCredentialsCardComponent,
],
imports: [
- EntityModule,
IxDynamicFormModule,
IxIconComponent,
MatButtonModule,
diff --git a/src/app/pages/data-protection/data-protection.module.ts b/src/app/pages/data-protection/data-protection.module.ts
index a6fcee2465b..29b147e93b7 100755
--- a/src/app/pages/data-protection/data-protection.module.ts
+++ b/src/app/pages/data-protection/data-protection.module.ts
@@ -17,7 +17,6 @@ import { TranslateModule } from '@ngx-translate/core';
import { IxDetailsHeightDirective } from 'app/directives/details-height/details-height.directive';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { CloudCredentialsSelectModule } from 'app/modules/forms/custom-selects/cloud-credentials-select/cloud-credentials-select.module';
import { SshCredentialsSelectModule } from 'app/modules/forms/custom-selects/ssh-credentials-select/ssh-credentials-select.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
@@ -131,7 +130,6 @@ import { SmartTaskListComponent } from './smart-task/smart-task-list/smart-task-
@NgModule({
imports: [
RouterModule.forChild(dataProtectionRoutes),
- EntityModule,
ReactiveFormsModule,
MatProgressBarModule,
MatTooltipModule,
diff --git a/src/app/pages/datasets/datasets.module.ts b/src/app/pages/datasets/datasets.module.ts
index a199c91abd9..63bebe4df79 100644
--- a/src/app/pages/datasets/datasets.module.ts
+++ b/src/app/pages/datasets/datasets.module.ts
@@ -18,7 +18,6 @@ import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-r
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { CopyButtonComponent } from 'app/modules/buttons/copy-button/copy-button.component';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -86,9 +85,7 @@ import { DatasetNodeComponent } from './components/dataset-node/dataset-node.com
EncryptionModule,
ReactiveFormsModule,
TreeModule,
- EntityModule,
MatDialogModule,
- EntityModule,
NgxSkeletonLoaderModule,
SnapshotsModule,
EmptyComponent,
diff --git a/src/app/pages/datasets/modules/encryption/encryption.module.ts b/src/app/pages/datasets/modules/encryption/encryption.module.ts
index 2d9dabc4629..8f338d1d784 100644
--- a/src/app/pages/datasets/modules/encryption/encryption.module.ts
+++ b/src/app/pages/datasets/modules/encryption/encryption.module.ts
@@ -8,7 +8,6 @@ import { MatDividerModule } from '@angular/material/divider';
import { RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxFileInputComponent } from 'app/modules/forms/ix-forms/components/ix-file-input/ix-file-input.component';
@@ -39,7 +38,6 @@ import { LockDatasetDialogComponent } from './components/lock-dataset-dialog/loc
MatCardModule,
RouterModule,
MatButtonModule,
- EntityModule,
ReactiveFormsModule,
MatDialogModule,
IxIconComponent,
diff --git a/src/app/pages/datasets/modules/snapshots/snapshots.module.ts b/src/app/pages/datasets/modules/snapshots/snapshots.module.ts
index 046983f4c29..c2bfd669bc7 100644
--- a/src/app/pages/datasets/modules/snapshots/snapshots.module.ts
+++ b/src/app/pages/datasets/modules/snapshots/snapshots.module.ts
@@ -19,7 +19,6 @@ import { StoreModule } from '@ngrx/store';
import { TranslateModule } from '@ngx-translate/core';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxFieldsetComponent } from 'app/modules/forms/ix-forms/components/ix-fieldset/ix-fieldset.component';
@@ -68,7 +67,6 @@ const components = [
providers: [],
imports: [
EffectsModule.forFeature([SnapshotEffects]),
- EntityModule,
IxIconComponent,
MatButtonModule,
MatCardModule,
diff --git a/src/app/pages/directory-service/components/idmap-form/idmap-form.component.spec.ts b/src/app/pages/directory-service/components/idmap-form/idmap-form.component.spec.ts
index e40716d4779..d20adc6e848 100644
--- a/src/app/pages/directory-service/components/idmap-form/idmap-form.component.spec.ts
+++ b/src/app/pages/directory-service/components/idmap-form/idmap-form.component.spec.ts
@@ -16,7 +16,6 @@ import { helptextIdmap } from 'app/helptext/directory-service/idmap';
import { IdmapBackendOptions, IdmapBackendParameter } from 'app/interfaces/idmap-backend-options.interface';
import { Idmap } from 'app/interfaces/idmap.interface';
import { DialogService } from 'app/modules/dialog/dialog.service';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { IxSlideInRef } from 'app/modules/forms/ix-forms/components/ix-slide-in/ix-slide-in-ref';
import { SLIDE_IN_DATA } from 'app/modules/forms/ix-forms/components/ix-slide-in/ix-slide-in.token';
import {
@@ -52,7 +51,6 @@ describe('IdmapFormComponent', () => {
component: IdmapFormComponent,
imports: [
ReactiveFormsModule,
- EntityModule,
],
declarations: [
MockComponent(WithManageCertificatesLinkComponent),
diff --git a/src/app/pages/directory-service/directory-service.module.ts b/src/app/pages/directory-service/directory-service.module.ts
index 9bc2fd66949..6ac6ccae4de 100644
--- a/src/app/pages/directory-service/directory-service.module.ts
+++ b/src/app/pages/directory-service/directory-service.module.ts
@@ -11,7 +11,6 @@ import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -53,7 +52,6 @@ import { LdapComponent } from './components/ldap/ldap.component';
@NgModule({
imports: [
- EntityModule,
ReactiveFormsModule,
routing,
MatListModule,
diff --git a/src/app/pages/jobs/jobs-list.module.ts b/src/app/pages/jobs/jobs-list.module.ts
index b67cadabf21..5db465b312d 100644
--- a/src/app/pages/jobs/jobs-list.module.ts
+++ b/src/app/pages/jobs/jobs-list.module.ts
@@ -14,7 +14,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { CopyButtonComponent } from 'app/modules/buttons/copy-button/copy-button.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { SearchInput1Component } from 'app/modules/forms/search-input1/search-input1.component';
import { IxIconComponent } from 'app/modules/ix-icon/ix-icon.component';
import { IxTableComponent } from 'app/modules/ix-table/components/ix-table/ix-table.component';
@@ -34,7 +33,6 @@ import { JobsListComponent } from './jobs-list/jobs-list.component';
@NgModule({
imports: [
- EntityModule,
IxIconComponent,
MatTooltipModule,
MatProgressBarModule,
diff --git a/src/app/pages/network/network.module.ts b/src/app/pages/network/network.module.ts
index ab878d3b0cb..f18ce87acc0 100644
--- a/src/app/pages/network/network.module.ts
+++ b/src/app/pages/network/network.module.ts
@@ -13,7 +13,6 @@ import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -71,7 +70,6 @@ import { routing } from './network.routing';
@NgModule({
imports: [
- EntityModule,
FormsModule,
ReactiveFormsModule,
routing,
diff --git a/src/app/pages/reports-dashboard/reports-dashboard.module.ts b/src/app/pages/reports-dashboard/reports-dashboard.module.ts
index f12c2ef156a..15bdc2d125a 100644
--- a/src/app/pages/reports-dashboard/reports-dashboard.module.ts
+++ b/src/app/pages/reports-dashboard/reports-dashboard.module.ts
@@ -14,7 +14,6 @@ import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { IxDynamicFormModule } from 'app/modules/forms/ix-dynamic-form/ix-dynamic-form.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
@@ -63,7 +62,6 @@ import { ReportsGlobalControlsComponent } from './components/reports-global-cont
IxDateComponent,
MatToolbarModule,
TranslateModule,
- EntityModule,
MatTooltipModule,
IxIconComponent,
MatMenuModule,
diff --git a/src/app/pages/services/services.module.ts b/src/app/pages/services/services.module.ts
index 2ec3408ae00..71258796028 100644
--- a/src/app/pages/services/services.module.ts
+++ b/src/app/pages/services/services.module.ts
@@ -14,7 +14,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -57,7 +56,6 @@ import { routing } from './services.routing';
@NgModule({
imports: [
FormsModule,
- EntityModule,
routing,
TranslateModule,
IxIconComponent,
diff --git a/src/app/pages/sharing/sharing.module.ts b/src/app/pages/sharing/sharing.module.ts
index 916ba478f30..09fa6b2e73a 100644
--- a/src/app/pages/sharing/sharing.module.ts
+++ b/src/app/pages/sharing/sharing.module.ts
@@ -20,7 +20,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips/ix-chips.component';
@@ -101,7 +100,6 @@ import { SmbStatusComponent } from './smb/smb-status/smb-status.component';
imports: [
ReactiveFormsModule,
routing,
- EntityModule,
TranslateModule,
MatProgressBarModule,
MatTabsModule,
diff --git a/src/app/pages/shell/shell.module.ts b/src/app/pages/shell/shell.module.ts
index fa6b7ccc2b7..77fe746f901 100644
--- a/src/app/pages/shell/shell.module.ts
+++ b/src/app/pages/shell/shell.module.ts
@@ -1,14 +1,12 @@
import { NgModule } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { TerminalModule } from 'app/modules/terminal/terminal.module';
import { ShellComponent } from './shell.component';
import { routing } from './shell.routing';
@NgModule({
imports: [
- EntityModule,
routing,
TranslateModule,
TerminalModule,
diff --git a/src/app/pages/storage/modules/devices/devices.module.ts b/src/app/pages/storage/modules/devices/devices.module.ts
index 58b552d3cdc..8aac962e7be 100644
--- a/src/app/pages/storage/modules/devices/devices.module.ts
+++ b/src/app/pages/storage/modules/devices/devices.module.ts
@@ -15,7 +15,6 @@ import { IxDetailsHeightDirective } from 'app/directives/details-height/details-
import { HasRoleDirective } from 'app/directives/has-role/has-role.directive';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { CopyButtonComponent } from 'app/modules/buttons/copy-button/copy-button.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { UnusedDiskSelectComponent } from 'app/modules/forms/custom-selects/unused-disk-select/unused-disk-select.component';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
@@ -60,7 +59,6 @@ import { ExtendDialogComponent } from './components/zfs-info-card/extend-dialog/
@NgModule({
imports: [
- EntityModule,
TreeModule,
MatButtonModule,
MatCardModule,
diff --git a/src/app/pages/storage/modules/disks/disks.module.ts b/src/app/pages/storage/modules/disks/disks.module.ts
index 8ffc5575608..ba5461eb304 100644
--- a/src/app/pages/storage/modules/disks/disks.module.ts
+++ b/src/app/pages/storage/modules/disks/disks.module.ts
@@ -10,7 +10,6 @@ import { RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { UnusedDiskSelectComponent } from 'app/modules/forms/custom-selects/unused-disk-select/unused-disk-select.component';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
@@ -60,7 +59,6 @@ import { routes } from 'app/pages/storage/modules/disks/disks.routing';
MatButtonModule,
MatDialogModule,
RouterModule.forChild(routes),
- EntityModule,
MatCardModule,
MatDividerModule,
MatProgressBarModule,
diff --git a/src/app/pages/storage/storage.module.ts b/src/app/pages/storage/storage.module.ts
index cc66a41dce1..b9541828c7a 100644
--- a/src/app/pages/storage/storage.module.ts
+++ b/src/app/pages/storage/storage.module.ts
@@ -25,7 +25,6 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxFieldsetComponent } from 'app/modules/forms/ix-forms/components/ix-fieldset/ix-fieldset.component';
@@ -90,7 +89,6 @@ import { ZfsHealthCardComponent } from './components/dashboard-pool/zfs-health-c
MatInputModule,
MatProgressBarModule,
NgxSkeletonLoaderModule,
- EntityModule,
EmptyComponent,
FileSizePipe,
FormatDateTimePipe,
diff --git a/src/app/pages/system/system.module.ts b/src/app/pages/system/system.module.ts
index cedcb67a9fa..87b7e74dcb9 100644
--- a/src/app/pages/system/system.module.ts
+++ b/src/app/pages/system/system.module.ts
@@ -22,7 +22,6 @@ import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-r
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { OauthButtonModule } from 'app/modules/buttons/oauth-button/oauth-button.module';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import {
UnusedDiskSelectComponent,
} from 'app/modules/forms/custom-selects/unused-disk-select/unused-disk-select.component';
@@ -187,7 +186,6 @@ import { routing } from './system.routing';
@NgModule({
imports: [
- EntityModule,
FormsModule,
TreeModule,
SchedulerModule,
diff --git a/src/app/pages/system/update/components/manual-update-form/manual-update-form.component.ts b/src/app/pages/system/update/components/manual-update-form/manual-update-form.component.ts
index a756f6dacd0..bc4e814ad3b 100644
--- a/src/app/pages/system/update/components/manual-update-form/manual-update-form.component.ts
+++ b/src/app/pages/system/update/components/manual-update-form/manual-update-form.component.ts
@@ -1,4 +1,3 @@
-import { HttpErrorResponse } from '@angular/common/http';
import {
ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit,
} from '@angular/core';
@@ -6,26 +5,29 @@ import { FormBuilder, Validators } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { Router } from '@angular/router';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
-import { Store } from '@ngrx/store';
+import { select, Store } from '@ngrx/store';
import { TranslateService } from '@ngx-translate/core';
import {
- BehaviorSubject, noop, Observable, of,
+ BehaviorSubject, finalize, noop, Observable, of,
} from 'rxjs';
import {
- filter, take, tap,
+ filter, tap,
} from 'rxjs/operators';
import { JobState } from 'app/enums/job-state.enum';
import { Role } from 'app/enums/role.enum';
+import { observeJob } from 'app/helpers/operators/observe-job.operator';
import { helptextSystemUpdate as helptext } from 'app/helptext/system/update';
+import { ApiJobMethod } from 'app/interfaces/api/api-job-directory.interface';
import { Job } from 'app/interfaces/job.interface';
import { Option } from 'app/interfaces/option.interface';
import { DialogService } from 'app/modules/dialog/dialog.service';
-import { EntityJobComponent } from 'app/modules/entity/entity-job/entity-job.component';
+import { selectJob } from 'app/modules/jobs/store/job.selectors';
import { systemManualUpdateFormElements } from 'app/pages/system/update/components/manual-update-form/manual-update-form.elements';
import { updateAgainCode } from 'app/pages/system/update/utils/update-again-code.constant';
import { AuthService } from 'app/services/auth/auth.service';
import { ErrorHandlerService } from 'app/services/error-handler.service';
import { SystemGeneralService } from 'app/services/system-general.service';
+import { UploadOptions, UploadService } from 'app/services/upload.service';
import { WebSocketService } from 'app/services/ws.service';
import { AppsState } from 'app/store';
import { selectIsHaLicensed } from 'app/store/ha-info/ha-info.selectors';
@@ -71,6 +73,7 @@ export class ManualUpdateFormComponent implements OnInit {
private translate: TranslateService,
private store$: Store,
private cdr: ChangeDetectorRef,
+ private upload: UploadService,
) {
this.authService.authToken$.pipe(
tap((token) => {
@@ -149,20 +152,28 @@ export class ManualUpdateFormComponent implements OnInit {
});
}
+ // TODO: Same code as in update-actions-card
showRunningUpdate(jobId: number): void {
- const dialogRef = this.matDialog.open(EntityJobComponent, { data: { title: this.translate.instant('Update') } });
- if (this.isHaLicensed) {
- dialogRef.componentInstance.disableProgressValue(true);
- }
- dialogRef.componentInstance.jobId = jobId;
- dialogRef.componentInstance.wsshow();
- dialogRef.componentInstance.success.pipe(untilDestroyed(this)).subscribe(() => {
- this.router.navigate(['/system-tasks/reboot'], { skipLocationChange: true });
- });
- dialogRef.componentInstance.failure.pipe(untilDestroyed(this)).subscribe((err) => {
- this.dialogService.error(this.errorHandler.parseError(err));
- });
- this.cdr.markForCheck();
+ const job$ = this.store$.pipe(
+ select(selectJob(jobId)),
+ observeJob(),
+ ) as Observable>;
+
+ this.dialogService.jobDialog(
+ job$,
+ {
+ title: this.translate.instant('Update'),
+ canMinimize: true,
+ },
+ )
+ .afterClosed()
+ .pipe(
+ this.errorHandler.catchError(),
+ untilDestroyed(this),
+ )
+ .subscribe(() => {
+ this.router.navigate(['/system-tasks/reboot'], { skipLocationChange: true });
+ });
}
onSubmit(): void {
@@ -181,56 +192,33 @@ export class ManualUpdateFormComponent implements OnInit {
if (!files.length) {
return;
}
- const dialogRef = this.matDialog.open(EntityJobComponent, {
- data: { title: helptext.manual_update_action },
- disableClose: true,
- });
- if (this.isHaLicensed) {
- dialogRef.componentInstance.disableProgressValue(true);
- }
-
- dialogRef.componentInstance.changeAltMessage(helptext.manual_update_description);
-
- const formData: FormData = this.generateFormData(files, fileLocation);
-
- dialogRef.componentInstance.wspostWithProgressUpdates(this.apiEndPoint, formData);
- dialogRef.componentInstance.success.pipe(untilDestroyed(this)).subscribe(() => {
- dialogRef.close(false);
- this.handleUpdateSuccess();
- });
-
- dialogRef.componentInstance.prefailure.pipe(
- tap(() => dialogRef.close(false)),
- untilDestroyed(this),
- ).subscribe((error) => this.handleUpdatePreFailure(error));
-
- dialogRef.componentInstance.failure.pipe(
- take(1),
- tap(() => dialogRef.close(false)),
- untilDestroyed(this),
- ).subscribe((error) => this.handleUpdateFailure(error));
-
- dialogRef.afterClosed().pipe(untilDestroyed(this)).subscribe(() => {
- this.isFormLoading$.next(false);
- this.cdr.markForCheck();
- });
- this.cdr.markForCheck();
- }
- generateFormData(files: FileList, fileLocation: string): FormData {
- const formData = new FormData();
- if (this.isHaLicensed) {
- formData.append('data', JSON.stringify({
+ const params: UploadOptions = this.isHaLicensed
+ ? {
method: 'failover.upgrade',
- }));
- } else {
- formData.append('data', JSON.stringify({
+ file: files[0],
+ }
+ : {
method: 'update.file',
params: [{ destination: fileLocation }],
- }));
- }
- formData.append('file', files[0]);
- return formData;
+ file: files[0],
+ };
+
+ const job$ = this.upload.uploadAsJob(params);
+ this.dialogService
+ .jobDialog(job$, { title: this.translate.instant(helptext.manual_update_action) })
+ .afterClosed()
+ .pipe(
+ finalize(() => {
+ this.isFormLoading$.next(false);
+ this.cdr.markForCheck();
+ }),
+ untilDestroyed(this),
+ )
+ .subscribe({
+ next: () => this.handleUpdateSuccess(),
+ error: (job: Job) => this.handleUpdateFailure(job),
+ });
}
finishNonHaUpdate(): void {
@@ -269,15 +257,6 @@ export class ManualUpdateFormComponent implements OnInit {
}
}
- handleUpdatePreFailure(prefailure: HttpErrorResponse): void {
- this.isFormLoading$.next(false);
- this.dialogService.error({
- title: helptext.manual_update_error_dialog.message,
- message: `${prefailure.status.toString()} ${prefailure.statusText}`,
- });
- this.cdr.markForCheck();
- }
-
handleUpdateFailure = (failure: Job): void => {
this.isFormLoading$.next(false);
this.cdr.markForCheck();
@@ -298,33 +277,17 @@ export class ManualUpdateFormComponent implements OnInit {
};
private resumeUpdateAfterFailure(): void {
- const dialogRef = this.matDialog.open(EntityJobComponent, {
- data: { title: helptext.manual_update_action },
- disableClose: true,
- });
- if (this.isHaLicensed) {
- dialogRef.componentInstance.setCall('failover.upgrade', [{ resume: true, resume_manual: true }]);
- dialogRef.componentInstance.disableProgressValue(true);
- } else {
- dialogRef.componentInstance.setCall('update.file', [{ resume: true }]);
- }
-
- dialogRef.componentInstance.success.pipe(untilDestroyed(this)).subscribe(() => {
- dialogRef.close(false);
- this.handleUpdateSuccess();
- });
-
- dialogRef.componentInstance.prefailure.pipe(
- tap(() => dialogRef.close(false)),
- untilDestroyed(this),
- ).subscribe((error) => this.handleUpdatePreFailure(error));
-
- dialogRef.componentInstance.failure.pipe(
- take(1),
- tap(() => dialogRef.close(false)),
- untilDestroyed(this),
- ).subscribe((error) => this.handleUpdateFailure(error));
-
- dialogRef.componentInstance.submit();
+ const job$: Observable = this.isHaLicensed
+ ? this.ws.job('failover.upgrade', [{ resume: true, resume_manual: true }])
+ : this.ws.job('update.file', [{ resume: true }]);
+
+ this.dialogService
+ .jobDialog(job$, { title: helptext.manual_update_action })
+ .afterClosed()
+ .pipe(untilDestroyed(this))
+ .subscribe({
+ next: () => this.handleUpdateSuccess(),
+ error: (job: Job) => this.handleUpdateFailure(job),
+ });
}
}
diff --git a/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.spec.ts b/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.spec.ts
index 495d5b42bea..680b2b4961e 100644
--- a/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.spec.ts
+++ b/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.spec.ts
@@ -7,14 +7,12 @@ import { Router } from '@angular/router';
import { createComponentFactory, mockProvider, Spectator } from '@ngneat/spectator/jest';
import { provideMockStore } from '@ngrx/store/testing';
import { BehaviorSubject, of } from 'rxjs';
-import { fakeSuccessfulJob } from 'app/core/testing/utils/fake-job.utils';
import { mockAuth } from 'app/core/testing/utils/mock-auth.utils';
-import { mockCall, mockWebSocket } from 'app/core/testing/utils/mock-websocket.utils';
+import { mockCall, mockJob, mockWebSocket } from 'app/core/testing/utils/mock-websocket.utils';
import { JobState } from 'app/enums/job-state.enum';
import { SystemUpdateStatus } from 'app/enums/system-update.enum';
import { SystemUpdate } from 'app/interfaces/system-update.interface';
import { DialogService } from 'app/modules/dialog/dialog.service';
-import { EntityJobComponent } from 'app/modules/entity/entity-job/entity-job.component';
import { SnackbarService } from 'app/modules/snackbar/services/snackbar.service';
import { SaveConfigDialogComponent } from 'app/pages/system/general-settings/save-config-dialog/save-config-dialog.component';
import { UpdateActionsCardComponent } from 'app/pages/system/update/components/update-actions-card/update-actions-card.component';
@@ -29,17 +27,9 @@ describe('UpdateActionsCardComponent', () => {
let loader: HarnessLoader;
const mockDialogRef = {
- componentInstance: {
- setDescription: jest.fn(),
- setCall: jest.fn(),
- submit: jest.fn(),
- success: of(fakeSuccessfulJob(true)),
- failure: of(),
- wspost: jest.fn(),
- },
close: jest.fn(),
afterClosed: () => of(true),
- } as unknown as MatDialogRef;
+ } as unknown as MatDialogRef;
const createComponent = createComponentFactory({
component: UpdateActionsCardComponent,
@@ -51,6 +41,7 @@ describe('UpdateActionsCardComponent', () => {
status: SystemUpdateStatus.Available,
changes: [],
} as SystemUpdate),
+ mockJob('update.update'),
]),
mockProvider(Router),
mockProvider(TrainService),
@@ -109,8 +100,7 @@ describe('UpdateActionsCardComponent', () => {
title: 'Apply Pending Updates',
});
- expect(mockDialogRef.componentInstance.setCall).toHaveBeenCalledWith('update.update', [{ reboot: true, resume: false }]);
- expect(mockDialogRef.componentInstance.submit).toHaveBeenCalled();
+ expect(spectator.inject(WebSocketService).job).toHaveBeenCalledWith('update.update', [{ reboot: true, resume: false }]);
});
it('shows save configuration dialog and runs update when Download Updates button is pressed', async () => {
@@ -140,8 +130,7 @@ describe('UpdateActionsCardComponent', () => {
title: 'Download Update',
});
- expect(mockDialogRef.componentInstance.setCall).toHaveBeenCalledWith('update.update', [{ reboot: true, resume: false }]);
- expect(mockDialogRef.componentInstance.submit).toHaveBeenCalled();
+ expect(spectator.inject(WebSocketService).job).toHaveBeenCalledWith('update.update', [{ reboot: true, resume: false }]);
});
it('shows save configuration dialog and redirects to the manual update page when Install Manual Update File button is pressed', async () => {
diff --git a/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.ts b/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.ts
index 54f8188bb7d..8ff1fc7795e 100644
--- a/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.ts
+++ b/src/app/pages/system/update/components/update-actions-card/update-actions-card.component.ts
@@ -4,14 +4,16 @@ import {
import { MatDialog } from '@angular/material/dialog';
import { Router } from '@angular/router';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
-import { Store } from '@ngrx/store';
+import { select, Store } from '@ngrx/store';
import { TranslateService } from '@ngx-translate/core';
import {
- Observable, of, filter, tap, combineLatest, map,
+ Observable, of, filter, tap, combineLatest, map, switchMap,
+ take,
} from 'rxjs';
import { JobState } from 'app/enums/job-state.enum';
import { Role } from 'app/enums/role.enum';
import { SystemUpdateOperationType, SystemUpdateStatus } from 'app/enums/system-update.enum';
+import { observeJob } from 'app/helpers/operators/observe-job.operator';
import { WINDOW } from 'app/helpers/window.helper';
import { helptextGlobal } from 'app/helptext/global-helptext';
import { helptextSystemUpdate as helptext } from 'app/helptext/system/update';
@@ -19,7 +21,7 @@ import { ApiJobMethod } from 'app/interfaces/api/api-job-directory.interface';
import { Job } from 'app/interfaces/job.interface';
import { WebSocketError } from 'app/interfaces/websocket-error.interface';
import { DialogService } from 'app/modules/dialog/dialog.service';
-import { EntityJobComponent } from 'app/modules/entity/entity-job/entity-job.component';
+import { selectJob } from 'app/modules/jobs/store/job.selectors';
import { AppLoaderService } from 'app/modules/loader/app-loader.service';
import { SnackbarService } from 'app/modules/snackbar/services/snackbar.service';
import {
@@ -118,18 +120,26 @@ export class UpdateActionsCardComponent implements OnInit {
// Shows an update in progress as a job dialog on the update page
showRunningUpdate(jobId: number): void {
- const dialogRef = this.matDialog.open(EntityJobComponent, { data: { title: this.updateTitle } });
- if (this.isHaLicensed) {
- dialogRef.componentInstance.disableProgressValue(true);
- }
- dialogRef.componentInstance.jobId = jobId;
- dialogRef.componentInstance.wsshow();
- dialogRef.componentInstance.success.pipe(untilDestroyed(this)).subscribe(() => {
- this.router.navigate(['/system-tasks/reboot'], { skipLocationChange: true });
- });
- dialogRef.componentInstance.failure.pipe(untilDestroyed(this)).subscribe((err) => {
- this.dialogService.error(this.errorHandler.parseError(err));
- });
+ const job$ = this.store$.pipe(
+ select(selectJob(jobId)),
+ observeJob(),
+ ) as Observable>;
+
+ this.dialogService.jobDialog(
+ job$,
+ {
+ title: this.updateTitle,
+ canMinimize: true,
+ },
+ )
+ .afterClosed()
+ .pipe(
+ this.errorHandler.catchError(),
+ untilDestroyed(this),
+ )
+ .subscribe(() => {
+ this.router.navigate(['/system-tasks/reboot'], { skipLocationChange: true });
+ });
}
downloadUpdate(): void {
@@ -266,38 +276,39 @@ export class UpdateActionsCardComponent implements OnInit {
this.window.sessionStorage.removeItem('updateLastChecked');
this.window.sessionStorage.removeItem('updateAvailable');
this.sysGenService.updateRunningNoticeSent.emit();
- const dialogRef = this.matDialog.open(EntityJobComponent, { data: { title: this.updateTitle } });
- dialogRef.componentInstance.failure.pipe(untilDestroyed(this)).subscribe((error) => {
- dialogRef.close();
- this.handleUpdateError(error);
- });
- if (!this.isHaLicensed) {
- dialogRef.componentInstance.setCall('update.update', [{ resume, reboot: true }]);
- dialogRef.componentInstance.submit();
+
+ let job$: Observable;
+ if (this.isHaLicensed) {
+ job$ = this.trainService.trainValue$.pipe(
+ take(1),
+ switchMap((trainValue) => this.ws.call('update.set_train', [trainValue])),
+ switchMap(() => this.ws.job('failover.upgrade', [{ resume }])),
+ );
} else {
- this.trainService.trainValue$.pipe(
- tap((trainValue) => this.ws.call('update.set_train', [trainValue])),
- untilDestroyed(this),
- ).subscribe(() => {
- dialogRef.componentInstance.setCall('failover.upgrade', [{ resume }]);
- dialogRef.componentInstance.disableProgressValue(true);
- dialogRef.componentInstance.submit();
- dialogRef.componentInstance.success.pipe(untilDestroyed(this)).subscribe(() => {
+ job$ = this.ws.job('update.update', [{ resume, reboot: true }]);
+ }
+
+ this.dialogService
+ .jobDialog(job$, { title: this.translate.instant(this.updateTitle) })
+ .afterClosed()
+ .pipe(
+ switchMap(() => {
this.dialogService.closeAllDialogs();
this.isUpdateRunning = false;
this.sysGenService.updateDone(); // Send 'finished' signal to topbar
this.cdr.markForCheck();
- this.router.navigate(['/']);
- this.dialogService.confirm({
+ return this.dialogService.confirm({
title: helptext.ha_update.complete_title,
message: helptext.ha_update.complete_msg,
hideCheckbox: true,
buttonText: helptext.ha_update.complete_action,
hideCancel: true,
- }).pipe(untilDestroyed(this)).subscribe();
- });
- });
- }
+ });
+ }),
+ this.errorHandler.catchError(),
+ untilDestroyed(this),
+ )
+ .subscribe();
}
// Continues the update (based on its type) after the Save Config dialog is closed
diff --git a/src/app/pages/vm/vm.module.ts b/src/app/pages/vm/vm.module.ts
index 187f5ce15e9..67b14e501a5 100644
--- a/src/app/pages/vm/vm.module.ts
+++ b/src/app/pages/vm/vm.module.ts
@@ -14,7 +14,6 @@ import { TranslateModule } from '@ngx-translate/core';
import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive';
import { UiSearchDirective } from 'app/directives/ui-search.directive';
import { EmptyComponent } from 'app/modules/empty/empty.component';
-import { EntityModule } from 'app/modules/entity/entity.module';
import { FormActionsComponent } from 'app/modules/forms/ix-forms/components/form-actions/form-actions.component';
import { IxCheckboxComponent } from 'app/modules/forms/ix-forms/components/ix-checkbox/ix-checkbox.component';
import { IxComboboxComponent } from 'app/modules/forms/ix-forms/components/ix-combobox/ix-combobox.component';
@@ -74,7 +73,6 @@ import { routing } from './vm.routing';
@NgModule({
imports: [
- EntityModule,
IxIconComponent,
MatButtonModule,
MatCardModule,
diff --git a/src/app/services/session-timeout.service.ts b/src/app/services/session-timeout.service.ts
index 89e8b7d08c2..91ab192795e 100644
--- a/src/app/services/session-timeout.service.ts
+++ b/src/app/services/session-timeout.service.ts
@@ -11,9 +11,9 @@ import {
} from 'rxjs';
import { WINDOW } from 'app/helpers/window.helper';
import { Timeout } from 'app/interfaces/timeout.interface';
+import { JobProgressDialogComponent } from 'app/modules/dialog/components/job-progress/job-progress-dialog.component';
import { SessionExpiringDialogComponent } from 'app/modules/dialog/components/session-expiring-dialog/session-expiring-dialog.component';
import { DialogService } from 'app/modules/dialog/dialog.service';
-import { EntityJobComponent } from 'app/modules/entity/entity-job/entity-job.component';
import { AuthService } from 'app/services/auth/auth.service';
import { TokenLastUsedService } from 'app/services/token-last-used.service';
import { AppsState } from 'app/store';
@@ -26,6 +26,7 @@ import { selectPreferences } from 'app/store/preferences/preferences.selectors';
export class SessionTimeoutService {
protected actionWaitTimeout: Timeout;
protected terminateCancelTimeout: Timeout;
+ // TODO: Just make resume an arrow function.
private resumeBound;
constructor(
@@ -42,9 +43,9 @@ export class SessionTimeoutService {
this.resumeBound = this.resume.bind(this);
this.matDialog.afterOpened.pipe(untilDestroyed(this)).subscribe((dialog) => {
- if (dialog.componentInstance instanceof EntityJobComponent) {
+ if (dialog.componentInstance instanceof JobProgressDialogComponent) {
this.stop();
- dialog.componentInstance.dialogRef.afterClosed().pipe(untilDestroyed(this)).subscribe(() => {
+ dialog.afterClosed().pipe(untilDestroyed(this)).subscribe(() => {
this.start();
});
}
diff --git a/src/app/services/upload.service.ts b/src/app/services/upload.service.ts
index 63eda8c85a5..c003cb2e857 100644
--- a/src/app/services/upload.service.ts
+++ b/src/app/services/upload.service.ts
@@ -12,7 +12,7 @@ import { selectJob } from 'app/modules/jobs/store/job.selectors';
import { AuthService } from 'app/services/auth/auth.service';
import { AppsState } from 'app/store';
-interface UploadOptions {
+export interface UploadOptions {
file: File;
method: M;
params?: unknown[];
diff --git a/src/assets/i18n/af.json b/src/assets/i18n/af.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/af.json
+++ b/src/assets/i18n/af.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ar.json b/src/assets/i18n/ar.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ar.json
+++ b/src/assets/i18n/ar.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ast.json b/src/assets/i18n/ast.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ast.json
+++ b/src/assets/i18n/ast.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/az.json b/src/assets/i18n/az.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/az.json
+++ b/src/assets/i18n/az.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/be.json b/src/assets/i18n/be.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/be.json
+++ b/src/assets/i18n/be.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/bg.json b/src/assets/i18n/bg.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/bg.json
+++ b/src/assets/i18n/bg.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/bn.json b/src/assets/i18n/bn.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/bn.json
+++ b/src/assets/i18n/bn.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/br.json b/src/assets/i18n/br.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/br.json
+++ b/src/assets/i18n/br.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/bs.json b/src/assets/i18n/bs.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/bs.json
+++ b/src/assets/i18n/bs.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ca.json b/src/assets/i18n/ca.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ca.json
+++ b/src/assets/i18n/ca.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/cs.json b/src/assets/i18n/cs.json
index 0ebb1c15aa7..a03be9e0f32 100644
--- a/src/assets/i18n/cs.json
+++ b/src/assets/i18n/cs.json
@@ -509,7 +509,6 @@
"Clone to New Dataset": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1390,7 +1389,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/cy.json b/src/assets/i18n/cy.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/cy.json
+++ b/src/assets/i18n/cy.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/da.json
+++ b/src/assets/i18n/da.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index ffa49d98d3e..3e0f6dbd438 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -596,7 +596,6 @@
"Clone to New Dataset": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1264,7 +1263,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File ID": "",
"File Inherit": "",
diff --git a/src/assets/i18n/dsb.json b/src/assets/i18n/dsb.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/dsb.json
+++ b/src/assets/i18n/dsb.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/el.json b/src/assets/i18n/el.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/el.json
+++ b/src/assets/i18n/el.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/en-au.json b/src/assets/i18n/en-au.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/en-au.json
+++ b/src/assets/i18n/en-au.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/en-gb.json b/src/assets/i18n/en-gb.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/en-gb.json
+++ b/src/assets/i18n/en-gb.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/eo.json b/src/assets/i18n/eo.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/eo.json
+++ b/src/assets/i18n/eo.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/es-ar.json b/src/assets/i18n/es-ar.json
index 0a23e5f33ac..64e162b6d9b 100644
--- a/src/assets/i18n/es-ar.json
+++ b/src/assets/i18n/es-ar.json
@@ -411,7 +411,6 @@
"Client ID": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close scheduler": "",
"Close the form": "",
"Close {formType} Form": "",
@@ -920,7 +919,6 @@
"Fenced is not running.": "",
"Fetch DataStores": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"File ID": "",
"File Mask": "",
"File Permissions": "",
diff --git a/src/assets/i18n/es-co.json b/src/assets/i18n/es-co.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/es-co.json
+++ b/src/assets/i18n/es-co.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/es-mx.json b/src/assets/i18n/es-mx.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/es-mx.json
+++ b/src/assets/i18n/es-mx.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/es-ni.json b/src/assets/i18n/es-ni.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/es-ni.json
+++ b/src/assets/i18n/es-ni.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/es-ve.json b/src/assets/i18n/es-ve.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/es-ve.json
+++ b/src/assets/i18n/es-ve.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json
index f254b88e614..c7c517bd27b 100644
--- a/src/assets/i18n/es.json
+++ b/src/assets/i18n/es.json
@@ -760,7 +760,6 @@
"Clone to New Dataset": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1676,7 +1675,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/et.json b/src/assets/i18n/et.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/et.json
+++ b/src/assets/i18n/et.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/eu.json b/src/assets/i18n/eu.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/eu.json
+++ b/src/assets/i18n/eu.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/fa.json b/src/assets/i18n/fa.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/fa.json
+++ b/src/assets/i18n/fa.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/fi.json b/src/assets/i18n/fi.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/fi.json
+++ b/src/assets/i18n/fi.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 1ee8e9f37e4..54477879518 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -1642,7 +1642,6 @@
"Close": "Fermer",
"Close Feedback Dialog": "Fermer la boîte de dialogue de commentaires",
"Close Inspect VDEVs Dialog": "Fermer la boîte de dialogue Inspecter les VDEV",
- "Close Job": "Fermer la tâche",
"Close panel": "Fermer le panneau",
"Close scheduler": "Fermer le planificateur",
"Close the form": "Fermer le formulaire",
@@ -2519,7 +2518,6 @@
"Fetch DataStores": "Récupérer les datastores",
"Fetching Encryption Summary": "Récupération du résumé du chiffrement",
"Fetching Encryption Summary for {dataset}": "Récupération du résumé de chiffrement pour {dataset}",
- "Fetching data...": "Récupération des données...",
"Field is required": "Champ requis",
"File": "Fichier",
"File Inherit": "Héritage du fichier",
diff --git a/src/assets/i18n/fy.json b/src/assets/i18n/fy.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/fy.json
+++ b/src/assets/i18n/fy.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ga.json b/src/assets/i18n/ga.json
index d05e19fee5f..94535feb7f1 100644
--- a/src/assets/i18n/ga.json
+++ b/src/assets/i18n/ga.json
@@ -917,7 +917,6 @@
"Close": "Dún",
"Close Feedback Dialog": "Dún Dialóg Aiseolais",
"Close Inspect VDEVs Dialog": "Dún Inspect VDEVs Dialóg",
- "Close Job": "Dún Job",
"Close panel": "Painéal a dhúnadh",
"Close scheduler": "Dún an sceidealóir",
"Close the form": "Dún an fhoirm",
@@ -1905,7 +1904,6 @@
"Fetch DataStores": "Faigh Stórais Sonraí",
"Fetching Encryption Summary": "Ag fáil Achoimre Criptithe",
"Fetching Encryption Summary for {dataset}": "Achoimre Criptithe á fáil le haghaidh {dataset}",
- "Fetching data...": "Sonraí á bhfáil...",
"Field is required": "Réimse ag teastáil",
"File": "Comhad",
"File ID": "Aitheantas an chomhaid",
diff --git a/src/assets/i18n/gd.json b/src/assets/i18n/gd.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/gd.json
+++ b/src/assets/i18n/gd.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/gl.json b/src/assets/i18n/gl.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/gl.json
+++ b/src/assets/i18n/gl.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/he.json b/src/assets/i18n/he.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/he.json
+++ b/src/assets/i18n/he.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/hi.json b/src/assets/i18n/hi.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/hi.json
+++ b/src/assets/i18n/hi.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/hr.json b/src/assets/i18n/hr.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/hr.json
+++ b/src/assets/i18n/hr.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/hsb.json b/src/assets/i18n/hsb.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/hsb.json
+++ b/src/assets/i18n/hsb.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/hu.json b/src/assets/i18n/hu.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/hu.json
+++ b/src/assets/i18n/hu.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ia.json b/src/assets/i18n/ia.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ia.json
+++ b/src/assets/i18n/ia.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/id.json b/src/assets/i18n/id.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/id.json
+++ b/src/assets/i18n/id.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/io.json b/src/assets/i18n/io.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/io.json
+++ b/src/assets/i18n/io.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/is.json b/src/assets/i18n/is.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/is.json
+++ b/src/assets/i18n/is.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json
index 0baceb55139..aa64a49d546 100644
--- a/src/assets/i18n/it.json
+++ b/src/assets/i18n/it.json
@@ -730,7 +730,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1648,7 +1647,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ja.json b/src/assets/i18n/ja.json
index 7a1593ffb3d..aa910d2e3b0 100644
--- a/src/assets/i18n/ja.json
+++ b/src/assets/i18n/ja.json
@@ -693,7 +693,6 @@
"Clone To New Dataset": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1567,7 +1566,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ka.json b/src/assets/i18n/ka.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ka.json
+++ b/src/assets/i18n/ka.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/kk.json b/src/assets/i18n/kk.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/kk.json
+++ b/src/assets/i18n/kk.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/km.json b/src/assets/i18n/km.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/km.json
+++ b/src/assets/i18n/km.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/kn.json b/src/assets/i18n/kn.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/kn.json
+++ b/src/assets/i18n/kn.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ko.json b/src/assets/i18n/ko.json
index b8365770d1a..1a81c8d4063 100644
--- a/src/assets/i18n/ko.json
+++ b/src/assets/i18n/ko.json
@@ -406,7 +406,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1413,7 +1412,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/lb.json b/src/assets/i18n/lb.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/lb.json
+++ b/src/assets/i18n/lb.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/lt.json b/src/assets/i18n/lt.json
index 3814abd7842..c1b9a47ae5a 100644
--- a/src/assets/i18n/lt.json
+++ b/src/assets/i18n/lt.json
@@ -824,7 +824,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1831,7 +1830,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/lv.json b/src/assets/i18n/lv.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/lv.json
+++ b/src/assets/i18n/lv.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/mk.json b/src/assets/i18n/mk.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/mk.json
+++ b/src/assets/i18n/mk.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ml.json b/src/assets/i18n/ml.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ml.json
+++ b/src/assets/i18n/ml.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/mn.json b/src/assets/i18n/mn.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/mn.json
+++ b/src/assets/i18n/mn.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/mr.json b/src/assets/i18n/mr.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/mr.json
+++ b/src/assets/i18n/mr.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/my.json b/src/assets/i18n/my.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/my.json
+++ b/src/assets/i18n/my.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/nb.json b/src/assets/i18n/nb.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/nb.json
+++ b/src/assets/i18n/nb.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ne.json b/src/assets/i18n/ne.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ne.json
+++ b/src/assets/i18n/ne.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/nl.json b/src/assets/i18n/nl.json
index e064f6ba0ca..928bb3efe19 100644
--- a/src/assets/i18n/nl.json
+++ b/src/assets/i18n/nl.json
@@ -182,7 +182,6 @@
"Click Add to add first VDEV.": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close scheduler": "",
"Close {formType} Form": "",
"Cloud Backup": "",
@@ -444,7 +443,6 @@
"Features": "",
"Feedback Type": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"File Mask": "",
"File Permissions": "",
"First Page": "",
diff --git a/src/assets/i18n/nn.json b/src/assets/i18n/nn.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/nn.json
+++ b/src/assets/i18n/nn.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/os.json b/src/assets/i18n/os.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/os.json
+++ b/src/assets/i18n/os.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/pa.json b/src/assets/i18n/pa.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/pa.json
+++ b/src/assets/i18n/pa.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/pl.json b/src/assets/i18n/pl.json
index 75dd1b69814..3d032c81df2 100644
--- a/src/assets/i18n/pl.json
+++ b/src/assets/i18n/pl.json
@@ -784,7 +784,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1784,7 +1783,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/pt-br.json b/src/assets/i18n/pt-br.json
index f810ec45120..67c2e224363 100644
--- a/src/assets/i18n/pt-br.json
+++ b/src/assets/i18n/pt-br.json
@@ -771,7 +771,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1778,7 +1777,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json
index af32d2adf19..c0497ee5fdf 100644
--- a/src/assets/i18n/pt.json
+++ b/src/assets/i18n/pt.json
@@ -324,7 +324,6 @@
"Clicking Continue allows TrueNAS to finish the update in the background while Abort stops the process and reverts the dataset ACL to the previously active ACL.": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close scheduler": "",
"Close {formType} Form": "",
"Cloud Backup": "",
@@ -923,7 +922,6 @@
"Feature Request": "",
"Features": "",
"Feedback Type": "",
- "Fetching data...": "",
"File Mask": "",
"File Permissions": "",
"First Page": "",
diff --git a/src/assets/i18n/ro.json b/src/assets/i18n/ro.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ro.json
+++ b/src/assets/i18n/ro.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json
index 8e7a911e626..b9391cf4d30 100644
--- a/src/assets/i18n/ru.json
+++ b/src/assets/i18n/ru.json
@@ -479,7 +479,6 @@
"Clone To New Dataset": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1085,7 +1084,6 @@
"Fenced is not running.": "",
"Fetch DataStores": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sk.json b/src/assets/i18n/sk.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sk.json
+++ b/src/assets/i18n/sk.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sl.json b/src/assets/i18n/sl.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sl.json
+++ b/src/assets/i18n/sl.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sq.json b/src/assets/i18n/sq.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sq.json
+++ b/src/assets/i18n/sq.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sr-latn.json b/src/assets/i18n/sr-latn.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sr-latn.json
+++ b/src/assets/i18n/sr-latn.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sr.json b/src/assets/i18n/sr.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sr.json
+++ b/src/assets/i18n/sr.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/strings.json b/src/assets/i18n/strings.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/strings.json
+++ b/src/assets/i18n/strings.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sv.json b/src/assets/i18n/sv.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sv.json
+++ b/src/assets/i18n/sv.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/sw.json b/src/assets/i18n/sw.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/sw.json
+++ b/src/assets/i18n/sw.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/ta.json b/src/assets/i18n/ta.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/ta.json
+++ b/src/assets/i18n/ta.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/te.json b/src/assets/i18n/te.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/te.json
+++ b/src/assets/i18n/te.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/th.json b/src/assets/i18n/th.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/th.json
+++ b/src/assets/i18n/th.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/tr.json b/src/assets/i18n/tr.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/tr.json
+++ b/src/assets/i18n/tr.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/tt.json b/src/assets/i18n/tt.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/tt.json
+++ b/src/assets/i18n/tt.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/udm.json b/src/assets/i18n/udm.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/udm.json
+++ b/src/assets/i18n/udm.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/uk.json b/src/assets/i18n/uk.json
index f0c984579bf..fad19708d77 100644
--- a/src/assets/i18n/uk.json
+++ b/src/assets/i18n/uk.json
@@ -282,7 +282,6 @@
"Client ID": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close scheduler": "",
"Close the form": "",
"Close {formType} Form": "",
@@ -664,7 +663,6 @@
"Features": "",
"Feedback Type": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"File ID": "",
"File Mask": "",
"File Permissions": "",
diff --git a/src/assets/i18n/vi.json b/src/assets/i18n/vi.json
index 7cab7a671f2..a9a659e029b 100644
--- a/src/assets/i18n/vi.json
+++ b/src/assets/i18n/vi.json
@@ -830,7 +830,6 @@
"Close": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1837,7 +1836,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/src/assets/i18n/zh-hans.json b/src/assets/i18n/zh-hans.json
index cd2cca2ceb8..00ae7136f7a 100644
--- a/src/assets/i18n/zh-hans.json
+++ b/src/assets/i18n/zh-hans.json
@@ -188,7 +188,6 @@
"Click to give {index} star rating.": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close scheduler": "",
"Close {formType} Form": "",
"Cloud Backup": "",
@@ -458,7 +457,6 @@
"Features": "",
"Feedback Type": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"File Mask": "",
"File Permissions": "",
"First Page": "",
diff --git a/src/assets/i18n/zh-hant.json b/src/assets/i18n/zh-hant.json
index 2017096bc0c..da2ac8b98e0 100644
--- a/src/assets/i18n/zh-hant.json
+++ b/src/assets/i18n/zh-hant.json
@@ -685,7 +685,6 @@
"Clone To New Dataset": "",
"Close Feedback Dialog": "",
"Close Inspect VDEVs Dialog": "",
- "Close Job": "",
"Close panel": "",
"Close scheduler": "",
"Close the form": "",
@@ -1520,7 +1519,6 @@
"Fetch DataStores": "",
"Fetching Encryption Summary": "",
"Fetching Encryption Summary for {dataset}": "",
- "Fetching data...": "",
"Field is required": "",
"File": "",
"File ID": "",
diff --git a/tsconfig.strictNullChecks.json b/tsconfig.strictNullChecks.json
index 410763fe92b..1ef5c40273b 100644
--- a/tsconfig.strictNullChecks.json
+++ b/tsconfig.strictNullChecks.json
@@ -412,7 +412,6 @@
"./src/app/modules/dialog/components/redirect-dialog/redirect-dialog.component.ts",
"./src/app/modules/dialog/components/session-expiring-dialog/session-expiring-dialog.component.ts",
"./src/app/modules/empty/empty.service.ts",
- "./src/app/modules/entity/entity-job/entity-job-config.interface.ts",
"./src/app/modules/forms/toolbar-slider/toolbar-slider.component.ts",
"./src/app/modules/feedback/interfaces/feedback.interface.ts",
"./src/app/modules/feedback/interfaces/file-ticket.interface.ts",