fix(ui): table data issue in entity table lineage sidebar (#13893)

* fix table data issue in entity table lineage sidebar

* optimize code
This commit is contained in:
Ashish Gupta 2023-11-08 14:57:17 +05:30 committed by GitHub
parent bdfc9226d5
commit 2935c1d67b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 29 deletions

View File

@ -254,7 +254,7 @@ const EntityInfoDrawer = ({
default: default:
return null; return null;
} }
}, [entityDetail, fetchEntityDetail, tags, selectedNode]); }, [entityDetail, fetchEntityDetail, tags, selectedNode, isLoading]);
useEffect(() => { useEffect(() => {
fetchEntityDetail(selectedNode); fetchEntityDetail(selectedNode);

View File

@ -50,7 +50,10 @@ import CommonEntitySummaryInfo from '../CommonEntitySummaryInfo/CommonEntitySumm
import SummaryList from '../SummaryList/SummaryList.component'; import SummaryList from '../SummaryList/SummaryList.component';
import { BasicEntityInfo } from '../SummaryList/SummaryList.interface'; import { BasicEntityInfo } from '../SummaryList/SummaryList.interface';
import './table-summary.less'; import './table-summary.less';
import { TableSummaryProps } from './TableSummary.interface'; import {
TableProfileDetails,
TableSummaryProps,
} from './TableSummary.interface';
function TableSummary({ function TableSummary({
entityDetails, entityDetails,
@ -62,23 +65,29 @@ function TableSummary({
const location = useLocation(); const location = useLocation();
const isTourPage = location.pathname.includes(ROUTES.TOUR); const isTourPage = location.pathname.includes(ROUTES.TOUR);
const { getEntityPermission } = usePermissionProvider(); const { getEntityPermission } = usePermissionProvider();
const [tableDetails, setTableDetails] = useState<Table>(entityDetails);
const [profileData, setProfileData] = useState<TableProfileDetails>();
const [testSuiteSummary, setTestSuiteSummary] = useState<TestSummary>(); const [testSuiteSummary, setTestSuiteSummary] = useState<TestSummary>();
const [tablePermissions, setTablePermissions] = useState<OperationPermission>( const [tablePermissions, setTablePermissions] = useState<OperationPermission>(
DEFAULT_ENTITY_PERMISSION DEFAULT_ENTITY_PERMISSION
); );
const tableDetails: Table = useMemo(
() => ({ ...entityDetails, ...profileData }),
[entityDetails, profileData]
);
const viewProfilerPermission = useMemo( const viewProfilerPermission = useMemo(
() => tablePermissions.ViewDataProfile || tablePermissions.ViewAll, () => tablePermissions.ViewDataProfile || tablePermissions.ViewAll,
[tablePermissions] [tablePermissions]
); );
const isTableDeleted = useMemo(() => entityDetails.deleted, [entityDetails]); const isTableDeleted = useMemo(() => tableDetails.deleted, [tableDetails]);
const fetchAllTests = async () => { const fetchAllTests = async () => {
try { try {
const res = await getTableDetailsByFQN( const res = await getTableDetailsByFQN(
getEncodedFqn(entityDetails.fullyQualifiedName ?? ''), getEncodedFqn(tableDetails.fullyQualifiedName ?? ''),
'testSuite' 'testSuite'
); );
@ -92,23 +101,14 @@ function TableSummary({
const fetchProfilerData = useCallback(async () => { const fetchProfilerData = useCallback(async () => {
try { try {
const profileResponse = await getLatestTableProfileByFqn( const { profile, tableConstraints } = await getLatestTableProfileByFqn(
entityDetails?.fullyQualifiedName || '' tableDetails?.fullyQualifiedName ?? ''
); );
setProfileData({ profile, tableConstraints });
const { profile, tableConstraints } = profileResponse;
setTableDetails((prev) => {
if (prev) {
return { ...prev, profile, tableConstraints };
} else {
return {} as Table;
}
});
} catch (error) { } catch (error) {
// Error // Error
} }
}, [entityDetails]); }, [tableDetails]);
const profilerSummary = useMemo(() => { const profilerSummary = useMemo(() => {
if (!viewProfilerPermission) { if (!viewProfilerPermission) {
@ -163,8 +163,6 @@ function TableSummary({
); );
}, [tableDetails, testSuiteSummary, viewProfilerPermission]); }, [tableDetails, testSuiteSummary, viewProfilerPermission]);
const { columns } = tableDetails;
const entityInfo = useMemo( const entityInfo = useMemo(
() => getEntityOverview(ExplorePageTabs.TABLES, tableDetails), () => getEntityOverview(ExplorePageTabs.TABLES, tableDetails),
[tableDetails] [tableDetails]
@ -174,22 +172,22 @@ function TableSummary({
() => () =>
getFormattedEntityData( getFormattedEntityData(
SummaryEntityType.COLUMN, SummaryEntityType.COLUMN,
columns, tableDetails.columns,
tableDetails.tableConstraints tableDetails.tableConstraints
), ),
[columns, tableDetails] [tableDetails]
); );
const init = useCallback(async () => { const init = useCallback(async () => {
if (entityDetails.id && !isTourPage) { if (tableDetails.id && !isTourPage) {
const tablePermission = await getEntityPermission( const tablePermission = await getEntityPermission(
ResourceEntity.TABLE, ResourceEntity.TABLE,
entityDetails.id tableDetails.id
); );
setTablePermissions(tablePermission); setTablePermissions(tablePermission);
const shouldFetchProfilerData = const shouldFetchProfilerData =
!isTableDeleted && !isTableDeleted &&
entityDetails.service?.type === 'databaseService' && tableDetails.service?.type === 'databaseService' &&
!isTourPage && !isTourPage &&
tablePermission; tablePermission;
@ -200,11 +198,18 @@ function TableSummary({
} else { } else {
setTablePermissions(mockTablePermission as OperationPermission); setTablePermissions(mockTablePermission as OperationPermission);
} }
}, [entityDetails.fullyQualifiedName, isTourPage, isTableDeleted]); }, [
tableDetails,
isTourPage,
isTableDeleted,
fetchProfilerData,
fetchAllTests,
getEntityPermission,
]);
useEffect(() => { useEffect(() => {
init(); init();
}, [entityDetails.id]); }, [tableDetails.id]);
return ( return (
<SummaryPanelSkeleton loading={isLoading || isEmpty(tableDetails)}> <SummaryPanelSkeleton loading={isLoading || isEmpty(tableDetails)}>
@ -234,8 +239,8 @@ function TableSummary({
<Divider className="m-y-xs" /> <Divider className="m-y-xs" />
<SummaryTagsDescription <SummaryTagsDescription
entityDetail={entityDetails} entityDetail={tableDetails}
tags={tags ?? entityDetails.tags ?? []} tags={tags ?? tableDetails.tags ?? []}
/> />
<Divider className="m-y-xs" /> <Divider className="m-y-xs" />

View File

@ -30,3 +30,8 @@ export interface BasicTableInfo {
Queries: string; Queries: string;
Columns: string; Columns: string;
} }
export interface TableProfileDetails {
profile: Table['profile'];
tableConstraints: Table['tableConstraints'];
}