]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/dashboard: add customizations to table-actions
authorNaman Munet <naman.munet@ibm.com>
Thu, 28 Aug 2025 09:12:00 +0000 (14:42 +0530)
committerNaman Munet <naman.munet@ibm.com>
Fri, 17 Oct 2025 08:57:07 +0000 (14:27 +0530)
Fixes: https://tracker.ceph.com/issues/72764
Signed-off-by: Naman Munet <naman.munet@ibm.com>
(cherry picked from commit dd06c75e3fe429be496f886aac54831dd7685e5e)

 Conflicts:
src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.html

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 b47d9230fb69b90cd891194fd021dba084fa13ad..53f4910dededb70fa593ca312ad9e5ba179b1eb6 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 41318cbc8989419a89c7a7114ce75ede66678a56..a4e9f0c22b69a97583fcefbbbeca99d286b98299 100644 (file)
@@ -20,9 +20,8 @@
             [offset]="{ x: -210, y: 65 }"
             [cdsOverflowMenu]="overflowMenuTpl"
             data-testid="table-action-btn">
-      <svg class="cds--btn__icon"
-           cdsIcon="caret--down"
-           size="16"></svg>
+      <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 8d88056d0dbb46375a762d0fb3780e96e2452ab3..2da51d986f2b233dbdc72ec76ad396a485856c73 100644 (file)
@@ -86,6 +86,7 @@ export enum Icons {
   externalUrl = 'fa fa-external-link', // links to external page
   nfsExport = 'fa fa-server', // NFS export
   userAccessLocked = 'user--access-locked', // User access locked
+  chevronDown = 'chevron--down',
   /* Icons for special effect */
   large = 'fa fa-lg', // icon becomes 33% larger
   large2x = 'fa fa-2x', // icon becomes 50% larger