mgr/dashboard: upgrade angular to 19

* bump nodejs to 22.21.1
* remove swagger-ui from the package.json and import the bundled version
  of it which is `swagger-ui-dist`. This removes the dependencies to the
react redux which is bought by the swagger-ui and also reduces the build
assets and build warnings. we really don't need the whole swagger-ui
package to be present here. Also importing the swagger-ui.css inside the
api-docs component lazily.

since our project is now under nx, upgraded using the nx migrate
command. It took care of the changes where it added the `standalone:
false` to all our files since we are still on modular architecture.

Other changes include
- adding `flush()` to fakeAsync mock test
- fixing some complaints raised by tsc linter as per the new typescript
  type checks
- removed `this` from html components
- fixed jest config for newer presets

Signed-off-by: Nizamudeen A <nia@redhat.com>
This commit is contained in:
Nizamudeen A 2025-12-22 14:19:00 +05:30
parent f3395690ff
commit 52aeababe4
387 changed files with 4763 additions and 6339 deletions

View File

@ -211,7 +211,7 @@ The build process is based on `Node.js <https://nodejs.org/>`_ and requires the
Prerequisites
~~~~~~~~~~~~~
* Node 20.18.1 or higher
* Node 22.21.1 or higher
* NPM 10.5.2 or higher
nodeenv:

View File

