+ {rightPanel}
+
+ )}
+
);
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/EntityPageInfos/AnnouncementDrawer/AnnouncementDrawer.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/EntityPageInfos/AnnouncementDrawer/AnnouncementDrawer.tsx
index b05a59dbaf9..3fbb796815d 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/common/EntityPageInfos/AnnouncementDrawer/AnnouncementDrawer.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/common/EntityPageInfos/AnnouncementDrawer/AnnouncementDrawer.tsx
@@ -57,7 +57,7 @@ const AnnouncementDrawer: FC = ({
{t('label.announcement-plural')}
-
+
);
diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/api/docStore/createDocument.ts b/openmetadata-ui/src/main/resources/ui/src/generated/api/docStore/createDocument.ts
index 6bdda84376b..38a962a47d9 100644
--- a/openmetadata-ui/src/main/resources/ui/src/generated/api/docStore/createDocument.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/generated/api/docStore/createDocument.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2024 Collate.
+ * Copyright 2025 Collate.
* Licensed 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
@@ -10,9 +10,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
- /**
+/**
* This schema defines Document. A Generic entity to capture any kind of Json Payload.
*/
export interface CreateDocument {
diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/api/tests/createTestCaseResult.ts b/openmetadata-ui/src/main/resources/ui/src/generated/api/tests/createTestCaseResult.ts
index a34a653597f..9dc61fd339a 100644
--- a/openmetadata-ui/src/main/resources/ui/src/generated/api/tests/createTestCaseResult.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/generated/api/tests/createTestCaseResult.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2024 Collate.
+ * Copyright 2025 Collate.
* Licensed 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
diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/addCustomProperties.ts b/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/addCustomProperties.ts
index 870b52590ce..d9d46514dbc 100644
--- a/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/addCustomProperties.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/addCustomProperties.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2024 Collate.
+ * Copyright 2025 Collate.
* Licensed 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
diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/removeCustomPropertiesAction.ts b/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/removeCustomPropertiesAction.ts
index 11b4815a42f..584ca2e5945 100644
--- a/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/removeCustomPropertiesAction.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automator/removeCustomPropertiesAction.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2024 Collate.
+ * Copyright 2025 Collate.
* Licensed 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
diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automatorAppConfig.ts b/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automatorAppConfig.ts
index 04e5e21d326..4d9e53688ee 100644
--- a/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automatorAppConfig.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/generated/entity/applications/configuration/external/automatorAppConfig.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2024 Collate.
+ * Copyright 2025 Collate.
* Licensed 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
diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/type/entityHierarchy.ts b/openmetadata-ui/src/main/resources/ui/src/generated/type/entityHierarchy.ts
index 50e64689993..27b4527065a 100644
--- a/openmetadata-ui/src/main/resources/ui/src/generated/type/entityHierarchy.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/generated/type/entityHierarchy.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2024 Collate.
+ * Copyright 2025 Collate.
* Licensed 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
diff --git a/openmetadata-ui/src/main/resources/ui/src/hoc/withPageLayout.tsx b/openmetadata-ui/src/main/resources/ui/src/hoc/withPageLayout.tsx
new file mode 100644
index 00000000000..0034738d973
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/hoc/withPageLayout.tsx
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2025 Collate.
+ * Licensed 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.
+ */
+import React, { FC } from 'react';
+import { useTranslation } from 'react-i18next';
+import PageLayoutV1 from '../components/PageLayoutV1/PageLayoutV1';
+
+export const withPageLayout =
+
(pageTitleKey: string) =>
+ (Component: FC
) => {
+ const WrappedComponent: FC
= (props) => {
+ const { t } = useTranslation();
+
+ return (
+
+
+
+ );
+ };
+
+ return WrappedComponent;
+ };
diff --git a/openmetadata-ui/src/main/resources/ui/src/hooks/useAlertStore.test.ts b/openmetadata-ui/src/main/resources/ui/src/hooks/useAlertStore.test.ts
new file mode 100644
index 00000000000..08c6bbb14be
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/hooks/useAlertStore.test.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2025 Collate.
+ * Licensed 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.
+ */
+import { act } from '@testing-library/react';
+import { AlertType, useAlertStore } from './useAlertStore';
+
+describe('useAlertStore', () => {
+ it('should update the alert state when addAlert is called', () => {
+ const { alert, animationClass, addAlert } = useAlertStore.getState();
+
+ expect(alert).toBeUndefined();
+ expect(animationClass).toBe('');
+
+ const testAlert: AlertType = {
+ type: 'error',
+ message: 'Test error message',
+ };
+
+ act(() => {
+ addAlert(testAlert);
+ });
+
+ expect(useAlertStore.getState().alert).toEqual(testAlert);
+ expect(useAlertStore.getState().animationClass).toBe('show-alert');
+ });
+
+ it('should reset the alert state when resetAlert is called', () => {
+ const { resetAlert, addAlert } = useAlertStore.getState();
+
+ const testAlert: AlertType = {
+ type: 'info',
+ message: 'Test info message',
+ };
+
+ act(() => {
+ addAlert(testAlert);
+ });
+
+ expect(useAlertStore.getState().alert).toEqual(testAlert);
+
+ act(() => {
+ resetAlert();
+ });
+
+ expect(useAlertStore.getState().alert).toBeUndefined();
+ });
+});
diff --git a/openmetadata-ui/src/main/resources/ui/src/hooks/useAlertStore.ts b/openmetadata-ui/src/main/resources/ui/src/hooks/useAlertStore.ts
new file mode 100644
index 00000000000..ed12926d3ea
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/hooks/useAlertStore.ts
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2024 Collate.
+ * Licensed 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.
+ */
+import { AlertProps } from 'antd';
+import { create } from 'zustand';
+
+export type AlertType = {
+ type: AlertProps['type'];
+ message: string | JSX.Element;
+};
+
+interface AlertStore {
+ alert: AlertType | undefined;
+ animationClass: string;
+ addAlert: (alert: AlertType, timer?: number) => void;
+ resetAlert: VoidFunction;
+}
+
+export const useAlertStore = create()((set) => ({
+ alert: undefined,
+ animationClass: '',
+ addAlert: (alert: AlertType, timer?: number) => {
+ set({ alert, animationClass: 'show-alert' });
+
+ const autoCloseTimer = timer ?? (alert.type === 'error' ? Infinity : 5000);
+
+ if (autoCloseTimer !== Infinity) {
+ setTimeout(() => {
+ set({ animationClass: 'hide-alert', alert: undefined });
+ }, autoCloseTimer);
+ }
+ },
+ resetAlert: () => {
+ set({ alert: undefined });
+ },
+}));
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
index 6781ee5ad71..ab04e562547 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
@@ -56,6 +56,7 @@
"aggregate": "Aggregate",
"airflow-config-plural": "Airflow-Konfigurationen",
"alert": "Warnung",
+ "alert-detail-plural": "Waarschuwingsdetails",
"alert-lowercase": "warnung",
"alert-lowercase-plural": "warnungen",
"alert-plural": "Warnungen",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
index ef0b20ff973..b8be3d18676 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
@@ -56,6 +56,7 @@
"aggregate": "Aggregate",
"airflow-config-plural": "airflow configs",
"alert": "Alert",
+ "alert-detail-plural": "Alert Details",
"alert-lowercase": "alert",
"alert-lowercase-plural": "alerts",
"alert-plural": "Alerts",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
index 282f3a12966..8aa137314ca 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
@@ -56,6 +56,7 @@
"aggregate": "Agregar",
"airflow-config-plural": "Configuraciones de airflow",
"alert": "Alerta",
+ "alert-detail-plural": "Detalles de la alerta",
"alert-lowercase": "alerta",
"alert-lowercase-plural": "alertas",
"alert-plural": "Alertas",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
index 23863436965..b7989658c2e 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
@@ -56,6 +56,7 @@
"aggregate": "Aggregate",
"airflow-config-plural": "Configurations Airflow",
"alert": "Alerte",
+ "alert-detail-plural": "Détails de l'alerte",
"alert-lowercase": "alerte",
"alert-lowercase-plural": "alertes",
"alert-plural": "Alertes",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
index 3cb9f08c49f..5ee7c795f04 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
@@ -56,6 +56,7 @@
"aggregate": "Agrupar",
"airflow-config-plural": "configuracións de Airflow",
"alert": "Alerta",
+ "alert-detail-plural": "Detalles de la alerta",
"alert-lowercase": "alerta",
"alert-lowercase-plural": "alertas",
"alert-plural": "Alertas",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
index 73aaf270864..5ea0361572e 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
@@ -56,6 +56,7 @@
"aggregate": "כלול",
"airflow-config-plural": "תצורות airflow",
"alert": "התראה",
+ "alert-detail-plural": "פרטי התראה",
"alert-lowercase": "התראה",
"alert-lowercase-plural": "התראות",
"alert-plural": "התראות",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
index 0ca9ed7c94d..9b4d9665b36 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
@@ -56,6 +56,7 @@
"aggregate": "Aggregate",
"airflow-config-plural": "Airflowの設定",
"alert": "アラート",
+ "alert-detail-plural": "アラートの詳細",
"alert-lowercase": "alert",
"alert-lowercase-plural": "alerts",
"alert-plural": "アラート",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
index b0ff75e5e78..42c4bb75f6a 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
@@ -56,6 +56,7 @@
"aggregate": "एकूण",
"airflow-config-plural": "एअरफ्लो संरचना",
"alert": "सूचना",
+ "alert-detail-plural": "सतर्कतेचा तपशील",
"alert-lowercase": "सूचना",
"alert-lowercase-plural": "सूचना",
"alert-plural": "सूचना",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
index 756a56a612d..66c441b2986 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
@@ -56,6 +56,7 @@
"aggregate": "Agregaat",
"airflow-config-plural": "Airflowconfiguraties",
"alert": "Alert",
+ "alert-detail-plural": "Alert Details",
"alert-lowercase": "alert",
"alert-lowercase-plural": "alerts",
"alert-plural": "Alerts",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
index 9f819e602c0..34c43a0f6fb 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
@@ -56,6 +56,7 @@
"aggregate": "تجمیع",
"airflow-config-plural": "پیکربندیهای ایرفلو",
"alert": "هشدار",
+ "alert-detail-plural": "جزئیات هشدار",
"alert-lowercase": "هشدار",
"alert-lowercase-plural": "هشدارها",
"alert-plural": "هشدارها",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
index 388c502721a..0fad9edef08 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
@@ -56,6 +56,7 @@
"aggregate": "Agregado",
"airflow-config-plural": "configs do airflow",
"alert": "Alerta",
+ "alert-detail-plural": "Detalhes do Alerta",
"alert-lowercase": "alerta",
"alert-lowercase-plural": "alertas",
"alert-plural": "Alertas",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
index 7a178faf1f0..5caf196e27f 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
@@ -56,6 +56,7 @@
"aggregate": "Agregado",
"airflow-config-plural": "configs do airflow",
"alert": "Alerta",
+ "alert-detail-plural": "Detalhes do Alerta",
"alert-lowercase": "alerta",
"alert-lowercase-plural": "alertas",
"alert-plural": "Alertas",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
index 8e23a8b303d..2b716804fa7 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
@@ -56,6 +56,7 @@
"aggregate": "Aggregate",
"airflow-config-plural": "конфиги airflow",
"alert": "Предупреждение",
+ "alert-detail-plural": "Детали оповещения",
"alert-lowercase": "предупреждение",
"alert-lowercase-plural": "предупреждения",
"alert-plural": "Предупреждения",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
index cf89ccbb718..154265bb5b9 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
@@ -56,6 +56,7 @@
"aggregate": "รวม",
"airflow-config-plural": "การกำหนดค่าของ airflow",
"alert": "การแจ้งเตือน",
+ "alert-detail-plural": "รายละเอียดการแจ้งเตือน",
"alert-lowercase": "การแจ้งเตือน",
"alert-lowercase-plural": "การแจ้งเตือนหลายอย่าง",
"alert-plural": "การแจ้งเตือนหลายอย่าง",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
index 827ee011fc1..21d332fdc51 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
@@ -56,6 +56,7 @@
"aggregate": "聚合",
"airflow-config-plural": "Airflow 配置",
"alert": "提醒",
+ "alert-detail-plural": "警报详情",
"alert-lowercase": "提醒",
"alert-lowercase-plural": "提醒",
"alert-plural": "提醒",
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/AlertDetailsPage/AlertDetailsPage.test.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/AlertDetailsPage/AlertDetailsPage.test.tsx
index 0fecec8a14c..123d75cca2d 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/AlertDetailsPage/AlertDetailsPage.test.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/AlertDetailsPage/AlertDetailsPage.test.tsx
@@ -84,6 +84,19 @@ jest.mock('../../utils/ToastUtils', () => ({
showErrorToast: jest.fn(),
}));
+jest.mock('../../hoc/withPageLayout', () => ({
+ withPageLayout: jest.fn().mockImplementation(
+ () =>
+ (Component: React.FC) =>
+ (
+ props: JSX.IntrinsicAttributes & {
+ children?: React.ReactNode | undefined;
+ }
+ ) =>
+
+ ),
+}));
+
jest.mock(
'../../components/Alerts/AlertDetails/AlertConfigDetails/AlertConfigDetails',
() => jest.fn().mockImplementation(() =>