]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: add customizations to table-actions 65285/head
authorNaman Munet <naman.munet@ibm.com>
Thu, 28 Aug 2025 09:12:00 +0000 (14:42 +0530)
committerNaman Munet <naman.munet@ibm.com>
Thu, 28 Aug 2025 13:03:34 +0000 (18:33 +0530)
https://tracker.ceph.com/issues/72764

Signed-off-by: Naman Munet <naman.munet@ibm.com>
src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss
src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/datatable.module.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.html
src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.scss
src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/enum/icons.enum.ts

index 7a7fc9b01e801008c88be515fc0327d31ad0ba8d..72cebe8c03f96f8410a91449548b21f4220f43a6 100644 (file)
@@ -26,7 +26,8 @@
           <cd-table-actions [permission]="{read: true}"
                             [selection]="selection"
                             dropDownOnly="Cluster-wide configuration"
-                            btnColor="light"
+                            [dropDownOnlyOffset]="{ x: 110, y: 0 }"
+                            [dropDownOnlyBtnColor]="'tertiary'"
                             class="btn-group"
                             id="cluster-wide-actions"
                             [tableActions]="clusterWideActions">
index 1b07fb463dc057432fa47620ce6aa167ca390187..68018154d53edda321431038bda4efc151ec7f4e 100644 (file)
        routerLink="/services">
        Cluster->Services</a>
   </cd-alert-panel>
-  <cd-table-actions class="btn-group mb-4 me-2"
-                    [permission]="permissions.rgw"
-                    [selection]="selection"
-                    [tableActions]="multisiteReplicationActions">
-  </cd-table-actions>
-  <cd-table-actions *ngIf="showMigrateAndReplicationActions"
-                    class="btn-group mb-4 me-2 secondary"
-                    [permission]="permissions.rgw"
-                    [btnColor]="'light'"
-                    [selection]="selection"
-                    [tableActions]="migrateTableAction">
-  </cd-table-actions>
-  <cd-table-actions *ngIf="!showMigrateAndReplicationActions"
-                    class="btn-group mb-4 me-2"
-                    [permission]="permissions.rgw"
-                    [selection]="selection"
-                    [tableActions]="createTableActions"
-                    [primaryDropDown]="true">
-  </cd-table-actions>
-  <cd-table-actions class="btn-group mb-4 me-2"
-                    [permission]="permissions.rgw"
-                    [btnColor]="'light'"
-                    [selection]="selection"
-                    [tableActions]="importAction">
-  </cd-table-actions>
-  <cd-table-actions class="btn-group mb-4 me-2"
-                    [permission]="permissions.rgw"
-                    [btnColor]="'light'"
-                    [selection]="selection"
-                    [tableActions]="exportAction">
-  </cd-table-actions>
+  <div [cdsStack]="'horizontal'"
+       [gap]="4">
+    <cd-table-actions [permission]="permissions.rgw"
+                      [selection]="selection"
+                      [tableActions]="multisiteReplicationActions">
+    </cd-table-actions>
+    <cd-table-actions *ngIf="showMigrateAndReplicationActions"
+                      [permission]="permissions.rgw"
+                      [selection]="selection"
+                      [tableActions]="migrateTableAction">
+    </cd-table-actions>
+    <cd-table-actions [permission]="permissions.rgw"
+                      [selection]="selection"
+                      [tableActions]="createTableActions"
+                      dropDownOnly="Actions"
+                      [dropDownOnlyBtnColor]="'tertiary'"
+                      [dropDownOnlyOffset]="{ x: 45, y: 0 }">
+    </cd-table-actions>
+  </div>
 </div>
 <div class="card">
   <div class="card-header"
index 3223ba9d4a756cea690e1c1ec961416131d1209d..7037c2469f619da8fe77faa150b7fc23d9dc0a05 100644 (file)
@@ -17,3 +17,9 @@
   padding-block: 0.5rem;
   width: 100%;
 }
+
+::ng-deep cds-overflow-menu .cds--btn--icon-only {
+  position: relative;
+  top: 4px;
+  width: auto;
+}
index 27838042e1b24cfcdf6674ec3a9746d468b3e339..543dbd7408197273e14aeea52d8ca21512d31010 100644 (file)
@@ -68,8 +68,6 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit {
   selection = new CdTableSelection();
   createTableActions: CdTableAction[];
   migrateTableAction: CdTableAction[];
-  importAction: CdTableAction[];
-  exportAction: CdTableAction[];
   multisiteReplicationActions: CdTableAction[];
   loadingIndicator = true;
 
@@ -236,40 +234,31 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit {
         permission: 'create',
         icon: Icons.add,
         name: this.actionLabels.CREATE + ' Realm',
-        click: () => this.openModal('realm')
+        click: () => this.openModal('realm'),
+        visible: () => !this.showMigrateAndReplicationActions
       },
       {
         permission: 'create',
         icon: Icons.add,
         name: this.actionLabels.CREATE + ' Zone Group',
         click: () => this.openModal('zonegroup'),
-        disable: () => this.getDisable()
+        disable: () => this.getDisable(),
+        visible: () => !this.showMigrateAndReplicationActions
       },
       {
         permission: 'create',
         icon: Icons.add,
         name: this.actionLabels.CREATE + ' Zone',
-        click: () => this.openModal('zone')
-      }
-    ];
-    this.migrateTableAction = [
-      {
-        permission: 'create',
-        icon: Icons.wrench,
-        name: this.actionLabels.MIGRATE,
-        click: () => this.openMigrateModal()
-      }
-    ];
-    this.importAction = [
+        click: () => this.openModal('zone'),
+        visible: () => !this.showMigrateAndReplicationActions
+      },
       {
         permission: 'create',
         icon: Icons.download,
         name: this.actionLabels.IMPORT,
         click: () => this.openImportModal(),
         disable: () => this.getDisableImport()
-      }
-    ];
-    this.exportAction = [
+      },
       {
         permission: 'create',
         icon: Icons.upload,
@@ -278,6 +267,14 @@ export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit {
         disable: () => this.getDisableExport()
       }
     ];
