diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.component.tsx index 24844e23807..430c68d72a0 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.component.tsx @@ -61,6 +61,7 @@ export const ActivityFeedTab = ({ description, columns, entityType, + onUpdateEntityDetails, }: ActivityFeedTabProps) => { const history = useHistory(); const { t } = useTranslation(); @@ -395,6 +396,7 @@ export const ActivityFeedTab = ({ owner={owner} tags={tags} task={selectedThread} + onUpdateEntityDetails={onUpdateEntityDetails} /> ) : ( )} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.interface.ts index c299a076f05..67f918c2471 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedTab/ActivityFeedTab.interface.ts @@ -26,6 +26,7 @@ export enum ActivityFeedTabs { export interface ActivityFeedTabBasicProps { fqn: string; onFeedUpdate: () => void; + onUpdateEntityDetails?: () => void; owner?: EntityReference; tags?: TagLabel[]; description?: string; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.component.tsx index 2b7ef544489..7f90f348a4e 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.component.tsx @@ -34,6 +34,7 @@ import { import { getDashboardDetailsPath } from 'constants/constants'; import { compare } from 'fast-json-patch'; import { TagSource } from 'generated/type/schema'; +import { EntityFieldThreadCount } from 'interface/feed.interface'; import { isEmpty, isUndefined, map } from 'lodash'; import { EntityTags, TagOption } from 'Models'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; @@ -52,7 +53,11 @@ import { EntityTabs, EntityType } from '../../enums/entity.enum'; import { Dashboard } from '../../generated/entity/data/dashboard'; import { ThreadType } from '../../generated/entity/feed/thread'; import { LabelType, State, TagLabel } from '../../generated/type/tagLabel'; -import { getCurrentUserId, refreshPage } from '../../utils/CommonUtils'; +import { + getCurrentUserId, + getFeedCounts, + refreshPage, +} from '../../utils/CommonUtils'; import { getEntityFieldThreadCounts } from '../../utils/FeedUtils'; import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils'; import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils'; @@ -79,10 +84,7 @@ const DashboardDetails = ({ chartDescriptionUpdateHandler, chartTagUpdateHandler, versionHandler, - feedCount, - entityFieldThreadCount, createThread, - entityFieldTaskCount, onDashboardUpdate, }: DashboardDetailsProps) => { const { t } = useTranslation(); @@ -96,6 +98,13 @@ const DashboardDetails = ({ chart: ChartType; index: number; }>(); + const [feedCount, setFeedCount] = useState(0); + const [entityFieldThreadCount, setEntityFieldThreadCount] = useState< + EntityFieldThreadCount[] + >([]); + const [entityFieldTaskCount, setEntityFieldTaskCount] = useState< + EntityFieldThreadCount[] + >([]); const [tagFetchFailed, setTagFetchFailed] = useState(false); const [isTagLoading, setIsTagLoading] = useState(false); @@ -182,6 +191,20 @@ const DashboardDetails = ({ } }, []); + const getEntityFeedCount = () => { + getFeedCounts( + EntityType.DASHBOARD, + dashboardFQN, + setEntityFieldThreadCount, + setEntityFieldTaskCount, + setFeedCount + ); + }; + + useEffect(() => { + getEntityFeedCount(); + }, [dashboardFQN]); + const getAllChartsPermissions = useCallback( async (charts: ChartType[]) => { const permissionsArray: Array = []; @@ -690,7 +713,7 @@ const DashboardDetails = ({ Promise.resolve()} + onFeedUpdate={getEntityFeedCount} /> ), diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.interface.ts index 9ce9228a4b6..05be62cf3d4 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.interface.ts @@ -16,7 +16,6 @@ import { Operation } from 'fast-json-patch'; import { CreateThread } from '../../generated/api/feed/createThread'; import { Chart } from '../../generated/entity/data/chart'; import { Dashboard } from '../../generated/entity/data/dashboard'; -import { EntityFieldThreadCount } from '../../interface/feed.interface'; export interface ChartType extends Chart { displayName: string; @@ -29,9 +28,6 @@ export interface ChartsPermissions { export interface DashboardDetailsProps { charts: Array; dashboardDetails: Dashboard; - feedCount: number; - entityFieldThreadCount: EntityFieldThreadCount[]; - entityFieldTaskCount: EntityFieldThreadCount[]; createThread: (data: CreateThread) => void; followDashboardHandler: () => Promise; unFollowDashboardHandler: () => Promise; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.test.tsx index 0a734efa37b..ed50c1d3d62 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DashboardDetails/DashboardDetails.test.tsx @@ -65,9 +65,6 @@ const dashboardDetailsProps: DashboardDetailsProps = { chartTagUpdateHandler: jest.fn(), onDashboardUpdate: jest.fn(), versionHandler: jest.fn(), - feedCount: 0, - entityFieldThreadCount: [], - entityFieldTaskCount: [], createThread: jest.fn(), }; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.component.tsx index b9756f57e32..49551b94b84 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.component.tsx @@ -30,11 +30,13 @@ import { EntityField } from 'constants/Feeds.constants'; import { CSMode } from 'enums/codemirror.enum'; import { EntityTabs, EntityType } from 'enums/entity.enum'; import { LabelType, State, TagLabel, TagSource } from 'generated/type/tagLabel'; -import { isUndefined, toString } from 'lodash'; +import { EntityFieldThreadCount } from 'interface/feed.interface'; +import { isUndefined, noop, toString } from 'lodash'; import { EntityTags } from 'Models'; -import React, { useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useHistory, useParams } from 'react-router-dom'; +import { getFeedCounts } from 'utils/CommonUtils'; import { getEntityName, getEntityThreadLink } from 'utils/EntityUtils'; import { getEntityFieldThreadCounts } from 'utils/FeedUtils'; import { getTagsWithoutTier } from 'utils/TableUtils'; @@ -42,8 +44,6 @@ import { DataModelDetailsProps } from './DataModelDetails.interface'; import ModelTab from './ModelTab/ModelTab.component'; const DataModelDetails = ({ - entityFieldThreadCount, - feedCount, dataModelData, dataModelPermissions, createThread, @@ -63,6 +63,10 @@ const DataModelDetails = ({ const [isEditDescription, setIsEditDescription] = useState(false); const [threadLink, setThreadLink] = useState(''); + const [feedCount, setFeedCount] = useState(0); + const [entityFieldThreadCount, setEntityFieldThreadCount] = useState< + EntityFieldThreadCount[] + >([]); const { hasEditDescriptionPermission, @@ -91,6 +95,20 @@ const DataModelDetails = ({ }; }, [dataModelData]); + const getEntityFeedCount = () => { + getFeedCounts( + EntityType.DASHBOARD_DATA_MODEL, + dashboardDataModelFQN, + setEntityFieldThreadCount, + noop, + setFeedCount + ); + }; + + useEffect(() => { + dashboardDataModelFQN && getEntityFeedCount(); + }, [dashboardDataModelFQN]); + const handleUpdateDisplayName = async (data: EntityName) => { if (isUndefined(dataModelData)) { return; @@ -247,7 +265,7 @@ const DataModelDetails = ({ Promise.resolve()} + onFeedUpdate={getEntityFeedCount} /> ), diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.interface.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.interface.tsx index 7ce1ac139c1..94b22ac03fa 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.interface.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DataModels/DataModelDetails.interface.tsx @@ -16,12 +16,9 @@ import { CreateThread } from 'generated/api/feed/createThread'; import { DashboardDataModel } from 'generated/entity/data/dashboardDataModel'; import { Column } from 'generated/entity/data/table'; import { EntityReference } from 'generated/entity/type'; -import { EntityFieldThreadCount } from 'interface/feed.interface'; import { EntityTags } from 'Models'; export interface DataModelDetailsProps { - entityFieldThreadCount: EntityFieldThreadCount[]; - feedCount: number; dataModelData: DashboardDataModel; dataModelPermissions: OperationPermission; createThread: (data: CreateThread) => void; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx index abdd28105ee..0f806dfe59d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx @@ -25,6 +25,7 @@ import { EntityName } from 'components/Modals/EntityNameModal/EntityNameModal.in import TabsLabel from 'components/TabsLabel/TabsLabel.component'; import TagsContainerV1 from 'components/Tag/TagsContainerV1/TagsContainerV1'; import { TagLabel, TagSource } from 'generated/type/schema'; +import { EntityFieldThreadCount } from 'interface/feed.interface'; import { isEmpty } from 'lodash'; import { EntityTags } from 'Models'; import React, { FC, useCallback, useEffect, useMemo, useState } from 'react'; @@ -40,7 +41,11 @@ import { MlHyperParameter } from '../../generated/api/data/createMlModel'; import { Mlmodel, MlStore } from '../../generated/entity/data/mlmodel'; import { ThreadType } from '../../generated/entity/feed/thread'; import { LabelType, State } from '../../generated/type/tagLabel'; -import { getEmptyPlaceholder, refreshPage } from '../../utils/CommonUtils'; +import { + getEmptyPlaceholder, + getFeedCounts, + refreshPage, +} from '../../utils/CommonUtils'; import { getEntityFieldThreadCounts } from '../../utils/FeedUtils'; import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils'; import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils'; @@ -62,10 +67,8 @@ const MlModelDetail: FC = ({ settingsUpdateHandler, updateMlModelFeatures, onExtensionUpdate, - feedCount, + createThread, - entityFieldTaskCount, - entityFieldThreadCount, versionHandler, tagUpdateHandler, }) => { @@ -76,6 +79,13 @@ const MlModelDetail: FC = ({ useParams<{ tab: EntityTabs; mlModelFqn: string }>(); const [isEdit, setIsEdit] = useState(false); + const [feedCount, setFeedCount] = useState(0); + const [entityFieldThreadCount, setEntityFieldThreadCount] = useState< + EntityFieldThreadCount[] + >([]); + const [entityFieldTaskCount, setEntityFieldTaskCount] = useState< + EntityFieldThreadCount[] + >([]); const [mlModelPermissions, setPipelinePermissions] = useState( DEFAULT_ENTITY_PERMISSION @@ -127,6 +137,22 @@ const MlModelDetail: FC = ({ }; }, [mlModelDetail]); + const fetchEntityFeedCount = () => { + getFeedCounts( + EntityType.MLMODEL, + mlModelFqn, + setEntityFieldThreadCount, + setEntityFieldTaskCount, + setFeedCount + ); + }; + + useEffect(() => { + if (mlModelPermissions.ViewAll || mlModelPermissions.ViewBasic) { + fetchEntityFeedCount(); + } + }, [mlModelPermissions, mlModelFqn]); + const handleTabChange = (activeKey: string) => { if (activeKey !== activeTab) { history.push(getMlModelDetailsPath(mlModelFqn, activeKey)); @@ -442,7 +468,7 @@ const MlModelDetail: FC = ({ Promise.resolve()} + onFeedUpdate={fetchEntityFeedCount} /> ), diff --git a/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.interface.ts index fda74efc23b..3a725eb7a43 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.interface.ts @@ -14,12 +14,10 @@ import { HTMLAttributes } from 'react'; import { CreateThread } from '../../generated/api/feed/createThread'; import { Mlmodel } from '../../generated/entity/data/mlmodel'; -import { EntityFieldThreadCount } from '../../interface/feed.interface'; export interface MlModelDetailProp extends HTMLAttributes { mlModelDetail: Mlmodel; version?: string; - feedCount: number; followMlModelHandler: () => Promise; unFollowMlModelHandler: () => Promise; descriptionUpdateHandler: (updatedMlModel: Mlmodel) => Promise; @@ -28,7 +26,5 @@ export interface MlModelDetailProp extends HTMLAttributes { settingsUpdateHandler: (updatedMlModel: Mlmodel) => Promise; versionHandler: () => void; onExtensionUpdate: (updatedMlModel: Mlmodel) => Promise; - entityFieldThreadCount: EntityFieldThreadCount[]; - entityFieldTaskCount: EntityFieldThreadCount[]; createThread: (data: CreateThread) => void; } diff --git a/openmetadata-ui/src/main/resources/ui/src/components/PipelineDetails/PipelineDetails.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/PipelineDetails/PipelineDetails.component.tsx index b9e271e1c30..591d666f898 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/PipelineDetails/PipelineDetails.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/PipelineDetails/PipelineDetails.component.tsx @@ -700,7 +700,7 @@ const PipelineDetails = ({ Promise.resolve()} + onFeedUpdate={getEntityFeedCount} /> ), diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.component.tsx index 7ba31bc9e43..efac3cb6b81 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.component.tsx @@ -158,6 +158,7 @@ export const TaskTab = ({ updateTask(TaskOperation.RESOLVE, taskDetails?.id + '', data) .then(() => { showSuccessToast(t('server.task-resolved-successfully')); + rest.onUpdateEntityDetails?.(); history.push(getEntityLink(entityType ?? '', entityFQN ?? '')); }) .catch((err: AxiosError) => showErrorToast(err)); diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.interface.ts index 44cfac07f6f..de784903b57 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/Task/TaskTab/TaskTab.interface.ts @@ -20,6 +20,7 @@ export type TaskTabProps = { task: Thread; owner?: EntityReference; tags?: TagLabel[]; + onUpdateEntityDetails?: () => void; description?: string; } & ( | TableTaskTabProps diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Team/TeamDetails/TeamDetailsV1.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Team/TeamDetails/TeamDetailsV1.tsx index 743b7825b3d..cfb166ed338 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Team/TeamDetails/TeamDetailsV1.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Team/TeamDetails/TeamDetailsV1.tsx @@ -1077,7 +1077,7 @@ const TeamDetailsV1 = ({ onChange={updateActiveTab} /> -
+
{currentTab === TeamsPageTab.TEAMS && (currentTeam.childrenCount === 0 && !searchTerm ? ( fetchErrorPlaceHolder({ @@ -1113,6 +1113,7 @@ const TeamDetailsV1 = ({ {t('label.deleted')} +