This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new c25264bada3 UI Fixes: allow filtering on alertype in UI & add events 
tab (#8630)
c25264bada3 is described below

commit c25264bada3b84118b4b20720426625bf6e4b1c0
Author: Vishesh <vishes...@gmail.com>
AuthorDate: Thu Apr 4 17:21:56 2024 +0530

    UI Fixes: allow filtering on alertype in UI & add events tab (#8630)
---
 .../org/apache/cloudstack/alert/AlertService.java  |  4 ++
 .../admin/acl/project/CreateProjectRoleCmd.java    | 10 ++++
 .../project/CreateProjectRolePermissionCmd.java    | 11 ++++
 .../admin/acl/project/DeleteProjectRoleCmd.java    | 11 ++++
 .../project/DeleteProjectRolePermissionCmd.java    | 11 ++++
 .../admin/acl/project/UpdateProjectRoleCmd.java    | 11 ++++
 .../project/UpdateProjectRolePermissionCmd.java    | 11 ++++
 .../ChangeOutOfBandManagementPasswordCmd.java      | 11 ++++
 .../ConfigureOutOfBandManagementCmd.java           | 11 ++++
 .../DisableOutOfBandManagementForClusterCmd.java   | 11 ++++
 .../DisableOutOfBandManagementForHostCmd.java      | 11 ++++
 .../DisableOutOfBandManagementForZoneCmd.java      | 11 ++++
 .../EnableOutOfBandManagementForClusterCmd.java    | 11 ++++
 .../EnableOutOfBandManagementForHostCmd.java       | 11 ++++
 .../EnableOutOfBandManagementForZoneCmd.java       | 11 ++++
 .../IssueOutOfBandManagementPowerActionCmd.java    |  5 ++
 .../command/admin/resource/ListAlertTypesCmd.java  | 54 +++++++++++++++++++
 .../user/vmsnapshot/CreateVMSnapshotCmd.java       |  6 +++
 .../cloudstack/api/response/AlertTypeResponse.java | 55 ++++++++++++++++++++
 .../com/cloud/server/ManagementServerImpl.java     |  2 +
 ui/src/components/view/SearchView.vue              | 44 +++++++++++++++-
 ui/src/config/section/compute.js                   | 18 +++++++
 ui/src/config/section/infra.js                     |  1 +
 ui/src/config/section/infra/hosts.js               |  5 ++
 ui/src/config/section/infra/ilbvms.js              | 11 ++++
 ui/src/config/section/network.js                   | 11 ++++
 ui/src/config/section/offering.js                  | 60 ++++++++++++++++++++++
 ui/src/config/section/role.js                      |  7 +++
 ui/src/config/section/user.js                      |  2 +-
 ui/src/views/network/PublicIpResource.vue          | 12 +++++
 30 files changed, 448 insertions(+), 2 deletions(-)

diff --git a/api/src/main/java/org/apache/cloudstack/alert/AlertService.java 
b/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
index 50e48526d26..1250284b5c2 100644
--- a/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
+++ b/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
@@ -91,6 +91,10 @@ public interface AlertService {
             return null;
         }
 
+        public static Set<AlertType> getAlertTypes() {
+            return defaultAlertTypes;
+        }
+
         @Override
         public String toString() {
             return String.valueOf(this.getType());
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
index c03e6112ea7..ed17a876b24 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
@@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.admin.acl.project;
 import org.apache.cloudstack.acl.ProjectRole;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -70,4 +71,13 @@ public class CreateProjectRoleCmd extends ProjectRoleCmd {
         return Account.ACCOUNT_ID_SYSTEM;
     }
 
+    @Override
+    public Long getApiResourceId() {
+        return getProjectId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Project;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
index 9b6c2e633fc..d39c2312aa9 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
@@ -22,6 +22,7 @@ import org.apache.cloudstack.acl.ProjectRolePermission;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.Parameter;
@@ -96,4 +97,14 @@ public class CreateProjectRolePermissionCmd extends 
BaseRolePermissionCmd {
         response.setObjectName("projectrolepermission");
         setResponseObject(response);
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getProjectId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Project;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
index 4bb460c63f7..9f8d8248958 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
@@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.ProjectRole;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -79,4 +80,14 @@ public class DeleteProjectRoleCmd extends BaseCmd {
     public long getEntityOwnerId() {
         return CallContext.current().getCallingAccountId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getProjectId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Project;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
index 8b83253c869..ac68278535e 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
@@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.ProjectRolePermission;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -80,4 +81,14 @@ public class DeleteProjectRolePermissionCmd extends BaseCmd {
     public long getEntityOwnerId() {
         return CallContext.current().getCallingAccountId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getProjectId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Project;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
index 202daa3d49c..3bc8b3d6186 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
@@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.ProjectRole;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -76,4 +77,14 @@ public class UpdateProjectRoleCmd extends ProjectRoleCmd {
     public long getEntityOwnerId() {
         return 0;
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getProjectId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Project;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
index d27235e5aae..dd59310c66a 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
@@ -26,6 +26,7 @@ import org.apache.cloudstack.acl.ProjectRolePermission;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -154,4 +155,14 @@ public class UpdateProjectRolePermissionCmd extends 
BaseCmd {
     public long getEntityOwnerId() {
         return CallContext.current().getCallingAccountId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getProjectId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Project;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
index dad6506729a..e2c31d6cf07 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
@@ -26,6 +26,7 @@ import com.cloud.host.Host;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -102,4 +103,14 @@ public class ChangeOutOfBandManagementPasswordCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "change out-of-band management password for host: " + 
getHostId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getHostId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Host;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
index 699e2855185..157d3c627db 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
@@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -112,4 +113,14 @@ public class ConfigureOutOfBandManagementCmd extends 
BaseCmd {
             builder.put(option, value);
         }
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getHostId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Host;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
index 604aae66889..445e7b92665 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
@@ -27,6 +27,7 @@ import com.cloud.org.Cluster;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class DisableOutOfBandManagementForClusterCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "disable out-of-band management password for cluster: " + 
getClusterId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getClusterId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Cluster;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
index 51c0fbcc3db..7e4444e93fb 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
@@ -27,6 +27,7 @@ import com.cloud.host.Host;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -95,4 +96,14 @@ public class DisableOutOfBandManagementForHostCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "disable out-of-band management password for host: " + 
getHostId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getHostId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Host;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
index 4c3e92cf05d..2028f8fc2a0 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
@@ -27,6 +27,7 @@ import com.cloud.exception.ResourceUnavailableException;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class DisableOutOfBandManagementForZoneCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "disable out-of-band management password for zone: " + 
getZoneId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getZoneId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Zone;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
index a69f27fb3ac..549743b3172 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
@@ -27,6 +27,7 @@ import com.cloud.org.Cluster;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class EnableOutOfBandManagementForClusterCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "enable out-of-band management password for cluster: " + 
getClusterId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getClusterId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Cluster;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
index 5e32c8943bf..834181a5e1c 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
@@ -27,6 +27,7 @@ import com.cloud.host.Host;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -95,4 +96,14 @@ public class EnableOutOfBandManagementForHostCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "enable out-of-band management password for host: " + 
getHostId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getHostId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Host;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
index 4eea4d50fe0..de4c4d801de 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
@@ -27,6 +27,7 @@ import com.cloud.exception.ResourceUnavailableException;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class EnableOutOfBandManagementForZoneCmd extends 
BaseAsyncCmd {
     public String getEventDescription() {
         return "enable out-of-band management password for zone: " + 
getZoneId();
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getZoneId();
+    }
+
+    @Override
+    public ApiCommandResourceType getApiResourceType() {
+        return ApiCommandResourceType.Zone;
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
index d10664f0a25..97a813c9d47 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
@@ -114,4 +114,9 @@ public class IssueOutOfBandManagementPowerActionCmd extends 
BaseAsyncCmd {
     public ApiCommandResourceType getApiResourceType() {
         return ApiCommandResourceType.Host;
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getHostId();
+    }
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertTypesCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertTypesCmd.java
new file mode 100644
index 00000000000..e7bfbdbc625
--- /dev/null
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertTypesCmd.java
@@ -0,0 +1,54 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.resource;
+
+import com.cloud.user.Account;
+import org.apache.cloudstack.alert.AlertService;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.response.AlertResponse;
+import org.apache.cloudstack.api.response.AlertTypeResponse;
+import org.apache.cloudstack.api.response.ListResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@APICommand(name = "listAlertTypes", description = "Lists all alerts types", 
responseObject = AlertResponse.class,
+        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+public class ListAlertTypesCmd extends BaseCmd {
+
+    @Override
+    public long getEntityOwnerId() {
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public void execute() {
+        Set<AlertService.AlertType> result = 
AlertService.AlertType.getAlertTypes();
+        ListResponse<AlertTypeResponse> response = new ListResponse<>();
+        List<AlertTypeResponse> typeResponseList = new ArrayList<>();
+        for (AlertService.AlertType alertType : result) {
+            AlertTypeResponse alertResponse = new 
AlertTypeResponse(alertType.getType(), alertType.getName());
+            alertResponse.setObjectName("alerttype");
+            typeResponseList.add(alertResponse);
+        }
+        response.setResponses(typeResponseList, result.size());
+        response.setResponseName(getCommandName());
+        this.setResponseObject(response);
+    }
+}
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
index 2c0ea6bc4ae..e83c6b4009d 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
@@ -138,4 +138,10 @@ public class CreateVMSnapshotCmd extends 
BaseAsyncCreateCmd {
     public ApiCommandResourceType getApiResourceType() {
         return ApiCommandResourceType.VmSnapshot;
     }
+
+    @Override
+    public Long getApiResourceId() {
+        return getEntityId();
+    }
+
 }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/response/AlertTypeResponse.java 
b/api/src/main/java/org/apache/cloudstack/api/response/AlertTypeResponse.java
new file mode 100644
index 00000000000..3f91cde0178
--- /dev/null
+++ 
b/api/src/main/java/org/apache/cloudstack/api/response/AlertTypeResponse.java
@@ -0,0 +1,55 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.response;
+
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseResponse;
+
+public class AlertTypeResponse extends BaseResponse {
+
+    @SerializedName("alerttypeid")
+    @Param(description = "alert type")
+    private short alertType;
+
+    @SerializedName(ApiConstants.NAME)
+    @Param(description = "description of alert type")
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public short getUsageType() {
+        return alertType;
+    }
+
+    public void setUsageType(short alertType) {
+        this.alertType = alertType;
+    }
+
+    public AlertTypeResponse(short alertType, String name) {
+        this.alertType = alertType;
+        this.name = name;
+        setObjectName("alerttype");
+    }
+}
diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java 
b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
index 5cd5b92054b..9b635cea5f3 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -185,6 +185,7 @@ import 
org.apache.cloudstack.api.command.admin.region.UpdateRegionCmd;
 import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd;
 import org.apache.cloudstack.api.command.admin.resource.CleanVMReservationsCmd;
 import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd;
+import org.apache.cloudstack.api.command.admin.resource.ListAlertTypesCmd;
 import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;
 import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;
 import 
org.apache.cloudstack.api.command.admin.resource.StartRollingMaintenanceCmd;
@@ -3468,6 +3469,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         cmdList.add(RemoveRegionCmd.class);
         cmdList.add(UpdateRegionCmd.class);
         cmdList.add(ListAlertsCmd.class);
+        cmdList.add(ListAlertTypesCmd.class);
         cmdList.add(ListCapacityCmd.class);
         cmdList.add(UpdatePodManagementNetworkIpRangeCmd.class);
         cmdList.add(UploadCustomCertificateCmd.class);
diff --git a/ui/src/components/view/SearchView.vue 
b/ui/src/components/view/SearchView.vue
index 9e65cdb36eb..7a2154ad426 100644
--- a/ui/src/components/view/SearchView.vue
+++ b/ui/src/components/view/SearchView.vue
@@ -186,7 +186,8 @@ export default {
       inputKey: null,
       inputValue: null,
       fieldValues: {},
-      isFiltered: false
+      isFiltered: false,
+      alertTypes: []
     }
   },
   created () {
@@ -347,6 +348,7 @@ export default {
     },
     async fetchDynamicFieldData (arrayField, searchKeyword) {
       const promises = []
+      let typeIndex = -1
       let zoneIndex = -1
       let domainIndex = -1
       let imageStoreIndex = -1
@@ -355,6 +357,14 @@ export default {
       let clusterIndex = -1
       let groupIndex = -1
 
+      if (arrayField.includes('type')) {
+        if (this.$route.path === '/alert') {
+          typeIndex = this.fields.findIndex(item => item.name === 'type')
+          this.fields[typeIndex].loading = true
+          promises.push(await this.fetchAlertTypes())
+        }
+      }
+
       if (arrayField.includes('zoneid')) {
         zoneIndex = this.fields.findIndex(item => item.name === 'zoneid')
         this.fields[zoneIndex].loading = true
@@ -398,6 +408,12 @@ export default {
       }
 
       Promise.all(promises).then(response => {
+        if (typeIndex > -1) {
+          const types = response.filter(item => item.type === 'type')
+          if (types && types.length > 0) {
+            this.fields[typeIndex].opts = this.sortArray(types[0].data)
+          }
+        }
         if (zoneIndex > -1) {
           const zones = response.filter(item => item.type === 'zoneid')
           if (zones && zones.length > 0) {
@@ -441,6 +457,9 @@ export default {
           }
         }
       }).finally(() => {
+        if (typeIndex > -1) {
+          this.fields[typeIndex].loading = false
+        }
         if (zoneIndex > -1) {
           this.fields[zoneIndex].loading = false
         }
@@ -585,6 +604,29 @@ export default {
         })
       })
     },
+    fetchAlertTypes () {
+      if (this.alertTypes.length > 0) {
+        return new Promise((resolve, reject) => {
+          resolve({
+            type: 'type',
+            data: this.alertTypes
+          })
+        })
+      } else {
+        return new Promise((resolve, reject) => {
+          api('listAlertTypes').then(json => {
+            const alerttypes = json.listalerttypesresponse.alerttype.map(a => 
{ return { id: a.alerttypeid, name: a.name } })
+            this.alertTypes = alerttypes
+            resolve({
+              type: 'type',
+              data: alerttypes
+            })
+          }).catch(error => {
+            reject(error.response.headers['x-description'])
+          })
+        })
+      }
+    },
     fetchGuestNetworkTypes () {
       const types = []
       if (this.apiName.indexOf('listNetworks') > -1) {
diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js
index bd18535f380..9390d2a7d62 100644
--- a/ui/src/config/section/compute.js
+++ b/ui/src/config/section/compute.js
@@ -483,6 +483,12 @@ export default {
           name: 'details',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
         },
+        {
+          name: 'events',
+          resourceType: 'VmSnapshot',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        },
         {
           name: 'comments',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue')))
@@ -990,6 +996,18 @@ export default {
         title: 'label.instances',
         param: 'affinitygroupid'
       }],
+      tabs: [
+        {
+          name: 'details',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+        },
+        {
+          name: 'events',
+          resourceType: 'AffinityGroup',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        }
+      ],
       actions: [
         {
           api: 'createAffinityGroup',
diff --git a/ui/src/config/section/infra.js b/ui/src/config/section/infra.js
index 0b3b1e7ae4f..5b3b38a68e5 100644
--- a/ui/src/config/section/infra.js
+++ b/ui/src/config/section/infra.js
@@ -79,6 +79,7 @@ export default {
       permission: ['listAlerts'],
       columns: ['name', 'description', 'type', 'sent'],
       details: ['name', 'id', 'type', 'sent', 'description'],
+      searchFilters: ['type'],
       actions: [
         {
           api: 'archiveAlerts',
diff --git a/ui/src/config/section/infra/hosts.js 
b/ui/src/config/section/infra/hosts.js
index 803e6160de3..d92f4af21e6 100644
--- a/ui/src/config/section/infra/hosts.js
+++ b/ui/src/config/section/infra/hosts.js
@@ -44,6 +44,11 @@ export default {
   tabs: [{
     name: 'details',
     component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+  }, {
+    name: 'events',
+    resourceType: 'Host',
+    component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+    show: () => { return 'listEvents' in store.getters.apis }
   }, {
     name: 'comments',
     component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue')))
diff --git a/ui/src/config/section/infra/ilbvms.js 
b/ui/src/config/section/infra/ilbvms.js
index fa20d6990e9..5ab9b3edfc0 100644
--- a/ui/src/config/section/infra/ilbvms.js
+++ b/ui/src/config/section/infra/ilbvms.js
@@ -16,6 +16,8 @@
 // under the License.
 
 import { shallowRef, defineAsyncComponent } from 'vue'
+import store from '@/store'
+
 export default {
   name: 'ilbvm',
   title: 'label.internal.lb',
@@ -25,6 +27,15 @@ export default {
   params: { projectid: '-1' },
   columns: ['name', 'state', 'publicip', 'guestnetworkname', 'vpcname', 
'version', 'softwareversion', 'hostname', 'account', 'zonename', 
'requiresupgrade'],
   details: ['name', 'id', 'version', 'softwareversion', 'requiresupgrade', 
'guestnetworkname', 'vpcname', 'publicip', 'guestipaddress', 'linklocalip', 
'serviceofferingname', 'networkdomain', 'isredundantrouter', 'redundantstate', 
'hostname', 'account', 'zonename', 'created', 'hostcontrolstate'],
+  tabs: [{
+    name: 'details',
+    component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+  }, {
+    name: 'events',
+    resourceType: 'InternalLbVm',
+    component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+    show: () => { return 'listEvents' in store.getters.apis }
+  }],
   actions: [
     {
       api: 'startInternalLoadBalancerVM',
diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js
index cd7dfbc828f..3d5241feb59 100644
--- a/ui/src/config/section/network.js
+++ b/ui/src/config/section/network.js
@@ -1046,6 +1046,11 @@ export default {
         name: 'loadbalancerinstance',
         component: shallowRef(defineAsyncComponent(() => 
import('@/views/network/InternalLBAssignedVmTab.vue'))),
         show: () => true
+      }, {
+        name: 'events',
+        resourceType: 'LoadBalancerRule',
+        component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+        show: () => { return 'listEvents' in store.getters.apis }
       }],
       actions: [
         {
@@ -1162,6 +1167,12 @@ export default {
           name: 'details',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
         },
+        {
+          name: 'events',
+          resourceType: 'VpnCustomerGateway',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        },
         {
           name: 'comments',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue')))
diff --git a/ui/src/config/section/offering.js 
b/ui/src/config/section/offering.js
index 3f040924242..3e99f602d91 100644
--- a/ui/src/config/section/offering.js
+++ b/ui/src/config/section/offering.js
@@ -56,6 +56,12 @@ export default {
           name: 'details',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
         },
+        {
+          name: 'events',
+          resourceType: 'ServiceOffering',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        },
         {
           name: 'comments',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue'))),
@@ -130,6 +136,24 @@ export default {
       columns: ['name', 'state', 'systemvmtype', 'cpunumber', 'cpuspeed', 
'memory', 'storagetype', 'order'],
       filters: ['active', 'inactive'],
       details: ['name', 'id', 'displaytext', 'systemvmtype', 
'provisioningtype', 'storagetype', 'iscustomized', 'limitcpuuse', 'cpunumber', 
'cpuspeed', 'memory', 'storagetags', 'hosttags', 'tags', 'domain', 'zone', 
'created', 'dynamicscalingenabled', 'diskofferingstrictness'],
+      resourceType: 'ServiceOffering',
+      tabs: [
+        {
+          name: 'details',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+        },
+        {
+          name: 'events',
+          resourceType: 'ServiceOffering',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        },
+        {
+          name: 'comments',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue'))),
+          show: (record, route, user) => { return ['Admin', 
'DomainAdmin'].includes(user.roletype) }
+        }
+      ],
       actions: [{
         api: 'createServiceOffering',
         icon: 'plus-outlined',
@@ -207,6 +231,12 @@ export default {
           name: 'details',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
         },
+        {
+          name: 'events',
+          resourceType: 'DiskOffering',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        },
         {
           name: 'comments',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue'))),
@@ -284,6 +314,18 @@ export default {
         title: 'label.instances',
         param: 'backupofferingid'
       }],
+      tabs: [
+        {
+          name: 'details',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+        },
+        {
+          name: 'events',
+          resourceType: 'BackupOffering',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        }
+      ],
       actions: [{
         api: 'importBackupOffering',
         icon: 'plus-outlined',
@@ -326,6 +368,12 @@ export default {
           name: 'details',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
         },
+        {
+          name: 'events',
+          resourceType: 'NetworkOffering',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        },
         {
           name: 'comments',
           component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/AnnotationsTab.vue'))),
@@ -418,6 +466,18 @@ export default {
         title: 'label.vpc',
         param: 'vpcofferingid'
       }],
+      tabs: [
+        {
+          name: 'details',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+        },
+        {
+          name: 'events',
+          resourceType: 'VpcOffering',
+          component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+          show: () => { return 'listEvents' in store.getters.apis }
+        }
+      ],
       actions: [{
         api: 'createVPCOffering',
         icon: 'plus-outlined',
diff --git a/ui/src/config/section/role.js b/ui/src/config/section/role.js
index d903ea0fae8..3823d633b18 100644
--- a/ui/src/config/section/role.js
+++ b/ui/src/config/section/role.js
@@ -16,6 +16,8 @@
 // under the License.
 
 import { shallowRef, defineAsyncComponent } from 'vue'
+import store from '@/store'
+
 export default {
   name: 'role',
   title: 'label.roles',
@@ -30,6 +32,11 @@ export default {
   }, {
     name: 'rules',
     component: shallowRef(defineAsyncComponent(() => 
import('@/views/iam/RolePermissionTab.vue')))
+  }, {
+    name: 'events',
+    resourceType: 'Role',
+    component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+    show: () => { return 'listEvents' in store.getters.apis }
   }],
   actions: [
     {
diff --git a/ui/src/config/section/user.js b/ui/src/config/section/user.js
index eef9ea3f939..d4f4d700db7 100644
--- a/ui/src/config/section/user.js
+++ b/ui/src/config/section/user.js
@@ -25,7 +25,7 @@ export default {
   docHelp: 'adminguide/accounts.html#users',
   hidden: true,
   permission: ['listUsers'],
-  columns: ['username', 'state', 'firstname', 'lastname', 'email', 'account'],
+  columns: ['username', 'state', 'firstname', 'lastname', 'email', 'account', 
'domain'],
   details: ['username', 'id', 'firstname', 'lastname', 'email', 'usersource', 
'timezone', 'rolename', 'roletype', 'is2faenabled', 'account', 'domain', 
'created'],
   tabs: [
     {
diff --git a/ui/src/views/network/PublicIpResource.vue 
b/ui/src/views/network/PublicIpResource.vue
index fdbd96a761a..18bc003b499 100644
--- a/ui/src/views/network/PublicIpResource.vue
+++ b/ui/src/views/network/PublicIpResource.vue
@@ -66,10 +66,22 @@ export default {
       tabs: [{
         name: 'details',
         component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+      },
+      {
+        name: 'events',
+        resourceType: 'IpAddress',
+        component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+        show: () => { return 'listEvents' in this.$store.getters.apis }
       }],
       defaultTabs: [{
         name: 'details',
         component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/DetailsTab.vue')))
+      },
+      {
+        name: 'events',
+        resourceType: 'IpAddress',
+        component: shallowRef(defineAsyncComponent(() => 
import('@/components/view/EventsTab.vue'))),
+        show: () => { return 'listEvents' in this.$store.getters.apis }
       }],
       activeTab: ''
     }


Reply via email to