diff --git a/openmetadata-ui/src/main/resources/ui/cypress/e2e/Flow/Task.spec.js b/openmetadata-ui/src/main/resources/ui/cypress/e2e/Flow/Task.spec.js index e1adc23b5a7..dc6be6391ed 100644 --- a/openmetadata-ui/src/main/resources/ui/cypress/e2e/Flow/Task.spec.js +++ b/openmetadata-ui/src/main/resources/ui/cypress/e2e/Flow/Task.spec.js @@ -52,6 +52,7 @@ describe('Task flow should work', () => { verifyResponseStatusCode('@suggestApi', 200); cy.get(`[data-testid="assignee-option-${secondAssignee}"]`) + .should('be.visible') .trigger('mouseover') .trigger('click'); @@ -94,6 +95,7 @@ describe('Task flow should work', () => { verifyResponseStatusCode('@suggestApi', 200); cy.get(`[data-testid="assignee-option-${assignee}"]`) + .should('be.visible') .trigger('mouseover') .trigger('click'); @@ -136,6 +138,7 @@ describe('Task flow should work', () => { verifyResponseStatusCode('@suggestApi', 200); cy.get(`[data-testid="assignee-option-${assignee}"]`) + .should('be.visible') .trigger('mouseover') .trigger('click'); diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedDrawer/ActivityFeedDrawer.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedDrawer/ActivityFeedDrawer.tsx index 1816187e81b..3365d43dc51 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedDrawer/ActivityFeedDrawer.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedDrawer/ActivityFeedDrawer.tsx @@ -18,7 +18,6 @@ import { ThreadType } from 'generated/api/feed/createThread'; import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Thread } from '../../../generated/entity/feed/thread'; -import { getEntityField, getEntityFQN } from '../../../utils/FeedUtils'; import ActivityFeedEditor from '../ActivityFeedEditor/ActivityFeedEditor'; import FeedPanelBodyV1 from '../ActivityFeedPanel/FeedPanelBodyV1'; import FeedPanelHeader from '../ActivityFeedPanel/FeedPanelHeader'; @@ -41,10 +40,6 @@ const ActivityFeedDrawer: FC = ({ postFeed, selectedThread, } = useActivityFeedProvider(); - const entityField = selectedThread - ? getEntityField(selectedThread.about) - : ''; - const entityFQN = selectedThread ? getEntityFQN(selectedThread.about) : ''; const onSave = (message: string) => { postFeed(message, selectedThread?.id ?? '').catch(() => { @@ -64,8 +59,7 @@ const ActivityFeedDrawer: FC = ({ ) : ( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.interface.ts index ef0a208e001..10d3796172d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.interface.ts @@ -33,8 +33,7 @@ export interface ActivityFeedPanelProp extends HTMLAttributes { export interface FeedPanelHeaderProp extends HTMLAttributes, Pick { - entityField: string; - entityFQN?: string; + entityLink: string; noun?: string; threadType?: ThreadType; onShowNewConversation?: (v: boolean) => void; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.test.tsx index 1d4a2efae34..fc836066b72 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.test.tsx @@ -19,9 +19,10 @@ import FeedPanelHeader from './FeedPanelHeader'; const mockFeedPanelHeaderProp = { onCancel: jest.fn(), - entityField: 'description', noun: 'Conversations', onShowNewConversation: jest.fn(), + entityLink: + '<#E::table::sample_data.ecommerce_db.shopify.dim_address::description>', }; describe('Test FeedPanelHeader Component', () => { @@ -85,8 +86,7 @@ describe('Test FeedPanelHeader Component', () => { const { container } = render( , { wrapper: MemoryRouter, @@ -95,15 +95,15 @@ describe('Test FeedPanelHeader Component', () => { const entityAttribute = await findByTestId(container, 'entity-attribute'); - expect(entityAttribute).toHaveTextContent(/x.y.z/i); + expect(entityAttribute).toHaveTextContent( + 'ecommerce_db.shopify.dim_address' + ); }); - it('Should render noun according to the threadtype', async () => { + it('Should render noun according to the thread type', async () => { const { container } = render( , diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.tsx index b8a350d6a44..81e4b3dd89b 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/FeedPanelHeader.tsx @@ -15,23 +15,31 @@ import { PlusOutlined } from '@ant-design/icons'; import { Button, Tooltip } from 'antd'; import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom'; +import { getEntityLink } from 'utils/TableUtils'; import { + entityDisplayName, + getEntityField, getEntityFieldDisplay, + getEntityFQN, + getEntityType, getFeedPanelHeaderText, } from '../../../utils/FeedUtils'; import { FeedPanelHeaderProp } from './ActivityFeedPanel.interface'; const FeedPanelHeader: FC = ({ - onCancel, - entityField, className, + entityLink, noun, onShowNewConversation, threadType, - entityFQN = '', + onCancel, hideCloseIcon = false, }) => { const { t } = useTranslation(); + const entityType = getEntityType(entityLink); + const entityFQN = getEntityFQN(entityLink); + const entityField = getEntityField(entityLink); return (
@@ -42,7 +50,16 @@ const FeedPanelHeader: FC = ({ {t('label.on-lowercase')}{' '} - {entityField ? getEntityFieldDisplay(entityField) : entityFQN} + {entityField ? ( + getEntityFieldDisplay(entityField) + ) : ( + + {entityDisplayName(entityType, entityFQN)} + + )}

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 b83c04c0dc0..7b2dd0dc9d5 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 @@ -38,7 +38,6 @@ import { useHistory, useParams } from 'react-router-dom'; import { getAllFeeds, getFeedCount } from 'rest/feedsAPI'; import { getCountBadge, getEntityDetailLink } from 'utils/CommonUtils'; import { ENTITY_LINK_SEPARATOR, getEntityFeedLink } from 'utils/EntityUtils'; -import { getEntityField } from 'utils/FeedUtils'; import '../../Widgets/FeedsWidget/feeds-widget.less'; import ActivityFeedEditor from '../ActivityFeedEditor/ActivityFeedEditor'; import ActivityFeedListV1 from '../ActivityFeedList/ActivityFeedListV1.component'; @@ -241,10 +240,6 @@ export const ActivityFeedTab = ({ }); }; - const entityField = selectedThread - ? getEntityField(selectedThread.about) - : ''; - const threads = useMemo(() => { if (activeTab === ActivityFeedTabs.TASKS) { return entityThread.filter( @@ -407,8 +402,7 @@ export const ActivityFeedTab = ({ diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanelBody.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanelBody.tsx index bf08f9e8991..2acc9f3209e 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanelBody.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanelBody.tsx @@ -31,7 +31,6 @@ import { } from '../../../generated/entity/feed/thread'; import { Paging } from '../../../generated/type/paging'; import { useElementInView } from '../../../hooks/useElementInView'; -import { getEntityField } from '../../../utils/FeedUtils'; import { showErrorToast } from '../../../utils/ToastUtils'; import ErrorPlaceHolder from '../../common/error-with-placeholder/ErrorPlaceHolder'; import Loader from '../../Loader/Loader'; @@ -139,8 +138,6 @@ const ActivityThreadPanelBody: FC = ({ setConfirmationState(data); }; - const entityField = getEntityField(threadLink); - const onShowNewConversation = (value: boolean) => { setShowNewConversation(value); }; @@ -239,7 +236,7 @@ const ActivityThreadPanelBody: FC = ({ {showHeader && isConversationType && ( isAdminUser || isAssignee || isOwner; - - const hasTaskUpdateAccess = () => hasEditAccess() || isPartOfAssigneeTeam; + const hasEditAccess = + isAdminUser || isAssignee || isOwner || Boolean(isPartOfAssigneeTeam); const onSave = (message: string) => { postFeed(message, taskThread?.id ?? '').catch(() => { @@ -266,10 +265,10 @@ export const TaskTab = ({ className="m-t-sm items-end w-full" data-testid="task-cta-buttons" size="small"> - {(isCreator || hasTaskUpdateAccess()) && ( + {(isCreator || hasEditAccess) && ( )} - {hasTaskUpdateAccess() ? ( + {hasEditAccess ? ( <> {['RequestDescription', 'RequestTag'].includes( taskDetails?.type ?? '' @@ -428,7 +427,7 @@ export const TaskTab = ({ profileWidth="24" showUserName={false} /> - {(isCreator || hasTaskUpdateAccess()) && !isTaskClosed ? ( + {(isCreator || hasEditAccess) && !isTaskClosed ? (