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 9e395aaf276..74e378ac573 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 @@ -79,6 +79,7 @@ import ErrorPlaceHolder from '../../common/ErrorWithPlaceholder/ErrorPlaceHolder import { PagingHandlerParams } from '../../common/NextPrevious/NextPrevious.interface'; import Searchbar from '../../common/SearchBarComponent/SearchBar.component'; import DataQualityTab from '../../Database/Profiler/DataQualityTab/DataQualityTab'; +import PageHeader from '../../PageHeader/PageHeader.component'; import { TestCaseSearchParams } from '../DataQuality.interface'; import PieChartSummaryPanel from '../SummaryPannel/PieChartSummaryPanel.component'; @@ -392,6 +393,31 @@ export const TestCases = () => { } }; + const dqTableHeader = useMemo(() => { + return ( + + + + + + handleSearchParam('searchValue', value)} + /> + + + ); + }, [searchValue, handleSearchParam]); + const handleMenuClick = ({ key }: { key: string }) => { setSelectedFilter((prevSelected) => { if (prevSelected.includes(key)) { @@ -488,16 +514,6 @@ export const TestCases = () => { layout="horizontal" onValuesChange={handleFilterChange}> - - handleSearchParam('searchValue', value)} - /> - { isLoading={isLoading} pagingData={pagingData} showPagination={showPagination} + tableHeader={dqTableHeader} testCases={testCase} onTestCaseResultUpdate={handleStatusSubmit} onTestUpdate={handleTestCaseUpdate} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/TestSuites.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/TestSuites.component.tsx index fd123a4b438..10b03caa0e3 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/TestSuites.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/TestSuites.component.tsx @@ -72,6 +72,7 @@ import { TableProfilerTab } from '../../../Database/Profiler/ProfilerDashboard/p import ProfilerProgressWidget from '../../../Database/Profiler/TableProfiler/ProfilerProgressWidget/ProfilerProgressWidget'; import { TestSuiteSearchParams } from '../../DataQuality.interface'; import PieChartSummaryPanel from '../../SummaryPannel/PieChartSummaryPanel.component'; +import './test-suites.style.less'; export const TestSuites = () => { const { t } = useTranslation(); @@ -306,15 +307,6 @@ export const TestSuites = () => { align="center" className="w-full justify-between" size={16}> - - - handleSearchParam(value, 'searchValue') - } - /> - { testSummary={testCaseSummary} /> + - - - - - {t('label.table-suite-plural')} - - - {t('label.bundle-suite-plural')} - - - - - handleSearchParam(value, 'searchValue')} - /> - - - - - , - }} - pagination={false} - scroll={{ - x: '100%', - }} - size="small" - /> +
+
+ +
+ + + {t('label.table-suite-plural')} + + + {t('label.bundle-suite-plural')} + + + + + handleSearchParam(value, 'searchValue')} + /> + + + +
, + }} + pagination={false} + scroll={{ + x: '100%', + }} + size="small" + /> + ); diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/test-suites.style.less b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/test-suites.style.less new file mode 100644 index 00000000000..6981fb0ac30 --- /dev/null +++ b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuiteList/test-suites.style.less @@ -0,0 +1,11 @@ +@import (reference) '../../../../styles/variables.less'; + +.test-suite-list-container { + background-color: @white; + border-radius: @border-radius-sm; + border: @global-border; + + .test-suite-list-header { + padding: @padding-md; + } +} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/DataQualityTab.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/DataQualityTab.tsx index 02e12966ec8..741e3e1338f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/DataQualityTab.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/DataQualityTab.tsx @@ -82,7 +82,8 @@ const DataQualityTab: React.FC = ({ breadcrumbData, fetchTestCases, isEditAllowed, -}) => { + tableHeader, +}: DataQualityTabProps) => { const { t } = useTranslation(); const { getEntityPermissionByFqn } = usePermissionProvider(); const [selectedTestCase, setSelectedTestCase] = useState(); @@ -147,7 +148,7 @@ const DataQualityTab: React.FC = ({ title: t('label.status'), dataIndex: 'testCaseResult', key: 'status', - width: 100, + width: 120, render: (result: TestCaseResult) => { return result?.testCaseStatus ? ( = ({ getColumnNameFromEntityLink(entityLink) ?? '' ); - return name; + return ( + + {name} + + ); } return '--'; @@ -483,10 +491,18 @@ const DataQualityTab: React.FC = ({ }, [testCases]); return ( - <> +
+ {tableHeader && ( +
{tableHeader}
+ )}
= ({ onCancel={handleCancel} /> )} - + ); }; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/data-quality-tab.less b/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/data-quality-tab.less index f9d37c9dca9..4bb8bf4dffa 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/data-quality-tab.less +++ b/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/DataQualityTab/data-quality-tab.less @@ -18,3 +18,12 @@ padding-right: 0px; } } +.data-quality-tab-container { + background-color: @white; + border-radius: @border-radius-sm; + border: @global-border; + + .data-quality-table-header { + padding: @padding-md; + } +} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/ProfilerDashboard/profilerDashboard.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/ProfilerDashboard/profilerDashboard.interface.ts index bd11cd1479e..df46736838c 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/ProfilerDashboard/profilerDashboard.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/ProfilerDashboard/profilerDashboard.interface.ts @@ -67,6 +67,7 @@ export interface DataQualityTabProps { breadcrumbData?: TitleBreadcrumbProps['titleLinks']; fetchTestCases?: (params?: ListTestCaseParamsBySearch) => Promise; isEditAllowed?: boolean; + tableHeader?: ReactNode; } export interface TestSummaryProps { diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/Table/table.less b/openmetadata-ui/src/main/resources/ui/src/components/common/Table/table.less index 8b21411cf61..dbc725d2460 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/Table/table.less +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/Table/table.less @@ -57,3 +57,18 @@ padding: 16px 0; } } + +.custom-card-with-table { + &.table-container { + border: none; + border-radius: 0px 0px @border-radius-sm @border-radius-sm; + } + .ant-table { + table > tbody > tr:last-child > td { + border-bottom: none; + } + tr > td:first-child.name-column { + padding-left: 16px; + } + } +} 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 db16a2e4b02..7fa687d1dc1 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 @@ -1427,6 +1427,7 @@ "term-plural": "Terms", "test": "Test", "test-case": "Test case", + "test-case-insight-plural": "Test Case Insights", "test-case-lowercase": "test case", "test-case-lowercase-plural": "test cases", "test-case-name": "Test Case Name", @@ -2157,6 +2158,7 @@ "team-member-management-description": "Streamline access to users and teams in {{brandName}}.", "team-moved-success": "Team moved successfully!", "team-no-asset": "Your team does not have any assets.", + "test-case-insight-description": "Access a centralized view of your dataset's health based on configured test validations.", "test-case-schedule-description": "The data quality tests can be scheduled to run at the desired frequency. The timezone is in UTC.", "test-connection-cannot-be-triggered": "Test connection cannot be triggered.", "test-connection-taking-too-long": {