From 7040e02cfbf0f6538df8eb451f2e62ad264b27e3 Mon Sep 17 00:00:00 2001 From: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:06:26 +0530 Subject: [PATCH] fix(ui): overflow for frequently joined table widget (#21623) (cherry picked from commit b0f82aa0ef5f98384bebca74e6d837ffbd231222) --- .../FrequentlyJoinedTables.component.tsx | 68 ++++++++++++++----- .../frequently-joined-tables.style.less | 16 +++-- 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/FrequentlyJoinedTables.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/FrequentlyJoinedTables.component.tsx index aaf1702549d..06abbe68846 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/FrequentlyJoinedTables.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/FrequentlyJoinedTables.component.tsx @@ -10,13 +10,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Space, Typography } from 'antd'; +import { Button, Typography } from 'antd'; import { isEmpty } from 'lodash'; -import React, { useEffect, useMemo } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; import ExpandableCard from '../../../components/common/ExpandableCard/ExpandableCard'; import { useGenericContext } from '../../../components/Customization/GenericProvider/GenericProvider'; +import { LIST_SIZE } from '../../../constants/constants'; import { DetailPageWidgetKeys } from '../../../enums/CustomizeDetailPage.enum'; import { EntityType } from '../../../enums/entity.enum'; import { JoinedWith, Table } from '../../../generated/entity/data/table'; @@ -36,6 +37,7 @@ export const FrequentlyJoinedTables = ({ }) => { const { t } = useTranslation(); const { data, filterWidgets } = useGenericContext(); + const [visibleCount, setVisibleCount] = useState(LIST_SIZE); const joinedTables = useMemo( () => getJoinsFromTableJoins(data?.joins), @@ -48,34 +50,64 @@ export const FrequentlyJoinedTables = ({ } }, [joinedTables]); + const hasMoreElement = useMemo( + () => LIST_SIZE < joinedTables.length, + [joinedTables] + ); + + const handleShowMore = useCallback(() => { + setVisibleCount( + visibleCount === joinedTables.length ? LIST_SIZE : joinedTables.length + ); + }, [joinedTables, visibleCount]); + + const content = useMemo(() => { + return joinedTables.slice(0, visibleCount).map((table) => ( +
+ + + {table.name} + + + {getCountBadge(table.joinCount, '', false)} +
+ )); + }, [joinedTables, visibleCount]); + if (isEmpty(joinedTables)) { return null; } - const content = joinedTables.map((table) => ( - - - - {table.name} - - - {getCountBadge(table.joinCount, '', false)} - - )); - return renderAsExpandableCard ? ( {content} + + {hasMoreElement ? ( + + ) : null} ) : ( <>{content} diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/frequently-joined-tables.style.less b/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/frequently-joined-tables.style.less index 8e50bd05463..f0fec46ee24 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/frequently-joined-tables.style.less +++ b/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/FrequentlyJoinedTables/frequently-joined-tables.style.less @@ -10,15 +10,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@import url('../../../styles/variables.less'); +@import (reference) url('../../../styles/variables.less'); .frequently-joint-data-container { - max-height: 200px; - overflow-y: scroll; - .frequently-joint-data { - .frequently-joint-name { - font-weight: 300; + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-bottom: 8px; + + > a { + flex: 1; + min-width: 0; } } }