From ca4759b8f48fc62ff61fd290657586abd75c293c Mon Sep 17 00:00:00 2001 From: Naman Munet Date: Wed, 17 Jul 2024 15:34:55 +0530 Subject: [PATCH] mgr/dashboard: rgw sync policy routing fixes Fixes: https://tracker.ceph.com/issues/66977 Signed-off-by: Naman Munet --- .../cypress/e2e/rgw/multisite.e2e.spec.ts | 25 +- .../frontend/cypress/e2e/rgw/multisite.po.ts | 19 +- .../rgw-multisite-details.component.html | 259 ++++++++---------- .../rgw-multisite-details.component.ts | 26 +- ...w-multisite-sync-flow-modal.component.html | 123 ++++----- ...rgw-multisite-sync-flow-modal.component.ts | 1 + ...w-multisite-sync-pipe-modal.component.html | 165 +++++------ ...rgw-multisite-sync-pipe-modal.component.ts | 1 + ...-multisite-sync-policy-form.component.html | 50 ++-- ...gw-multisite-sync-policy-form.component.ts | 22 +- .../rgw-multisite-sync-policy.component.html | 4 + .../rgw-multisite-sync-policy.component.ts | 35 +-- .../rgw-multisite-tabs.component.html | 16 ++ .../rgw-multisite-tabs.component.scss | 0 .../rgw-multisite-tabs.component.spec.ts | 22 ++ .../rgw-multisite-tabs.component.ts | 8 + .../rgw-multisite-wizard.component.ts | 2 +- .../frontend/src/app/ceph/rgw/rgw.module.ts | 51 ++-- 18 files changed, 410 insertions(+), 419 deletions(-) create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-tabs/rgw-multisite-tabs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-tabs/rgw-multisite-tabs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-tabs/rgw-multisite-tabs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-tabs/rgw-multisite-tabs.component.ts diff --git a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts index a0306f126b321..9110f723d5dc3 100644 --- a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts @@ -5,20 +5,12 @@ describe('Multisite page', () => { beforeEach(() => { cy.login(); - multisite.navigateTo(); }); - describe('tabs and table tests', () => { - it('should show two tabs', () => { - multisite.getTabsCount().should('eq', 2); - }); - - it('should show Configuration tab as a first tab', () => { - multisite.getTabText(0).should('eq', 'Configuration'); - }); - - it('should show sync policy tab as a second tab', () => { - multisite.getTabText(1).should('eq', 'Sync Policy'); + describe('table tests', () => { + it('should show table on sync-policy page', () => { + multisite.navigateTo(); + multisite.tableExist(); }); }); @@ -30,11 +22,12 @@ describe('Multisite page', () => { }); it('should edit policy status', () => { + multisite.navigateTo(); multisite.edit('test', 'Forbidden'); }); it('should delete policy', () => { - multisite.getTab('Sync Policy').click(); + multisite.navigateTo(); multisite.delete('test'); }); }); @@ -47,7 +40,7 @@ describe('Multisite page', () => { }); describe('symmetrical Flow creation started', () => { beforeEach(() => { - multisite.getTab('Sync Policy').click(); + multisite.navigateTo(); multisite.getExpandCollapseElement().click(); }); @@ -67,7 +60,7 @@ describe('Multisite page', () => { describe('create, edit & delete directional sync Flow', () => { beforeEach(() => { - multisite.getTab('Sync Policy').click(); + multisite.navigateTo(); multisite.getExpandCollapseElement().click(); }); @@ -82,7 +75,7 @@ describe('Multisite page', () => { describe('create, edit, delete pipe', () => { beforeEach(() => { - multisite.getTab('Sync Policy').click(); + multisite.navigateTo(); multisite.getExpandCollapseElement().click(); }); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts index 11a43a7b8b30b..ffcae7197aaf8 100644 --- a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts +++ b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts @@ -2,9 +2,12 @@ import { PageHelper } from '../page-helper.po'; const WAIT_TIMER = 1000; const pages = { - index: { url: '#/rgw/multisite', id: 'cd-rgw-multisite-details' }, - create: { url: '#/rgw/multisite/sync-policy/create', id: 'cd-rgw-multisite-sync-policy-form' }, - edit: { url: '#/rgw/multisite/sync-policy/edit', id: 'cd-rgw-multisite-sync-policy-form' } + index: { url: '#/rgw/multisite/sync-policy', id: 'cd-rgw-multisite-sync-policy' }, + create: { + url: '#/rgw/multisite/sync-policy/(modal:create)', + id: 'cd-rgw-multisite-sync-policy-form' + }, + edit: { url: '#/rgw/multisite/sync-policy/(modal:edit', id: 'cd-rgw-multisite-sync-policy-form' } }; export class MultisitePageHelper extends PageHelper { pages = pages; @@ -13,6 +16,11 @@ export class MultisitePageHelper extends PageHelper { status: 4 }; + tableExist() { + cy.get('cd-rgw-multisite-sync-policy cd-table').should('exist'); + cy.get('cd-rgw-multisite-sync-policy cd-table-actions').should('exist'); + } + @PageHelper.restrictTo(pages.create.url) create(group_id: string, status: string) { // Enter in group_id @@ -28,7 +36,7 @@ export class MultisitePageHelper extends PageHelper { @PageHelper.restrictTo(pages.index.url) edit(group_id: string, status: string) { - cy.visit(`${pages.edit.url}/${group_id}`); + cy.visit(`${pages.edit.url}/${group_id})`); // Change the status field this.selectOption('status', status); @@ -42,9 +50,6 @@ export class MultisitePageHelper extends PageHelper { @PageHelper.restrictTo(pages.index.url) createSymmetricalFlow(flow_id: string, zones: string[]) { - cy.get('cd-rgw-multisite-sync-policy-details').should('exist'); - this.getTab('Flow').should('exist'); - this.getTab('Flow').click(); cy.request({ method: 'GET', url: '/api/rgw/daemon', diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html index 0acf38b345348..5890ea45bdc6d 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html @@ -1,144 +1,125 @@ - + + + -
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts index 1c7ab210d6b5d..ad39b0ebae743 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts @@ -6,7 +6,7 @@ import { TreeNode, TREE_ACTIONS } from '@circlon/angular-tree-component'; -import { NgbActiveModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import _ from 'lodash'; import { forkJoin, Subscription, timer as observableTimer } from 'rxjs'; @@ -38,8 +38,9 @@ import { MgrModuleService } from '~/app/shared/api/mgr-module.service'; import { BlockUI, NgBlockUI } from 'ng-block-ui'; import { Router } from '@angular/router'; import { RgwMultisiteWizardComponent } from '../rgw-multisite-wizard/rgw-multisite-wizard.component'; +import { RgwMultisiteSyncPolicyComponent } from '../rgw-multisite-sync-policy/rgw-multisite-sync-policy.component'; -const BASE_URL = 'rgw/multisite'; +const BASE_URL = 'rgw/multisite/configuration'; @Component({ selector: 'cd-rgw-multisite-details', @@ -50,6 +51,7 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit { private sub = new Subscription(); @ViewChild('tree') tree: TreeComponent; + @ViewChild(RgwMultisiteSyncPolicyComponent) syncPolicyComp: RgwMultisiteSyncPolicyComponent; messages = { noDefaultRealm: $localize`Please create a default realm first to enable this feature`, @@ -106,7 +108,6 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit { activeId: string; constructor( - public activeModal: NgbActiveModal, private modalService: ModalService, private timerService: TimerService, private authStorageService: AuthStorageService, @@ -121,10 +122,6 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit { private notificationService: NotificationService ) { this.permission = this.authStorageService.getPermissions().rgw; - const activeId = this.router.getCurrentNavigation()?.extras?.state?.activeId; - if (activeId) { - this.activeId = activeId; - } } openModal(entity: any, edit = false) { @@ -617,19 +614,4 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit { } ); } - - onNavChange(event: any) { - if (event.nextId == 'configuration') { - this.metadata = null; - /* - It is a known issue with angular2-tree package when tree is hidden (for example inside tab or modal), - it is not rendered when it becomes visible. Solution is to call this.tree.sizeChanged() which recalculates - the rendered nodes according to the actual viewport size. (https://angular2-tree.readme.io/docs/common-issues) - */ - setTimeout(() => { - this.tree.sizeChanged(); - this.onUpdateData(); - }, 200); - } - } } diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-flow-modal/rgw-multisite-sync-flow-modal.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-flow-modal/rgw-multisite-sync-flow-modal.component.html index 974474c593878..b7f614ef16b6f 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-flow-modal/rgw-multisite-sync-flow-modal.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-flow-modal/rgw-multisite-sync-flow-modal.component.html @@ -1,29 +1,24 @@ - {{ action | titlecase }} {{ groupType | upperFirst }} Flow + {{ action | titlecase }} {{ groupType | upperFirst }} Flow -
+