Skip to content

Commit d0979e9

Browse files
committed
mgr/dashboard: Add advanced fieldset component
Fixes https://tracker.ceph.com/issues/65024 - adds a new shared component for displaying advanced fields in /shared - utilizes that component in bucket form - placement targets are under advanced fieldset - minor help text changes in object locking help text - updated e2e tests Signed-off-by: Afreen <[email protected]>
1 parent bc2aba4 commit d0979e9

File tree

9 files changed

+117
-42
lines changed

9 files changed

+117
-42
lines changed

src/pybind/mgr/dashboard/frontend/cypress/e2e/orchestrator/workflow/10-nfs-exports.e2e-spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ describe('nfsExport page', () => {
4141

4242
it('should create a nfs-export with RGW backend', () => {
4343
buckets.navigateTo('create');
44-
buckets.create(bucketName, 'dashboard', 'default-placement');
44+
buckets.create(bucketName, 'dashboard');
4545

4646
nfsExport.navigateTo();
4747
nfsExport.existTableCell(rgwPseudo, false);

src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/buckets.e2e-spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('RGW buckets page', () => {
1818
describe('create, edit & delete bucket tests', () => {
1919
it('should create bucket', () => {
2020
buckets.navigateTo('create');
21-
buckets.create(bucket_name, BucketsPageHelper.USERS[0], 'default-placement');
21+
buckets.create(bucket_name, BucketsPageHelper.USERS[0]);
2222
buckets.getFirstTableCell(bucket_name).should('exist');
2323
});
2424

@@ -38,7 +38,7 @@ describe('RGW buckets page', () => {
3838

3939
it('should create bucket with object locking enabled', () => {
4040
buckets.navigateTo('create');
41-
buckets.create(bucket_name, BucketsPageHelper.USERS[0], 'default-placement', true);
41+
buckets.create(bucket_name, BucketsPageHelper.USERS[0], true);
4242
buckets.getFirstTableCell(bucket_name).should('exist');
4343
});
4444

@@ -57,7 +57,7 @@ describe('RGW buckets page', () => {
5757

5858
it('should test invalid input in edit owner field', () => {
5959
buckets.navigateTo('create');
60-
buckets.create(bucket_name, BucketsPageHelper.USERS[0], 'default-placement');
60+
buckets.create(bucket_name, BucketsPageHelper.USERS[0]);
6161
buckets.testInvalidEdit(bucket_name);
6262
buckets.navigateTo();
6363
buckets.delete(bucket_name);

src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/buckets.po.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,19 @@ export class BucketsPageHelper extends PageHelper {
2222
return this.selectOption('owner', owner);
2323
}
2424

25-
private selectPlacementTarget(placementTarget: string) {
26-
return this.selectOption('placement-target', placementTarget);
27-
}
28-
2925
private selectLockMode(lockMode: string) {
3026
return this.selectOption('lock_mode', lockMode);
3127
}
3228

3329
@PageHelper.restrictTo(pages.create.url)
34-
create(name: string, owner: string, placementTarget: string, isLocking = false) {
30+
create(name: string, owner: string, isLocking = false) {
3531
// Enter in bucket name
3632
cy.get('#bid').type(name);
3733

3834
// Select bucket owner
3935
this.selectOwner(owner);
4036
cy.get('#owner').should('have.class', 'ng-valid');
4137

42-
// Select bucket placement target:
43-
this.selectPlacementTarget(placementTarget);
44-
4538
if (isLocking) {
4639
cy.get('#lock_enabled').click({ force: true });
4740
// Select lock mode:
@@ -71,6 +64,7 @@ export class BucketsPageHelper extends PageHelper {
7164

7265
// Placement target is not allowed to be edited and should be hidden
7366
cy.get('input[name=placement-target]').should('not.exist');
67+
7468
this.selectOwner(new_owner);
7569

7670
// If object locking is enabled versioning shouldn't be visible

src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.html

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -94,34 +94,6 @@
9494
</div>
9595
</div>
9696

97-
<!-- Placement target -->
98-
<div class="form-group row"
99-
*ngIf="!editing">
100-
<label class="cd-col-form-label"
101-
for="placement-target"
102-
i18n>Placement target</label>
103-
<div class="cd-col-form-input">
104-
<select id="placement-target"
105-
name="placement-target"
106-
formControlName="placement-target"
107-
class="form-select">
108-
<option i18n
109-
*ngIf="placementTargets === null"
110-
[ngValue]="null">Loading...</option>
111-
<option i18n
112-
*ngIf="placementTargets !== null"
113-
[ngValue]="null">-- Select a placement target --</option>
114-
<option *ngFor="let placementTarget of placementTargets"
115-
[value]="placementTarget.name">{{ placementTarget.description }}</option>
116-
</select>
117-
<cd-help-text>
118-
<span i18n>
119-
When creating a bucket, a placement target can be provided as part of the LocationConstraint to override the default placement targets from the user and zonegroup.
120-
</span>
121-
</cd-help-text>
122-
</div>
123-
</div>
124-
12597
<!-- Versioning -->
12698
<fieldset *ngIf="editing">
12799
<legend class="cd-header"
@@ -547,6 +519,36 @@
547519
</div>
548520
</div>
549521
</fieldset>
522+
523+
<!--Advanced-->
524+
<cd-form-advanced-fieldset *ngIf="!editing">
525+
<!-- Placement target -->
526+
<div class="form-group row">
527+
<label class="cd-col-form-label"
528+
for="placement-target"
529+
i18n>Placement target</label>
530+
<div class="cd-col-form-input">
531+
<select id="placement-target"
532+
name="placement-target"
533+
formControlName="placement-target"
534+
class="form-select">
535+
<option i18n
536+
*ngIf="placementTargets === null"
537+
[ngValue]="null">Loading...</option>
538+
<option i18n
539+
*ngIf="placementTargets !== null"
540+
[ngValue]="null">-- Select a placement target --</option>
541+
<option *ngFor="let placementTarget of placementTargets"
542+
[value]="placementTarget.name">{{ placementTarget.description }}</option>
543+
</select>
544+
<cd-help-text>
545+
<span i18n>
546+
When creating a bucket, a placement target can be provided as part of the LocationConstraint to override the default placement targets from the user and zonegroup.
547+
</span>
548+
</cd-help-text>
549+
</div>
550+
</div>
551+
</cd-form-advanced-fieldset>
550552
</div>
551553

552554
<div class="card-footer">

src/pybind/mgr/dashboard/frontend/src/app/shared/components/components.module.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import { CodeBlockComponent } from './code-block/code-block.component';
5555
import { VerticalNavigationComponent } from './vertical-navigation/vertical-navigation.component';
5656
import { CardGroupComponent } from './card-group/card-group.component';
5757
import { HelpTextComponent } from './help-text/help-text.component';
58+
import { FormAdvancedFieldsetComponent } from './form-advanced-fieldset/form-advanced-fieldset.component';
5859

5960
@NgModule({
6061
imports: [
@@ -113,7 +114,8 @@ import { HelpTextComponent } from './help-text/help-text.component';
113114
CodeBlockComponent,
114115
VerticalNavigationComponent,
115116
CardGroupComponent,
116-
HelpTextComponent
117+
HelpTextComponent,
118+
FormAdvancedFieldsetComponent
117119
],
118120
providers: [],
119121
exports: [
@@ -149,7 +151,8 @@ import { HelpTextComponent } from './help-text/help-text.component';
149151
CodeBlockComponent,
150152
VerticalNavigationComponent,
151153
CardGroupComponent,
152-
HelpTextComponent
154+
HelpTextComponent,
155+
FormAdvancedFieldsetComponent
153156
]
154157
})
155158
export class ComponentsModule {}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<fieldset>
2+
<legend class="cd-header">
3+
<div class="accordion accordion-flush">
4+
<button class="accordion-button cd-form-advanced-fieldset-buttton p-0"
5+
type="button"
6+
id="advanced-fieldset"
7+
aria-label="toggle advanced mode"
8+
[ngClass]="{collapsed: !showAdvanced}"
9+
(click)="showAdvanced = !showAdvanced"
10+
i18n>Advanced
11+
</button>
12+
</div>
13+
</legend>
14+
<div class="accordion-collapse collapse"
15+
[ngClass]="{show: showAdvanced}">
16+
<div class="accordion-body">
17+
<div class="card-body">
18+
<ng-content></ng-content>
19+
</div>
20+
</div>
21+
</div>
22+
</fieldset>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
Overrides the active and focus states of bootstrap accordion,
3+
in order to align the accordion css with rest of the form.
4+
5+
Summary of overrides:
6+
- font-size was 1 rem
7+
- color was blue when higlighted
8+
- border,outlines and box-shadow were set
9+
- accordion down button in active form was a blue svg icon
10+
11+
*/
12+
.cd-form-advanced-fieldset-buttton {
13+
--bs-accordion-btn-active-icon: var(--bs-accordion-btn-icon);
14+
background-color: inherit;
15+
border: hidden;
16+
border-color: inherit;
17+
box-shadow: none;
18+
color: inherit;
19+
font-size: inherit;
20+
outline: 0;
21+
text-decoration: none;
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { FormAdvancedFieldsetComponent } from './form-advanced-fieldset.component';
4+
5+
describe('FormAdvancedFieldsetComponent', () => {
6+
let component: FormAdvancedFieldsetComponent;
7+
let fixture: ComponentFixture<FormAdvancedFieldsetComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
declarations: [FormAdvancedFieldsetComponent]
12+
}).compileComponents();
13+
14+
fixture = TestBed.createComponent(FormAdvancedFieldsetComponent);
15+
component = fixture.componentInstance;
16+
fixture.detectChanges();
17+
});
18+
19+
it('should create', () => {
20+
expect(component).toBeTruthy();
21+
});
22+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Component } from '@angular/core';
2+
3+
@Component({
4+
selector: 'cd-form-advanced-fieldset',
5+
templateUrl: './form-advanced-fieldset.component.html',
6+
styleUrls: ['./form-advanced-fieldset.component.scss']
7+
})
8+
export class FormAdvancedFieldsetComponent {
9+
showAdvanced: boolean = false;
10+
}

0 commit comments

Comments
 (0)