+    this.migrateTableAction = [
+      {
+        permission: 'create',
+        icon: Icons.wrench,
+        name: this.actionLabels.MIGRATE,
+        click: () => this.openMigrateModal()
+      }
+    ];
     this.multisiteReplicationActions = [
       {
         permission: 'create',
index c29fed2f350049da6c12dc07539b1ef1a8fc6f1f..072c66220f020908349d32eb1c3bfb6f9a082551 100644 (file)
@@ -25,6 +25,7 @@ import CheckIcon from '@carbon/icons/es/checkmark/16';
 import CloseIcon from '@carbon/icons/es/close/16';
 import MaximizeIcon from '@carbon/icons/es/maximize/16';
 import ArrowDown from '@carbon/icons/es/caret--down/16';
+import ChevronDwon from '@carbon/icons/es/chevron--down/16';
 
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { FormlyModule } from '@ngx-formly/core';
@@ -136,7 +137,8 @@ export class DataTableModule {
       CheckIcon,
       CloseIcon,
       MaximizeIcon,
-      ArrowDown
+      ArrowDown,
+      ChevronDwon
     ]);
   }
 }
index 0e3f73a0c3e5f4d45ec36563cfb17dbfc555c347..a4e9f0c22b69a97583fcefbbbeca99d286b98299 100644 (file)
@@ -21,8 +21,7 @@
             [cdsOverflowMenu]="overflowMenuTpl"
             data-testid="table-action-btn">
       <svg
-           [cdsIcon]="icons.downArrow"
-           [size]="icons.size16"></svg>
+           [cdsIcon]="icons.chevronDown"></svg>
     </button>
     <ng-template #overflowMenuTpl>
       <ng-container *ngFor="let action of dropDownActions">
   <button [cdsButton]="currentAction.buttonKind"
           class="caret-btn">
     <svg class="cds--btn__icon"
-         cdsIcon="caret--down"
-         size="16"></svg>
+         [cdsIcon]="icons.chevronDown"></svg>
   </button>
 </ng-template>
 
 <ng-template #dropDownOnlyTpl>
   <cds-overflow-menu [customTrigger]="customTrigger"
                      [flip]="true"
-                     [offset]="{ x: 105, y: 0 }"
+                     [offset]="dropDownOnlyOffset"
                      data-testid="table-action-btn"
                      class="d-flex justify-content-end">
     <ng-container *ngFor="let action of dropDownActions">
 </ng-template>
 
 <ng-template #customTrigger>
-  <button cdsButton="tertiary">
+  <button [cdsButton]="dropDownOnlyBtnColor">
     <span i18n>{{ dropDownOnly }}</span>
-    <svg class="cds--btn__icon"
-         cdsIcon="caret--down"
-         size="16"></svg>
+    <svg class="override-position-static cds--btn__icon"
+         [cdsIcon]="icons.chevronDown"></svg>
   </button>
 </ng-template>
index 6b0a82d130fcff162d73413641a9e5fba27d2d98..65fd93ec0c1b6c9058d4f44d2f165b33940bcc24 100644 (file)
@@ -32,3 +32,13 @@ button.dropdown-item:hover {
   justify-content: center;
   width: 3rem;
 }
+
+// https://github.com/carbon-design-system/carbon-components-angular/blob/v5.56.2/src/dialog/overflow-menu/overflow-menu.component.ts#52
+// Its always applying .cds--btn--icon-only which is making position static and svg color fill to var(--cds-icon-primary, #f8f9fa)
+.override-position-static.cds--btn__icon {
+  position: absolute;
+}
+
+.cds--overflow-menu-options__option {
+  min-width: fit-content;
+}
index 51120f623f20980964c5ee6d68cf99218dd778f4..3e6ac0f7050d3bd5bb157e7161d7967e4e959c18 100644 (file)
@@ -20,8 +20,9 @@ export class TableActionsComponent implements OnChanges, OnInit {
   @Input()
   tableActions: CdTableAction[];
   @Input()
-  btnColor = 'accent';
-
+  dropDownOnlyBtnColor = 'primary';
+  @Input()
+  dropDownOnlyOffset = { x: 105, y: 0 };
   // Use this if you just want to display a drop down button,
   // labeled with the given text, with all actions in it.
   // This disables the main action button.
index 73d2acd39524cb98637342d6ec12af357fc639d0..c6656ff89cabb1fb22addc86bc0e5e3ab16727af 100644 (file)
@@ -85,6 +85,7 @@ export enum Icons {
   dataTable = 'data-table',
   idea = 'idea',
   userAccessLocked = 'user--access-locked', // User access locked
+  chevronDown = 'chevron--down',
   /* Icons for special effect */
   size16 = '16',
   size20 = '20',