@ -133,7 +133,7 @@ build_dashboard_frontend() {
$CURR_DIR/src/tools/setup-virtualenv.sh $TEMP_DIR
$TEMP_DIR/bin/pip install nodeenv
$TEMP_DIR/bin/nodeenv --verbose -p --node=20.18.1
$TEMP_DIR/bin/nodeenv --verbose -p --node=22.21.1
cd src/pybind/mgr/dashboard/frontend
. $TEMP_DIR/bin/activate

View File

@ -1 +1 @@
v20.18.1
v22.21.1

View File

@ -69,7 +69,7 @@ else(WITH_SYSTEM_NPM)
OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=20.18.1
COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=22.21.1
# ensure that the files that nodeenv unpacks from tarballs are owned by
# the current user. This can be an issue due to the node tarball using
# uid 1000 and running the unpack in a id-mapped namespace (container)

View File

@ -12,12 +12,15 @@ const jestConfig = {
moduleNameMapper: {
'\\.scss$': 'identity-obj-proxy',
'~/(.*)$': '<rootDir>/src/$1',
'^@carbon/icons/es/(.*)$': '@carbon/icons/lib/$1.js'
'^@carbon/icons/es/(.*)$': '@carbon/icons/lib/$1.js',
'^lodash-es$': 'lodash',
},
moduleFileExtensions: ['ts', 'html', 'js', 'json', 'mjs', 'cjs'],
preset: 'jest-preset-angular',
setupFilesAfterEnv: ['<rootDir>/src/setupJest.ts'],
transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$|'.concat(esModules.join('|'), ')')],
transformIgnorePatterns: [
'node_modules/(?!.*\\.mjs$|lodash-es|carbon-components-angular|@angular/localize|' + esModules.join('|') + ')'
],
transform: {
'^.+\\.(ts|html|mjs)$': [
'jest-preset-angular',

File diff suppressed because it is too large Load Diff

View File

@ -38,15 +38,15 @@
},
"private": true,
"dependencies": {
"@angular/animations": "18.2.11",
"@angular/common": "18.2.11",
"@angular/compiler": "18.2.11",
"@angular/core": "18.2.11",
"@angular/forms": "18.2.11",
"@angular/localize": "18.2.11",
"@angular/platform-browser": "18.2.11",
"@angular/platform-browser-dynamic": "18.2.11",
"@angular/router": "18.2.11",
"@angular/animations": "19.2.9",
"@angular/common": "19.2.9",
"@angular/compiler": "19.2.9",
"@angular/core": "19.2.9",
"@angular/forms": "19.2.9",
"@angular/localize": "19.2.9",
"@angular/platform-browser": "19.2.9",
"@angular/platform-browser-dynamic": "19.2.9",
"@angular/router": "19.2.9",
"@carbon/charts-angular": "1.23.9",
"@carbon/icons": "11.63.0",
"@carbon/styles": "1.83.0",
@ -76,24 +76,24 @@
"rxjs": "6.6.3",
"simplebar-angular": "3.3.0",
"stream-browserify": "3.0.0",
"swagger-ui": "5.3.1",
"swagger-ui-dist": "5.31.0",
"timers-browserify": "2.0.12",
"tslib": "2.6.2",
"xml2js": "0.6.2",
"zone.js": "0.14.10"
},
"devDependencies": {
"@angular-devkit/build-angular": "18.2.20",
"@angular-devkit/core": "18.2.11",
"@angular-devkit/schematics": "18.2.11",
"@angular-devkit/build-angular": "19.2.9",
"@angular-devkit/core": "19.2.9",
"@angular-devkit/schematics": "19.2.9",
"@angular-eslint/builder": "18.4.0",
"@angular-eslint/eslint-plugin": "18.4.0",
"@angular-eslint/eslint-plugin-template": "18.4.0",
"@angular-eslint/schematics": "18.4.0",
"@angular-eslint/template-parser": "18.4.0",
"@angular/cli": "18.2.11",
"@angular/compiler-cli": "18.2.11",
"@angular/language-service": "18.2.11",
"@angular/cli": "19.2.9",
"@angular/compiler-cli": "19.2.9",
"@angular/language-service": "19.2.9",
"@applitools/eyes-cypress": "3.52.0",
"@compodoc/compodoc": "1.1.26",
"@cypress/browserify-preprocessor": "3.0.2",
@ -102,6 +102,7 @@
"@nx/module-federation": "20.8.1",
"@nx/webpack": "20.8.1",
"@nx/workspace": "20.8.1",
"@rspack/core": "1.4.11",
"@schematics/angular": "18.2.11",
"@types/brace-expansion": "1.1.0",
"@types/cypress": "0.1.6",
@ -110,8 +111,7 @@
"@types/jest": "29.5.4",
"@types/js-yaml": "4.0.9",
"@types/lodash": "4.14.161",
"@types/node": "18.17.12",
"@types/swagger-ui": "3.52.0",
"@types/node": "22.19.3",
"@types/validator": "13.15.10",
"@types/xml2js": "0.4.14",
"@typescript-eslint/eslint-plugin": "8.14.0",
@ -147,7 +147,7 @@
"stylelint-scss": "6.12.1",
"table": "6.8.0",
"ts-node": "10.9.2",
"typescript": "5.4.5",
"typescript": "5.8.3",
"validator": "13.15.23"
},
"cypress-cucumber-preprocessor": {

View File

@ -84,15 +84,9 @@
"glob": "**/swagger-ui.css",
"input": "node_modules/swagger-ui-dist",
"output": "."
},
{
"glob": "**/swagger-ui-bundle.js",
"input": "node_modules/swagger-ui-dist",
"output": "."
}
],
"styles": [
"node_modules/swagger-ui/dist/swagger-ui.css",
"node_modules/ngx-toastr/toastr.css",
"src/styles.scss"
],

View File

@ -5,7 +5,8 @@ import { NgbPopoverConfig, NgbTooltipConfig } from '@ng-bootstrap/ng-bootstrap';
@Component({
selector: 'cd-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
styleUrls: ['./app.component.scss'],
standalone: false
})
export class AppComponent {
constructor(popoverConfig: NgbPopoverConfig, tooltipConfig: NgbTooltipConfig) {

View File

@ -6,7 +6,8 @@ import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
@Component({
selector: 'cd-iscsi-setting',
templateUrl: './iscsi-setting.component.html',
styleUrls: ['./iscsi-setting.component.scss']
styleUrls: ['./iscsi-setting.component.scss'],
standalone: false
})
export class IscsiSettingComponent implements OnInit {
@Input()

View File

@ -3,6 +3,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'cd-iscsi-tabs',
templateUrl: './iscsi-tabs.component.html',
styleUrls: ['./iscsi-tabs.component.scss']
styleUrls: ['./iscsi-tabs.component.scss'],
standalone: false
})
export class IscsiTabsComponent {}

View File

@ -14,7 +14,8 @@ import { TreeViewService } from '~/app/shared/services/tree-view.service';
@Component({
selector: 'cd-iscsi-target-details',
templateUrl: './iscsi-target-details.component.html',
styleUrls: ['./iscsi-target-details.component.scss']
styleUrls: ['./iscsi-target-details.component.scss'],
standalone: false
})
export class IscsiTargetDetailsComponent implements OnChanges, OnInit {
@Input()

View File

@ -15,7 +15,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-iscsi-target-discovery-modal',
templateUrl: './iscsi-target-discovery-modal.component.html',
styleUrls: ['./iscsi-target-discovery-modal.component.scss']
styleUrls: ['./iscsi-target-discovery-modal.component.scss'],
standalone: false
})
export class IscsiTargetDiscoveryModalComponent implements OnInit {
discoveryForm: CdFormGroup;

View File

@ -25,7 +25,8 @@ import { IscsiTargetIqnSettingsModalComponent } from '../iscsi-target-iqn-settin
@Component({
selector: 'cd-iscsi-target-form',
templateUrl: './iscsi-target-form.component.html',
styleUrls: ['./iscsi-target-form.component.scss']
styleUrls: ['./iscsi-target-form.component.scss'],
standalone: false
})
export class IscsiTargetFormComponent extends CdForm implements OnInit {
cephIscsiConfigVersion: number;

View File

@ -11,7 +11,8 @@ import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
@Component({
selector: 'cd-iscsi-target-image-settings-modal',
templateUrl: './iscsi-target-image-settings-modal.component.html',
styleUrls: ['./iscsi-target-image-settings-modal.component.scss']
styleUrls: ['./iscsi-target-image-settings-modal.component.scss'],
standalone: false
})
export class IscsiTargetImageSettingsModalComponent implements OnInit {
image: string;

View File

@ -11,7 +11,8 @@ import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
@Component({
selector: 'cd-iscsi-target-iqn-settings-modal',
templateUrl: './iscsi-target-iqn-settings-modal.component.html',
styleUrls: ['./iscsi-target-iqn-settings-modal.component.scss']
styleUrls: ['./iscsi-target-iqn-settings-modal.component.scss'],
standalone: false
})
export class IscsiTargetIqnSettingsModalComponent implements OnInit {
target_controls: UntypedFormControl;

View File

@ -29,7 +29,8 @@ import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
selector: 'cd-iscsi-target-list',
templateUrl: './iscsi-target-list.component.html',
styleUrls: ['./iscsi-target-list.component.scss'],
providers: [TaskListService]
providers: [TaskListService],
standalone: false
})
export class IscsiTargetListComponent extends ListWithDetails implements OnInit, OnDestroy {
@ViewChild(TableComponent)

View File

@ -8,7 +8,8 @@ import { IscsiBackstorePipe } from '~/app/shared/pipes/iscsi-backstore.pipe';
@Component({
selector: 'cd-iscsi',
templateUrl: './iscsi.component.html',
styleUrls: ['./iscsi.component.scss']
styleUrls: ['./iscsi.component.scss'],
standalone: false
})
export class IscsiComponent implements OnInit {
@ViewChild('iscsiSparklineTpl', { static: true })

View File

@ -23,7 +23,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-bootstrap-create-modal',
templateUrl: './bootstrap-create-modal.component.html',
styleUrls: ['./bootstrap-create-modal.component.scss']
styleUrls: ['./bootstrap-create-modal.component.scss'],
standalone: false
})
export class BootstrapCreateModalComponent
extends BaseModal

View File

@ -16,7 +16,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-bootstrap-import-modal',
templateUrl: './bootstrap-import-modal.component.html',
styleUrls: ['./bootstrap-import-modal.component.scss']
styleUrls: ['./bootstrap-import-modal.component.scss'],
standalone: false
})
export class BootstrapImportModalComponent extends BaseModal implements OnInit, OnDestroy {
pools: any[] = [];

View File

@ -9,7 +9,8 @@ import { CephShortVersionPipe } from '~/app/shared/pipes/ceph-short-version.pipe
@Component({
selector: 'cd-mirroring-daemons',
templateUrl: './daemon-list.component.html',
styleUrls: ['./daemon-list.component.scss']
styleUrls: ['./daemon-list.component.scss'],
standalone: false
})
export class DaemonListComponent implements OnInit, OnDestroy {
@ViewChild('healthTmpl', { static: true })

View File

@ -8,7 +8,8 @@ import { TableStatusViewCache } from '~/app/shared/classes/table-status-view-cac
@Component({
selector: 'cd-mirroring-images',
templateUrl: './image-list.component.html',
styleUrls: ['./image-list.component.scss']
styleUrls: ['./image-list.component.scss'],
standalone: false
})
export class ImageListComponent implements OnInit, OnDestroy {
@ViewChild('stateTmpl', { static: true })

View File

@ -1,7 +1,8 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'mirrorHealthColor'
name: 'mirrorHealthColor',
standalone: false
})
export class MirrorHealthColorPipe implements PipeTransform {
transform(value: any): any {

View File

@ -21,7 +21,8 @@ import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
@Component({
selector: 'cd-mirroring',
templateUrl: './overview.component.html',
styleUrls: ['./overview.component.scss']
styleUrls: ['./overview.component.scss'],
standalone: false
})
export class OverviewComponent implements OnInit, OnDestroy {
rbdmirroringForm: CdFormGroup;

View File

@ -16,7 +16,8 @@ import { BaseModal } from 'carbon-components-angular';
@Component({
selector: 'cd-pool-edit-mode-modal',
templateUrl: './pool-edit-mode-modal.component.html',
styleUrls: ['./pool-edit-mode-modal.component.scss']
styleUrls: ['./pool-edit-mode-modal.component.scss'],
standalone: false
})
export class PoolEditModeModalComponent extends BaseModal implements OnInit, OnDestroy {
poolName: string;

View File

@ -12,7 +12,8 @@ import { BaseModal } from 'carbon-components-angular';
@Component({
selector: 'cd-pool-edit-peer-modal',
templateUrl: './pool-edit-peer-modal.component.html',
styleUrls: ['./pool-edit-peer-modal.component.scss']
styleUrls: ['./pool-edit-peer-modal.component.scss'],
standalone: false
})
export class PoolEditPeerModalComponent extends BaseModal implements OnInit {
editPeerForm: CdFormGroup;

View File

@ -22,7 +22,8 @@ const BASE_URL = '/block/mirroring';
@Component({
selector: 'cd-mirroring-pools',
templateUrl: './pool-list.component.html',
styleUrls: ['./pool-list.component.scss']
styleUrls: ['./pool-list.component.scss'],
standalone: false
})
export class PoolListComponent implements OnInit, OnDestroy {
@ViewChild('healthTmpl', { static: true })

View File

@ -17,7 +17,8 @@ import { CephServiceSpec } from '~/app/shared/models/service.interface';
@Component({
selector: 'cd-nvmeof-gateway-group',
templateUrl: './nvmeof-gateway-group.component.html',
styleUrls: ['./nvmeof-gateway-group.component.scss']
styleUrls: ['./nvmeof-gateway-group.component.scss'],
standalone: false
})
export class NvmeofGatewayGroupComponent implements OnInit {
@ViewChild(TableComponent, { static: true })

View File

@ -14,7 +14,8 @@ enum TABS {
@Component({
selector: 'cd-nvmeof-gateway',
templateUrl: './nvmeof-gateway.component.html',
styleUrls: ['./nvmeof-gateway.component.scss']
styleUrls: ['./nvmeof-gateway.component.scss'],
standalone: false
})
export class NvmeofGatewayComponent {
selectedTab: TABS;

View File

@ -15,7 +15,8 @@ import { InitiatorRequest, NvmeofService } from '~/app/shared/api/nvmeof.service
@Component({
selector: 'cd-nvmeof-initiators-form',
templateUrl: './nvmeof-initiators-form.component.html',
styleUrls: ['./nvmeof-initiators-form.component.scss']
styleUrls: ['./nvmeof-initiators-form.component.scss'],
standalone: false
})
export class NvmeofInitiatorsFormComponent implements OnInit {
permission: Permission;

View File

@ -18,7 +18,8 @@ const BASE_URL = 'block/nvmeof/subsystems';
@Component({
selector: 'cd-nvmeof-initiators-list',
templateUrl: './nvmeof-initiators-list.component.html',
styleUrls: ['./nvmeof-initiators-list.component.scss']
styleUrls: ['./nvmeof-initiators-list.component.scss'],
standalone: false
})
export class NvmeofInitiatorsListComponent implements OnInit {
@Input()

View File

@ -21,7 +21,8 @@ import { Host } from '~/app/shared/models/host.interface';
@Component({
selector: 'cd-nvmeof-listeners-form',
templateUrl: './nvmeof-listeners-form.component.html',
styleUrls: ['./nvmeof-listeners-form.component.scss']
styleUrls: ['./nvmeof-listeners-form.component.scss'],
standalone: false
})
export class NvmeofListenersFormComponent implements OnInit {
action: string;

View File

@ -19,7 +19,8 @@ const BASE_URL = 'block/nvmeof/subsystems';
@Component({
selector: 'cd-nvmeof-listeners-list',
templateUrl: './nvmeof-listeners-list.component.html',
styleUrls: ['./nvmeof-listeners-list.component.scss']
styleUrls: ['./nvmeof-listeners-list.component.scss'],
standalone: false
})
export class NvmeofListenersListComponent implements OnInit {
@Input()

View File

@ -26,7 +26,8 @@ import { HttpResponse } from '@angular/common/http';
@Component({
selector: 'cd-nvmeof-namespaces-form',
templateUrl: './nvmeof-namespaces-form.component.html',
styleUrls: ['./nvmeof-namespaces-form.component.scss']
styleUrls: ['./nvmeof-namespaces-form.component.scss'],
standalone: false
})
export class NvmeofNamespacesFormComponent implements OnInit {
action: string;

View File

@ -21,7 +21,8 @@ const BASE_URL = 'block/nvmeof/subsystems';
@Component({
selector: 'cd-nvmeof-namespaces-list',
templateUrl: './nvmeof-namespaces-list.component.html',
styleUrls: ['./nvmeof-namespaces-list.component.scss']
styleUrls: ['./nvmeof-namespaces-list.component.scss'],
standalone: false
})
export class NvmeofNamespacesListComponent implements OnInit {
@Input()

View File

@ -5,7 +5,8 @@ import { Permissions } from '~/app/shared/models/permissions';
@Component({
selector: 'cd-nvmeof-subsystems-details',
templateUrl: './nvmeof-subsystems-details.component.html',
styleUrls: ['./nvmeof-subsystems-details.component.scss']
styleUrls: ['./nvmeof-subsystems-details.component.scss'],
standalone: false
})
export class NvmeofSubsystemsDetailsComponent implements OnChanges {
@Input()

View File

@ -18,7 +18,8 @@ import {
@Component({
selector: 'cd-nvmeof-subsystems-form',
templateUrl: './nvmeof-subsystems-form.component.html',
styleUrls: ['./nvmeof-subsystems-form.component.scss']
styleUrls: ['./nvmeof-subsystems-form.component.scss'],
standalone: false
})
export class NvmeofSubsystemsFormComponent implements OnInit {
permission: Permission;

View File

@ -22,7 +22,8 @@ const DEFAULT_PLACEHOLDER = $localize`Enter group name`;
@Component({
selector: 'cd-nvmeof-subsystems',
templateUrl: './nvmeof-subsystems.component.html',
styleUrls: ['./nvmeof-subsystems.component.scss']
styleUrls: ['./nvmeof-subsystems.component.scss'],
standalone: false
})
export class NvmeofSubsystemsComponent extends ListWithDetails implements OnInit {
subsystems: NvmeofSubsystem[] = [];

View File

@ -17,7 +17,8 @@ import { RbdConfigurationService } from '~/app/shared/services/rbd-configuration
@Component({
selector: 'cd-rbd-configuration-form',
templateUrl: './rbd-configuration-form.component.html',
styleUrls: ['./rbd-configuration-form.component.scss']
styleUrls: ['./rbd-configuration-form.component.scss'],
standalone: false
})
export class RbdConfigurationFormComponent implements OnInit {
@Input()

View File

@ -14,7 +14,8 @@ import { RbdConfigurationService } from '~/app/shared/services/rbd-configuration
@Component({
selector: 'cd-rbd-configuration-table',
templateUrl: './rbd-configuration-list.component.html',
styleUrls: ['./rbd-configuration-list.component.scss']
styleUrls: ['./rbd-configuration-list.component.scss'],
standalone: false
})
export class RbdConfigurationListComponent implements OnInit, OnChanges {
@Input()

View File

@ -7,7 +7,8 @@ import { RbdFormModel } from '../rbd-form/rbd-form.model';
@Component({
selector: 'cd-rbd-details',
templateUrl: './rbd-details.component.html',
styleUrls: ['./rbd-details.component.scss']
styleUrls: ['./rbd-details.component.scss'],
standalone: false
})
export class RbdDetailsComponent implements OnChanges {
@Input()

View File

@ -45,7 +45,8 @@ class ExternalData {
@Component({
selector: 'cd-rbd-form',
templateUrl: './rbd-form.component.html',
styleUrls: ['./rbd-form.component.scss']
styleUrls: ['./rbd-form.component.scss'],
standalone: false
})
export class RbdFormComponent extends CdForm implements OnInit {
poolPermission: Permission;

View File

@ -42,7 +42,8 @@ const BASE_URL = 'block/rbd';
providers: [
TaskListService,
{ provide: URLBuilderService, useValue: new URLBuilderService(BASE_URL) }
]
],
standalone: false
})
export class RbdListComponent extends ListWithDetails implements OnInit {
@ViewChild(TableComponent, { static: true })

View File

@ -24,7 +24,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-rbd-namespace-form-modal',
templateUrl: './rbd-namespace-form-modal.component.html',
styleUrls: ['./rbd-namespace-form-modal.component.scss']
styleUrls: ['./rbd-namespace-form-modal.component.scss'],
standalone: false
})
export class RbdNamespaceFormModalComponent extends BaseModal implements OnInit {
poolPermission: Permission;

View File

@ -23,7 +23,8 @@ import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
selector: 'cd-rbd-namespace-list',
templateUrl: './rbd-namespace-list.component.html',
styleUrls: ['./rbd-namespace-list.component.scss'],
providers: [TaskListService]
providers: [TaskListService],
standalone: false
})
export class RbdNamespaceListComponent implements OnInit {
columns: CdTableColumn[];

View File

@ -3,6 +3,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'cd-rbd-performance',
templateUrl: './rbd-performance.component.html',
styleUrls: ['./rbd-performance.component.scss']
styleUrls: ['./rbd-performance.component.scss'],
standalone: false
})
export class RbdPerformanceComponent {}

View File

@ -17,7 +17,8 @@ import { TaskManagerService } from '~/app/shared/services/task-manager.service';
@Component({
selector: 'cd-rbd-snapshot-form-modal',
templateUrl: './rbd-snapshot-form-modal.component.html',
styleUrls: ['./rbd-snapshot-form-modal.component.scss']
styleUrls: ['./rbd-snapshot-form-modal.component.scss'],
standalone: false
})
export class RbdSnapshotFormModalComponent extends BaseModal implements OnInit {
snapshotForm: CdFormGroup;

View File

@ -44,7 +44,8 @@ import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impa
templateUrl: './rbd-snapshot-list.component.html',
styleUrls: ['./rbd-snapshot-list.component.scss'],
providers: [TaskListService],
changeDetection: ChangeDetectionStrategy.OnPush
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false
})
export class RbdSnapshotListComponent implements OnInit, OnChanges {
@Input()

View File

@ -6,7 +6,8 @@ import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
@Component({
selector: 'cd-rbd-tabs',
templateUrl: './rbd-tabs.component.html',
styleUrls: ['./rbd-tabs.component.scss']
styleUrls: ['./rbd-tabs.component.scss'],
standalone: false
})
export class RbdTabsComponent {
grafanaPermission: Permission;

View File

@ -32,7 +32,8 @@ import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
selector: 'cd-rbd-trash-list',
templateUrl: './rbd-trash-list.component.html',
styleUrls: ['./rbd-trash-list.component.scss'],
providers: [TaskListService]
providers: [TaskListService],
standalone: false
})
export class RbdTrashListComponent implements OnInit {
@ViewChild(TableComponent, { static: true })

View File

@ -16,7 +16,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-rbd-trash-move-modal',
templateUrl: './rbd-trash-move-modal.component.html',
styleUrls: ['./rbd-trash-move-modal.component.scss']
styleUrls: ['./rbd-trash-move-modal.component.scss'],
standalone: false
})
export class RbdTrashMoveModalComponent extends BaseModal implements OnInit {
imageSpec: ImageSpec;

View File

@ -16,7 +16,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-rbd-trash-purge-modal',
templateUrl: './rbd-trash-purge-modal.component.html',
styleUrls: ['./rbd-trash-purge-modal.component.scss']
styleUrls: ['./rbd-trash-purge-modal.component.scss'],
standalone: false
})
export class RbdTrashPurgeModalComponent extends BaseModal implements OnInit {
poolPermission: Permission;

View File

@ -14,7 +14,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-rbd-trash-restore-modal',
templateUrl: './rbd-trash-restore-modal.component.html',
styleUrls: ['./rbd-trash-restore-modal.component.scss']
styleUrls: ['./rbd-trash-restore-modal.component.scss'],
standalone: false
})
export class RbdTrashRestoreModalComponent extends BaseModal implements OnInit {
executingTasks: ExecutingTask[];

View File

@ -25,7 +25,8 @@ const DEBOUNCE_TIMER = 300;
@Component({
selector: 'cd-cephfs-auth-modal',
templateUrl: './cephfs-auth-modal.component.html',
styleUrls: ['./cephfs-auth-modal.component.scss']
styleUrls: ['./cephfs-auth-modal.component.scss'],
standalone: false
})
export class CephfsAuthModalComponent extends CdForm implements OnInit, AfterViewInit {
subvolumeGroup: string;

View File

@ -10,7 +10,8 @@ import { ChartTooltip } from '~/app/shared/models/chart-tooltip';
@Component({
selector: 'cd-cephfs-chart',
templateUrl: './cephfs-chart.component.html',
styleUrls: ['./cephfs-chart.component.scss']
styleUrls: ['./cephfs-chart.component.scss'],
standalone: false
})
export class CephfsChartComponent implements OnChanges, OnInit {
@ViewChild('chartCanvas', { static: true })

View File

@ -20,7 +20,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-cephfs-clients',
templateUrl: './cephfs-clients.component.html',
styleUrls: ['./cephfs-clients.component.scss']
styleUrls: ['./cephfs-clients.component.scss'],
standalone: false
})
export class CephfsClientsComponent extends BaseModal implements OnInit {
@Input()

View File

@ -5,7 +5,7 @@ import { SharedModule } from '~/app/shared/shared.module';
import { configureTestBed } from '~/testing/unit-test-helper';
import { CephfsDetailComponent } from './cephfs-detail.component';
@Component({ selector: 'cd-cephfs-chart', template: '' })
@Component({ selector: 'cd-cephfs-chart', template: '', standalone: false })
class CephfsChartStubComponent {
@Input()
mdsCounter: any;

View File

@ -7,7 +7,8 @@ import { DimlessPipe } from '~/app/shared/pipes/dimless.pipe';
@Component({
selector: 'cd-cephfs-detail',
templateUrl: './cephfs-detail.component.html',
styleUrls: ['./cephfs-detail.component.scss']
styleUrls: ['./cephfs-detail.component.scss'],
standalone: false
})
export class CephfsDetailComponent implements OnChanges, OnInit {
@ViewChild('poolUsageTpl', { static: true })

View File

@ -53,7 +53,8 @@ type TQuotaSettings = 'max_bytes' | 'max_files';
@Component({
selector: 'cd-cephfs-directories',
templateUrl: './cephfs-directories.component.html',
styleUrls: ['./cephfs-directories.component.scss']
styleUrls: ['./cephfs-directories.component.scss'],
standalone: false
})
export class CephfsDirectoriesComponent implements OnInit, OnChanges {
@ViewChild(TreeViewComponent)

View File

@ -26,7 +26,8 @@ import { Host } from '~/app/shared/models/host.interface';
@Component({
selector: 'cd-cephfs-form',
templateUrl: './cephfs-form.component.html',
styleUrls: ['./cephfs-form.component.scss']
styleUrls: ['./cephfs-form.component.scss'],
standalone: false
})
export class CephfsVolumeFormComponent extends CdForm implements OnInit {
@ViewChild('crushInfoTabs') crushInfoTabs: NgbNav;

View File

@ -16,7 +16,7 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { CephfsListComponent } from './cephfs-list.component';
import { CephfsService } from '~/app/shared/api/cephfs.service';
@Component({ selector: 'cd-cephfs-tabs', template: '' })
@Component({ selector: 'cd-cephfs-tabs', template: '', standalone: false })
class CephfsTabsStubComponent {
@Input()
selection: CdTableSelection;

View File

@ -34,7 +34,8 @@ const BASE_URL = 'cephfs/fs';
selector: 'cd-cephfs-list',
templateUrl: './cephfs-list.component.html',
styleUrls: ['./cephfs-list.component.scss'],
providers: [{ provide: URLBuilderService, useValue: new URLBuilderService(BASE_URL) }]
providers: [{ provide: URLBuilderService, useValue: new URLBuilderService(BASE_URL) }],
standalone: false
})
export class CephfsListComponent extends ListWithDetails implements OnInit {
@ViewChild('deleteTpl', { static: true })

View File

@ -6,7 +6,8 @@ import { MountData } from '~/app/shared/models/cephfs.model';
@Component({
selector: 'cd-cephfs-mount-details',
templateUrl: './cephfs-mount-details.component.html',
styleUrls: ['./cephfs-mount-details.component.scss']
styleUrls: ['./cephfs-mount-details.component.scss'],
standalone: false
})
export class CephfsMountDetailsComponent extends BaseModal implements OnInit {
@ViewChild('mountDetailsTpl', { static: true })

View File

@ -40,7 +40,8 @@ const DEBOUNCE_TIMER = 300;
@Component({
selector: 'cd-cephfs-snapshotschedule-form',
templateUrl: './cephfs-snapshotschedule-form.component.html',
styleUrls: ['./cephfs-snapshotschedule-form.component.scss']
styleUrls: ['./cephfs-snapshotschedule-form.component.scss'],
standalone: false
})
export class CephfsSnapshotscheduleFormComponent extends CdForm implements OnInit {
subvol!: string;

View File

@ -32,7 +32,8 @@ import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
@Component({
selector: 'cd-cephfs-snapshotschedule-list',
templateUrl: './cephfs-snapshotschedule-list.component.html',
styleUrls: ['./cephfs-snapshotschedule-list.component.scss']
styleUrls: ['./cephfs-snapshotschedule-list.component.scss'],
standalone: false
})
export class CephfsSnapshotscheduleListComponent
extends CdForm

View File

@ -20,7 +20,8 @@ import { Observable } from 'rxjs';
@Component({
selector: 'cd-cephfs-subvolume-form',
templateUrl: './cephfs-subvolume-form.component.html',
styleUrls: ['./cephfs-subvolume-form.component.scss']
styleUrls: ['./cephfs-subvolume-form.component.scss'],
standalone: false
})
export class CephfsSubvolumeFormComponent extends CdForm implements OnInit {
subvolumeForm: CdFormGroup;

View File

@ -25,7 +25,8 @@ import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impa
@Component({
selector: 'cd-cephfs-subvolume-group',
templateUrl: './cephfs-subvolume-group.component.html',
styleUrls: ['./cephfs-subvolume-group.component.scss']
styleUrls: ['./cephfs-subvolume-group.component.scss'],
standalone: false
})
export class CephfsSubvolumeGroupComponent implements OnInit, OnChanges {
@ViewChild('quotaUsageTpl', { static: true })

View File

@ -40,7 +40,8 @@ import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impa
@Component({
selector: 'cd-cephfs-subvolume-list',
templateUrl: './cephfs-subvolume-list.component.html',
styleUrls: ['./cephfs-subvolume-list.component.scss']
styleUrls: ['./cephfs-subvolume-list.component.scss'],
standalone: false
})
export class CephfsSubvolumeListComponent extends CdForm implements OnInit, OnChanges {
@ViewChild('quotaUsageTpl', { static: true })

View File

@ -14,7 +14,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-cephfs-subvolume-snapshots-form',
templateUrl: './cephfs-subvolume-snapshots-form.component.html',
styleUrls: ['./cephfs-subvolume-snapshots-form.component.scss']
styleUrls: ['./cephfs-subvolume-snapshots-form.component.scss'],
standalone: false
})
export class CephfsSubvolumeSnapshotsFormComponent extends CdForm implements OnInit {
subVolumeGroups: string[];

View File

@ -32,7 +32,8 @@ import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impa
@Component({
selector: 'cd-cephfs-subvolume-snapshots-list',
templateUrl: './cephfs-subvolume-snapshots-list.component.html',
styleUrls: ['./cephfs-subvolume-snapshots-list.component.scss']
styleUrls: ['./cephfs-subvolume-snapshots-list.component.scss'],
standalone: false
})
export class CephfsSubvolumeSnapshotsListComponent implements OnInit, OnChanges {
@Input() fsName: string;

View File

@ -17,7 +17,8 @@ import { OctalToHumanReadablePipe } from '~/app/shared/pipes/octal-to-human-read
@Component({
selector: 'cd-cephfs-subvolumegroup-form',
templateUrl: './cephfs-subvolumegroup-form.component.html',
styleUrls: ['./cephfs-subvolumegroup-form.component.scss']
styleUrls: ['./cephfs-subvolumegroup-form.component.scss'],
standalone: false
})
export class CephfsSubvolumegroupFormComponent extends CdForm implements OnInit {
subvolumegroupForm: CdFormGroup;

View File

@ -71,7 +71,7 @@ describe('CephfsTabsComponent', () => {
component.softRefresh();
};
@Component({ selector: 'cd-cephfs-chart', template: '' })
@Component({ selector: 'cd-cephfs-chart', template: '', standalone: false })
class CephfsChartStubComponent {
@Input()
mdsCounter: any;

View File

@ -12,7 +12,8 @@ import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
@Component({
selector: 'cd-cephfs-tabs',
templateUrl: './cephfs-tabs.component.html',
styleUrls: ['./cephfs-tabs.component.scss']
styleUrls: ['./cephfs-tabs.component.scss'],
standalone: false
})
export class CephfsTabsComponent implements OnChanges, OnDestroy {
@Input()

View File

@ -5,7 +5,8 @@ import _ from 'lodash';
@Component({
selector: 'cd-configuration-details',
templateUrl: './configuration-details.component.html',
styleUrls: ['./configuration-details.component.scss']
styleUrls: ['./configuration-details.component.scss'],
standalone: false
})
export class ConfigurationDetailsComponent implements OnChanges {
@Input()

View File

@ -131,7 +131,7 @@
[id]="section"
[placeholder]="humanReadableType"
[formControlName]="section"
[step]="getStep(type, this.configForm.getValue(section))">
[step]="getStep(type, configForm.getValue(section))">
<span class="invalid-feedback"
*ngIf="configForm.showError(section, formDir, 'pattern')">
{{ patternHelpText }}

View File

@ -21,7 +21,8 @@ const RGW = 'rgw';
@Component({
selector: 'cd-configuration-form',
templateUrl: './configuration-form.component.html',
styleUrls: ['./configuration-form.component.scss']
styleUrls: ['./configuration-form.component.scss'],
standalone: false
})
export class ConfigurationFormComponent extends CdForm implements OnInit {
configForm: CdFormGroup;

View File

@ -17,7 +17,8 @@ const RGW = 'rgw';
@Component({
selector: 'cd-configuration',
templateUrl: './configuration.component.html',
styleUrls: ['./configuration.component.scss']
styleUrls: ['./configuration.component.scss'],
standalone: false
})
export class ConfigurationComponent extends ListWithDetails implements OnInit {
permission: Permission;

View File

@ -13,7 +13,8 @@ import { WizardStepsService } from '~/app/shared/services/wizard-steps.service';
@Component({
selector: 'cd-create-cluster-review',
templateUrl: './create-cluster-review.component.html',
styleUrls: ['./create-cluster-review.component.scss']
styleUrls: ['./create-cluster-review.component.scss'],
standalone: false
})
export class CreateClusterReviewComponent implements OnInit {
hosts: object[] = [];

View File

@ -39,7 +39,8 @@ import { Step } from 'carbon-components-angular';
@Component({
selector: 'cd-create-cluster',
templateUrl: './create-cluster.component.html',
styleUrls: ['./create-cluster.component.scss']
styleUrls: ['./create-cluster.component.scss'],
standalone: false
})
export class CreateClusterComponent implements OnInit, OnDestroy, AfterViewInit {
@ViewChild('skipConfirmTpl', { static: true })

View File

@ -35,7 +35,8 @@ export interface CrushmapNode {
@Component({
selector: 'cd-crushmap',
templateUrl: './crushmap.component.html',
styleUrls: ['./crushmap.component.scss']
styleUrls: ['./crushmap.component.scss'],
standalone: false
})
export class CrushmapComponent implements OnDestroy, OnInit {
private sub = new Subscription();

View File

@ -5,7 +5,8 @@ import { Permissions } from '~/app/shared/models/permissions';
@Component({
selector: 'cd-host-details',
templateUrl: './host-details.component.html',
styleUrls: ['./host-details.component.scss']
styleUrls: ['./host-details.component.scss'],
standalone: false
})
export class HostDetailsComponent {
@Input()

View File

@ -18,7 +18,8 @@ const HOSTS = 'hosts';
@Component({
selector: 'cd-host-form',
templateUrl: './host-form.component.html',
styleUrls: ['./host-form.component.scss']
styleUrls: ['./host-form.component.scss'],
standalone: false
})
export class HostFormComponent extends CdForm implements OnInit {
open: boolean = false;

View File

@ -42,7 +42,8 @@ const BASE_URL = 'hosts';
selector: 'cd-hosts',
templateUrl: './hosts.component.html',
styleUrls: ['./hosts.component.scss'],
providers: [{ provide: URLBuilderService, useValue: new URLBuilderService(BASE_URL) }]
providers: [{ provide: URLBuilderService, useValue: new URLBuilderService(BASE_URL) }],
standalone: false
})
export class HostsComponent extends ListWithDetails implements OnDestroy, OnInit {
private sub = new Subscription();

View File

@ -34,7 +34,8 @@ import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
@Component({
selector: 'cd-inventory-devices',
templateUrl: './inventory-devices.component.html',
styleUrls: ['./inventory-devices.component.scss']
styleUrls: ['./inventory-devices.component.scss'],
standalone: false
})
export class InventoryDevicesComponent implements OnInit, OnDestroy {
@ViewChild(TableComponent, { static: true })

View File

@ -11,7 +11,8 @@ import { InventoryDevice } from './inventory-devices/inventory-device.model';
@Component({
selector: 'cd-inventory',
templateUrl: './inventory.component.html',
styleUrls: ['./inventory.component.scss']
styleUrls: ['./inventory.component.scss'],
standalone: false
})
export class InventoryComponent implements OnChanges, OnInit, OnDestroy {
// Display inventory page only for this hostname, ignore to display all.

View File

@ -12,7 +12,8 @@ import { Icons } from '~/app/shared/enum/icons.enum';
@Component({
selector: 'cd-logs',
templateUrl: './logs.component.html',
styleUrls: ['./logs.component.scss']
styleUrls: ['./logs.component.scss'],
standalone: false
})
export class LogsComponent implements OnInit, OnDestroy {
@Input()

View File

@ -5,7 +5,8 @@ import { MgrModuleService } from '~/app/shared/api/mgr-module.service';
@Component({
selector: 'cd-mgr-module-details',
templateUrl: './mgr-module-details.component.html',
styleUrls: ['./mgr-module-details.component.scss']
styleUrls: ['./mgr-module-details.component.scss'],
standalone: false
})
export class MgrModuleDetailsComponent implements OnChanges {
module_config: any;

View File

@ -17,7 +17,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-mgr-module-form',
templateUrl: './mgr-module-form.component.html',
styleUrls: ['./mgr-module-form.component.scss']
styleUrls: ['./mgr-module-form.component.scss'],
standalone: false
})
export class MgrModuleFormComponent extends CdForm implements OnInit {
mgrModuleForm: CdFormGroup;

View File

@ -15,7 +15,8 @@ import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
@Component({
selector: 'cd-mgr-module-list',
templateUrl: './mgr-module-list.component.html',
styleUrls: ['./mgr-module-list.component.scss']
styleUrls: ['./mgr-module-list.component.scss'],
standalone: false
})
export class MgrModuleListComponent extends ListWithDetails {
@ViewChild(TableComponent, { static: true })

View File

@ -8,7 +8,8 @@ import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
@Component({
selector: 'cd-monitor',
templateUrl: './monitor.component.html',
styleUrls: ['./monitor.component.scss']
styleUrls: ['./monitor.component.scss'],
standalone: false
})
export class MonitorComponent {
mon_status: any;

View File

@ -3,7 +3,8 @@ import { Component, Input } from '@angular/core';
@Component({
selector: 'cd-multi-cluster-details',
templateUrl: './multi-cluster-details.component.html',
styleUrls: ['./multi-cluster-details.component.scss']
styleUrls: ['./multi-cluster-details.component.scss'],
standalone: false
})
export class MultiClusterDetailsComponent {
@Input()

View File

@ -14,7 +14,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-multi-cluster-form',
templateUrl: './multi-cluster-form.component.html',
styleUrls: ['./multi-cluster-form.component.scss']
styleUrls: ['./multi-cluster-form.component.scss'],
standalone: false
})
export class MultiClusterFormComponent implements OnInit, OnDestroy {
@Output()

View File

@ -26,7 +26,8 @@ import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
@Component({
selector: 'cd-multi-cluster-list',
templateUrl: './multi-cluster-list.component.html',
styleUrls: ['./multi-cluster-list.component.scss']
styleUrls: ['./multi-cluster-list.component.scss'],
standalone: false
})
export class MultiClusterListComponent extends ListWithDetails implements OnInit, OnDestroy {
@ViewChild(TableComponent)

View File

@ -24,7 +24,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-multi-cluster',
templateUrl: './multi-cluster.component.html',
styleUrls: ['./multi-cluster.component.scss']
styleUrls: ['./multi-cluster.component.scss'],
standalone: false
})
export class MultiClusterComponent implements OnInit, OnDestroy {
COUNT_OF_UTILIZATION_CHARTS = 5;
@ -91,7 +92,7 @@ export class MultiClusterComponent implements OnInit, OnDestroy {
PROMETHEUS_DELAY = 20000;
LOAD_DELAY = 5000;
CLUSTERS_REFRESH_INTERVAL = 30000;
interval: NodeJS.Timer;
interval: number;
selectedTime: any;
multiClusterQueries: any = {};
managedByConfig$: Observable<any>;
@ -286,7 +287,7 @@ export class MultiClusterComponent implements OnInit, OnDestroy {
this.alerts = this.queriesResults.ALERTS;
this.getAlertsInfo();
this.getClustersInfo();
this.interval = setInterval(() => {
this.interval = window.setInterval(() => {
this.getClustersInfo();
}, this.CLUSTERS_REFRESH_INTERVAL);
});

View File

@ -13,7 +13,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@Component({
selector: 'cd-osd-creation-preview-modal',
templateUrl: './osd-creation-preview-modal.component.html',
styleUrls: ['./osd-creation-preview-modal.component.scss']
styleUrls: ['./osd-creation-preview-modal.component.scss'],
standalone: false
})
export class OsdCreationPreviewModalComponent {
@Input()

View File

@ -9,7 +9,8 @@ import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
@Component({
selector: 'cd-osd-details',
templateUrl: './osd-details.component.html',
styleUrls: ['./osd-details.component.scss']
styleUrls: ['./osd-details.component.scss'],
standalone: false
})
export class OsdDetailsComponent implements OnChanges {
@Input()

View File

@ -15,7 +15,8 @@ import { DevicesSelectionClearEvent } from './devices-selection-clear-event.inte
@Component({
selector: 'cd-osd-devices-selection-groups',
templateUrl: './osd-devices-selection-groups.component.html',
styleUrls: ['./osd-devices-selection-groups.component.scss']
styleUrls: ['./osd-devices-selection-groups.component.scss'],
standalone: false
})
export class OsdDevicesSelectionGroupsComponent implements OnInit, OnChanges {
// data, wal, db

View File

@ -22,7 +22,8 @@ import { WizardStepsService } from '~/app/shared/services/wizard-steps.service';
@Component({
selector: 'cd-osd-devices-selection-modal',
templateUrl: './osd-devices-selection-modal.component.html',
styleUrls: ['./osd-devices-selection-modal.component.scss']
styleUrls: ['./osd-devices-selection-modal.component.scss'],
standalone: false
})
export class OsdDevicesSelectionModalComponent implements AfterViewInit {
@ViewChild('inventoryDevices')

View File

@ -15,7 +15,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-osd-flags-indiv-modal',
templateUrl: './osd-flags-indiv-modal.component.html',
styleUrls: ['./osd-flags-indiv-modal.component.scss']
styleUrls: ['./osd-flags-indiv-modal.component.scss'],
standalone: false
})
export class OsdFlagsIndivModalComponent implements OnInit {
permissions: Permissions;

View File

@ -14,7 +14,8 @@ import { NotificationService } from '~/app/shared/services/notification.service'
@Component({
selector: 'cd-osd-flags-modal',
templateUrl: './osd-flags-modal.component.html',
styleUrls: ['./osd-flags-modal.component.scss']
styleUrls: ['./osd-flags-modal.component.scss'],
standalone: false
})
export class OsdFlagsModalComponent implements OnInit {
permissions: Permissions;

Some files were not shown because too many files have changed in this diff Show More