diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/SummaryPannel/PieChartSummaryPanel.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/SummaryPannel/PieChartSummaryPanel.component.tsx
new file mode 100644
index 00000000000..f92f8053e15
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/SummaryPannel/PieChartSummaryPanel.component.tsx
@@ -0,0 +1,208 @@
+import { Card, Col, Row } from 'antd';
+import React, { useMemo } from 'react';
+import { useTranslation } from 'react-i18next';
+import { Cell, Pie, PieChart } from 'recharts';
+import { SummaryPanelProps } from './SummaryPanel.interface';
+
+const renderCenterText = (value: number) => (
+
+ {value.toLocaleString()}
+
+);
+
+const PieChartSummaryPanel = ({
+ testSummary,
+ isLoading = false,
+ showAdditionalSummary = false,
+}: SummaryPanelProps) => {
+ const { t } = useTranslation();
+ console.log('testSummary', testSummary);
+
+ // {
+ // "success": 4,
+ // "failed": 3,
+ // "aborted": 1,
+ // "total": 8,
+ // "unhealthy": 1,
+ // "healthy": 1,
+ // "totalDQEntities": 2,
+ // "totalEntityCount": 36
+ // }
+
+ const success = useMemo(
+ () => [
+ {
+ name: 'success',
+ value: testSummary?.success,
+ color: '#22C55E',
+ },
+ {
+ name: 'total',
+ value: testSummary?.total,
+ color: '#E5E7EB',
+ },
+ ],
+ [testSummary]
+ );
+
+ return (
+
+
+
+ {t('test-cases-status', 'Test Cases Status')}
+
+
+ {t(
+ 'test-cases-status-desc',
+ 'Understand the metadata available in your service and keep track of the main KPIs coverage'
+ )}
+
+
+
+ {/* Total Tests */}
+
+
+
+ {t('total-tests', 'Total Tests')}
+
+
+
+
+ {success?.map((entry) => (
+ |
+ ))}
+
+ {/* {renderCenterText(testSummary?.totalTests || 0)} */}
+
+
+
+ {testSummary?.totalTests?.map((item: any) => (
+
+
+
+ {t(item.name)}
+
+
+ {item.value}
+
+
+ ))}
+
+
+
+ {/* Healthy Data Assets */}
+
+
+
+ {t('healthy-data-asset-plural')}
+
+
+
+
+ {testSummary?.healthyDataAssets?.map(
+ (entry: any, idx: number) => (
+ |
+ )
+ )}
+
+ {renderCenterText(1000)}
+
+
+
+
+ {/* Data Assets Coverage */}
+
+
+
+ {t('data-asset-plural-coverage')}
+
+
+
+
+ {testSummary?.dataAssetsCoverage?.map(
+ (entry: any, idx: number) => (
+ |
+ )
+ )}
+
+ {renderCenterText(1000)}
+
+
+
+
+
+
+ );
+};
+
+export default PieChartSummaryPanel;
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestCases/TestCases.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestCases/TestCases.component.tsx
index 7e519e4dbec..13278eee274 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestCases/TestCases.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestCases/TestCases.component.tsx
@@ -13,6 +13,7 @@
import { RightOutlined } from '@ant-design/icons';
import {
Button,
+ Card,
Col,
Dropdown,
Form,
@@ -81,6 +82,7 @@ import { PagingHandlerParams } from '../../common/NextPrevious/NextPrevious.inte
import Searchbar from '../../common/SearchBarComponent/SearchBar.component';
import DataQualityTab from '../../Database/Profiler/DataQualityTab/DataQualityTab';
import { TestCaseSearchParams } from '../DataQuality.interface';
+import PieChartSummaryPanel from '../SummaryPannel/PieChartSummaryPanel.component';
import { SummaryPanel } from '../SummaryPannel/SummaryPanel.component';
export const TestCases = () => {
@@ -482,196 +484,204 @@ export const TestCases = () => {
}
return (
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
);
};
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/DataQualityPage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/DataQualityPage.tsx
index 936ee8859e9..af2973fef84 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/DataQualityPage.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/DataQualityPage.tsx
@@ -11,13 +11,15 @@
* limitations under the License.
*/
-import { Card, Col, Row, Tabs, Typography } from 'antd';
+import { Button, Card, Col, Row, Tabs, Typography } from 'antd';
import { isEmpty } from 'lodash';
import React, { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { useHistory, useParams } from 'react-router-dom';
+import { Link, useHistory, useParams } from 'react-router-dom';
import ManageButton from '../../components/common/EntityPageInfos/ManageButton/ManageButton';
import TabsLabel from '../../components/common/TabsLabel/TabsLabel.component';
+import { ROUTES } from '../../constants/constants';
+import { usePermissionProvider } from '../../context/PermissionProvider/PermissionProvider';
import { EntityType } from '../../enums/entity.enum';
import { withPageLayout } from '../../hoc/withPageLayout';
import i18n from '../../utils/i18next/LocalUtil';
@@ -32,6 +34,8 @@ const DataQualityPage = () => {
useParams<{ tab: DataQualityPageTabs }>();
const history = useHistory();
const { t } = useTranslation();
+ const { permissions } = usePermissionProvider();
+ const { testSuite: testSuitePermission } = permissions;
const menuItems = useMemo(() => {
const data = DataQualityClassBase.getDataQualityTab();
@@ -58,45 +62,67 @@ const DataQualityPage = () => {
};
return (
-
-
-
-
-
-
- {t('label.data-quality')}
-
-
- {t('message.page-sub-header-for-data-quality')}
-
-
- {isEmpty(extraDropdownContent) ? null : (
-
-
+
+
+
+
+
+
+
+ {t('label.data-quality')}
+
+
+ {t('message.page-sub-header-for-data-quality')}
+
- )}
-
-
-
-
-
-
-
+
+ {activeTab === DataQualityPageTabs.TEST_SUITES &&
+ testSuitePermission?.Create && (
+
+
+
+ )}
+ {activeTab === DataQualityPageTabs.TEST_CASES &&
+ testSuitePermission?.Create && (
+
+ )}
+ {isEmpty(extraDropdownContent) ? null : (
+
+ )}
+
+
+
+
+
+
+
+
+
);
};
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/data-quality-page.less b/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/data-quality-page.less
index e1ce348a048..9d4ba7dd795 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/data-quality-page.less
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/data-quality-page.less
@@ -13,9 +13,8 @@
@import (reference) '../../styles/variables.less';
-.data-quality-page-left-panel-menu {
- &.ant-menu-root.ant-menu-inline {
- padding-top: @size-md;
- border-radius: @border-radius-sm;
+.data-quality-page-tabs {
+ .ant-tabs-tabpane {
+ margin-top: @size-md;
}
}