Fix : Charts details display issue in summary panels. (#20666)

* fix charts details display issue in summary panels

* minor fix

* added loader
This commit is contained in:
Shrushti Polekar 2025-04-08 11:03:45 +05:30 committed by GitHub
parent ec535795a3
commit f31c50a419
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 37 additions and 10 deletions

View File

@ -56,6 +56,8 @@ export const DataAssetSummaryPanel = ({
Record<string, number | string> Record<string, number | string>
>({}); >({});
const [charts, setCharts] = useState<Chart[]>([]); const [charts, setCharts] = useState<Chart[]>([]);
const [chartsDetailsLoading, setChartsDetailsLoading] =
useState<boolean>(false);
const [entityPermissions, setEntityPermissions] = const [entityPermissions, setEntityPermissions] =
useState<OperationPermission | null>(null); useState<OperationPermission | null>(null);
const { isTourPage } = useTourProvider(); const { isTourPage } = useTourProvider();
@ -71,9 +73,10 @@ export const DataAssetSummaryPanel = ({
entityType === EntityType.DASHBOARD entityType === EntityType.DASHBOARD
? ({ ...dataAsset, charts } as any) ? ({ ...dataAsset, charts } as any)
: dataAsset, : dataAsset,
highlights highlights,
entityType === EntityType.DASHBOARD ? chartsDetailsLoading : false
); );
}, [dataAsset, entityType, highlights]); }, [dataAsset, entityType, highlights, charts, chartsDetailsLoading]);
const isEntityDeleted = useMemo(() => dataAsset.deleted, [dataAsset]); const isEntityDeleted = useMemo(() => dataAsset.deleted, [dataAsset]);
@ -105,12 +108,14 @@ export const DataAssetSummaryPanel = ({
}, [dataAsset?.fullyQualifiedName, entityPermissions]); }, [dataAsset?.fullyQualifiedName, entityPermissions]);
const fetchChartsDetails = useCallback(async () => { const fetchChartsDetails = useCallback(async () => {
setChartsDetailsLoading(true);
try { try {
const chartDetails = await fetchCharts((dataAsset as Dashboard).charts); const chartDetails = await fetchCharts((dataAsset as Dashboard).charts);
setCharts(chartDetails); setCharts(chartDetails);
} catch (err) { } catch (err) {
// Error // Error
} finally {
setChartsDetailsLoading(false);
} }
}, [dataAsset]); }, [dataAsset]);

View File

@ -11,7 +11,7 @@
* limitations under the License. * limitations under the License.
*/ */
import { Collapse, Row, Typography } from 'antd'; import { Collapse, Row, Skeleton, Typography } from 'antd';
import { isEmpty, isUndefined } from 'lodash'; import { isEmpty, isUndefined } from 'lodash';
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -26,9 +26,18 @@ export default function SummaryList({
formattedEntityData, formattedEntityData,
entityType, entityType,
emptyPlaceholderText, emptyPlaceholderText,
}: SummaryListProps) { loading = false,
}: Readonly<SummaryListProps>) {
const { t } = useTranslation(); const { t } = useTranslation();
if (loading) {
return (
<Row align="middle" data-testid="summary-list-loader">
<Skeleton active paragraph={{ rows: 1 }} />
</Row>
);
}
return ( return (
<Row align="middle" data-testid="summary-list"> <Row align="middle" data-testid="summary-list">
{isEmpty(formattedEntityData) ? ( {isEmpty(formattedEntityData) ? (

View File

@ -42,4 +42,5 @@ export interface SummaryListProps {
formattedEntityData: BasicEntityInfo[]; formattedEntityData: BasicEntityInfo[];
entityType?: SummaryEntityType; entityType?: SummaryEntityType;
emptyPlaceholderText?: string; emptyPlaceholderText?: string;
loading?: boolean;
} }

View File

@ -46,7 +46,11 @@ function SummaryListItem({
iconClassName: 'm-r-xss', iconClassName: 'm-r-xss',
iconWidth: '14px', iconWidth: '14px',
})} })}
<Typography.Text
className="m-r-xs"
ellipsis={{ tooltip: entityDetails.title }}>
{entityDetails.title} {entityDetails.title}
</Typography.Text>
{entityDetails.type && ( {entityDetails.type && (
<AppBadge <AppBadge

View File

@ -384,7 +384,8 @@ export const getFormattedEntityData = (
export const getEntityChildDetails = ( export const getEntityChildDetails = (
entityType: EntityType, entityType: EntityType,
entityInfo: SearchedDataProps['data'][number]['_source'], entityInfo: SearchedDataProps['data'][number]['_source'],
highlights?: SearchedDataProps['data'][number]['highlight'] highlights?: SearchedDataProps['data'][number]['highlight'],
loading?: boolean
) => { ) => {
let childComponent; let childComponent;
let heading; let heading;
@ -456,7 +457,9 @@ export const getEntityChildDetails = (
return ( return (
<> <>
<Row className="p-md border-radius-card" gutter={[0, 8]}> <Row
className="p-md border-radius-card summary-panel-card"
gutter={[0, 8]}>
<Col span={24}> <Col span={24}>
<Typography.Text <Typography.Text
className="summary-panel-section-title" className="summary-panel-section-title"
@ -465,11 +468,16 @@ export const getEntityChildDetails = (
</Typography.Text> </Typography.Text>
</Col> </Col>
<Col span={24}> <Col span={24}>
<SummaryList formattedEntityData={formattedChartsData} /> <SummaryList
formattedEntityData={formattedChartsData}
loading={loading}
/>
</Col> </Col>
</Row> </Row>
<Row className="p-md border-radius-card" gutter={[0, 8]}> <Row
className="p-md border-radius-card summary-panel-card"
gutter={[0, 8]}>
<Col span={24}> <Col span={24}>
<Typography.Text <Typography.Text
className="summary-panel-section-title" className="summary-panel-section-title"