From eb436adcb2f5877ece2225e450e14eee318b2def Mon Sep 17 00:00:00 2001
From: Sachin Chaurasiya
Date: Mon, 14 Mar 2022 19:21:10 +0530
Subject: [PATCH] UI: Add support for deleting a post in table entity (#3405)
* UI: Add support for deleting a post in table entity
* Addressing review comment
---
.../resources/ui/src/axiosAPIs/feedsAPI.ts | 7 +
.../ActivityFeedCard.interface.ts | 61 +++++++++
.../ActivityFeedCard/ActivityFeedCard.tsx | 122 +++++++++++-------
.../ActivityFeedList.interface.ts | 44 +++++++
.../ActivityFeedList/ActivityFeedList.tsx | 44 ++-----
.../ActivityFeedPanel.interface.ts | 40 ++++++
.../ActivityFeedPanel/ActivityFeedPanel.tsx | 42 ++----
.../ActivityThreadPanel.interface.ts | 42 ++++++
.../ActivityThreadPanel.tsx | 52 ++++----
.../DatasetDetails.component.tsx | 3 +
.../DatasetDetails.interface.ts | 1 +
.../DatasetDetails/DatasetDetails.test.tsx | 1 +
.../ConfirmationModal/ConfirmationModal.tsx | 6 +-
.../resources/ui/src/interface/types.d.ts | 1 +
.../DatasetDetailsPage.component.tsx | 26 ++++
.../pages/tour-page/TourPage.component.tsx | 1 +
16 files changed, 358 insertions(+), 135 deletions(-)
create mode 100644 openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.interface.ts
create mode 100644 openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.interface.ts
create mode 100644 openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.interface.ts
create mode 100644 openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.interface.ts
diff --git a/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/feedsAPI.ts b/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/feedsAPI.ts
index 04e68ef08af..2cab180a9d6 100644
--- a/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/feedsAPI.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/feedsAPI.ts
@@ -74,3 +74,10 @@ export const postFeedById: Function = (
): Promise => {
return APIClient.post(`/feed/${id}/posts`, data);
};
+
+export const deletePostById: Function = (
+ threadId: string,
+ postId: string
+): Promise => {
+ return APIClient.delete(`/feed/${threadId}/posts/${postId}`);
+};
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.interface.ts
new file mode 100644
index 00000000000..9cf2606c858
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.interface.ts
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2021 Collate
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Post } from 'Models';
+import { HTMLAttributes } from 'react';
+
+export interface ConfirmState {
+ state: boolean;
+ threadId: string | undefined;
+ postId: string | undefined;
+}
+export interface ActivityFeedCardProp extends HTMLAttributes {
+ feed: Post;
+ entityLink?: string;
+ repliedUsers?: Array;
+ replies?: number;
+ isEntityFeed?: boolean;
+ threadId?: string;
+ lastReplyTimeStamp?: number;
+ isFooterVisible?: boolean;
+ onThreadSelect?: (id: string) => void;
+ deletePostHandler?: (threadId: string, postId: string) => void;
+}
+export interface FeedHeaderProp
+ extends HTMLAttributes,
+ Pick {
+ createdBy: string;
+ timeStamp: number;
+ entityType: string;
+ entityFQN: string;
+ entityField: string;
+}
+export interface FeedBodyProp
+ extends HTMLAttributes,
+ Pick {
+ message: string;
+ postId: string;
+ threadId: string;
+ onConfirmation: (data: ConfirmState) => void;
+}
+export interface FeedFooterProp
+ extends HTMLAttributes,
+ Pick<
+ ActivityFeedCardProp,
+ | 'replies'
+ | 'repliedUsers'
+ | 'threadId'
+ | 'onThreadSelect'
+ | 'lastReplyTimeStamp'
+ | 'isFooterVisible'
+ > {}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.tsx
index 4bd25c31afb..2e7978b9128 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCard/ActivityFeedCard.tsx
@@ -14,8 +14,7 @@
import { AxiosResponse } from 'axios';
import classNames from 'classnames';
import { isUndefined, toLower } from 'lodash';
-import { Post } from 'Models';
-import React, { FC, Fragment, HTMLAttributes, useState } from 'react';
+import React, { FC, Fragment, useState } from 'react';
import { Link } from 'react-router-dom';
import AppState from '../../../AppState';
import { getUserByName } from '../../../axiosAPIs/userAPI';
@@ -36,41 +35,14 @@ import Avatar from '../../common/avatar/Avatar';
import PopOver from '../../common/popover/PopOver';
import RichTextEditorPreviewer from '../../common/rich-text-editor/RichTextEditorPreviewer';
import Loader from '../../Loader/Loader';
-
-interface ActivityFeedCardProp extends HTMLAttributes {
- feed: Post;
- entityLink?: string;
- repliedUsers?: Array;
- replies?: number;
- isEntityFeed?: boolean;
- threadId?: string;
- lastReplyTimeStamp?: number;
- isFooterVisible?: boolean;
- onThreadSelect?: (id: string) => void;
-}
-interface FeedHeaderProp
- extends HTMLAttributes,
- Pick {
- createdBy: string;
- timeStamp: number;
- entityType: string;
- entityFQN: string;
- entityField: string;
-}
-interface FeedBodyProp extends HTMLAttributes {
- message: string;
-}
-interface FeedFooterProp
- extends HTMLAttributes,
- Pick<
- ActivityFeedCardProp,
- | 'replies'
- | 'repliedUsers'
- | 'threadId'
- | 'onThreadSelect'
- | 'lastReplyTimeStamp'
- | 'isFooterVisible'
- > {}
+import ConfirmationModal from '../../Modals/ConfirmationModal/ConfirmationModal';
+import {
+ ActivityFeedCardProp,
+ ConfirmState,
+ FeedBodyProp,
+ FeedFooterProp,
+ FeedHeaderProp,
+} from './ActivityFeedCard.interface';
const FeedHeader: FC = ({
className,
@@ -230,15 +202,31 @@ const FeedHeader: FC = ({
);
};
-const FeedBody: FC = ({ message, className }) => {
+const FeedBody: FC = ({
+ message,
+ className,
+ threadId,
+ postId,
+ deletePostHandler,
+ onConfirmation,
+}) => {
return (
-
-
-
+
+
+
+ {threadId && postId && deletePostHandler ? (
+ onConfirmation({ state: true, postId, threadId })}>
+
+
+ ) : null}
+
+
);
};
@@ -296,11 +284,37 @@ const ActivityFeedCard: FC = ({
lastReplyTimeStamp,
onThreadSelect,
isFooterVisible = false,
+ deletePostHandler,
}) => {
const entityType = getEntityType(entityLink as string);
const entityFQN = getEntityFQN(entityLink as string);
const entityField = getEntityField(entityLink as string);
+ const [confirmationState, setConfirmationState] = useState({
+ state: false,
+ threadId: undefined,
+ postId: undefined,
+ });
+
+ const onCancel = () => {
+ setConfirmationState({
+ state: false,
+ threadId: undefined,
+ postId: undefined,
+ });
+ };
+
+ const onDelete = () => {
+ if (confirmationState.postId && confirmationState.threadId) {
+ deletePostHandler?.(confirmationState.threadId, confirmationState.postId);
+ }
+ onCancel();
+ };
+
+ const onConfirmation = (data: ConfirmState) => {
+ setConfirmationState(data);
+ };
+
return (
= ({
timeStamp={feed.postTs}
/>
= ({
threadId={threadId}
onThreadSelect={onThreadSelect}
/>
+ {confirmationState.state && (
+
+ )}
);
};
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.interface.ts
new file mode 100644
index 00000000000..fc67e01020f
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.interface.ts
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2021 Collate
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { EntityThread } from 'Models';
+import { HTMLAttributes } from 'react';
+
+export interface ActivityFeedListProp extends HTMLAttributes {
+ feedList: EntityThread[];
+ withSidePanel?: boolean;
+ isEntityFeed?: boolean;
+ entityName?: string;
+ postFeedHandler?: (value: string, id: string) => void;
+ deletePostHandler?: (threadId: string, postId: string) => void;
+}
+
+export interface FeedListSeparatorProp extends HTMLAttributes {
+ relativeDay: string;
+}
+
+export interface FeedListBodyProp
+ extends HTMLAttributes,
+ Pick,
+ Pick<
+ ActivityFeedListProp,
+ 'isEntityFeed' | 'withSidePanel' | 'deletePostHandler'
+ > {
+ updatedFeedList: Array;
+ selctedThreadId: string;
+ onThreadIdSelect: (value: string) => void;
+ onThreadIdDeselect: () => void;
+ onThreadSelect: (value: string) => void;
+ postFeed: (value: string) => void;
+ onViewMore: () => void;
+}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.tsx
index 6b4ba1aec23..049615ecd1c 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedList/ActivityFeedList.tsx
@@ -14,13 +14,7 @@
import classNames from 'classnames';
import { isUndefined } from 'lodash';
import { EntityThread } from 'Models';
-import React, {
- FC,
- Fragment,
- HTMLAttributes,
- useEffect,
- useState,
-} from 'react';
+import React, { FC, Fragment, useEffect, useState } from 'react';
import { withLoader } from '../../../hoc/withLoader';
import { getFeedListWithRelativeDays } from '../../../utils/FeedUtils';
import ActivityFeedCard, {
@@ -29,30 +23,11 @@ import ActivityFeedCard, {
import ActivityFeedEditor from '../ActivityFeedEditor/ActivityFeedEditor';
import ActivityFeedPanel from '../ActivityFeedPanel/ActivityFeedPanel';
import NoFeedPlaceholder from '../NoFeedPlaceholder/NoFeedPlaceholder';
-
-interface ActivityFeedListProp extends HTMLAttributes {
- feedList: EntityThread[];
- withSidePanel?: boolean;
- isEntityFeed?: boolean;
- entityName?: string;
- postFeedHandler?: (value: string, id: string) => void;
-}
-interface FeedListSeparatorProp extends HTMLAttributes {
- relativeDay: string;
-}
-
-interface FeedListBodyProp
- extends HTMLAttributes,
- Pick,
- Pick {
- updatedFeedList: Array;
- selctedThreadId: string;
- onThreadIdSelect: (value: string) => void;
- onThreadIdDeselect: () => void;
- onThreadSelect: (value: string) => void;
- postFeed: (value: string) => void;
- onViewMore: () => void;
-}
+import {
+ ActivityFeedListProp,
+ FeedListBodyProp,
+ FeedListSeparatorProp,
+} from './ActivityFeedList.interface';
export const FeedListSeparator: FC = ({
className,
@@ -81,6 +56,7 @@ const FeedListBody: FC = ({
postFeed,
onViewMore,
selctedThreadId,
+ deletePostHandler,
}) => {
return (
@@ -91,6 +67,7 @@ const FeedListBody: FC = ({
message: feed.message,
postTs: feed.threadTs,
from: feed.createdBy,
+ id: feed.id,
};
const postLength = feed.posts.length;
const replies = feed.postsCount - 1;
@@ -128,8 +105,10 @@ const FeedListBody: FC = ({
) : null}
= ({
isEntityFeed = false,
postFeedHandler,
entityName,
+ deletePostHandler,
}) => {
const { updatedFeedList, relativeDays } =
getFeedListWithRelativeDays(feedList);
@@ -234,6 +214,7 @@ const ActivityFeedList: FC = ({
relativeDay={d}
/>
= ({
{withSidePanel && selectedThread && isPanelOpen ? (
{
+ selectedThread: EntityThread;
+ open?: boolean;
+ onCancel: () => void;
+ postFeed: (value: string) => void;
+ deletePostHandler?: (threadId: string, postId: string) => void;
+}
+
+export interface FeedPanelHeaderProp
+ extends HTMLAttributes,
+ Pick {
+ entityField: string;
+ noun?: string;
+ onShowNewConversation?: (v: boolean) => void;
+}
+export interface FeedPanelOverlayProp
+ extends HTMLAttributes,
+ Pick {}
+export interface FeedPanelBodyProp
+ extends HTMLAttributes,
+ Pick {
+ threadData: EntityThread;
+ isLoading: boolean;
+}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.tsx
index f767580961b..8bc71be0760 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedPanel/ActivityFeedPanel.tsx
@@ -15,13 +15,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { AxiosResponse } from 'axios';
import classNames from 'classnames';
import { EntityThread, Post } from 'Models';
-import React, {
- FC,
- Fragment,
- HTMLAttributes,
- useEffect,
- useState,
-} from 'react';
+import React, { FC, Fragment, useEffect, useState } from 'react';
import { getFeedById } from '../../../axiosAPIs/feedsAPI';
import { getEntityField, getReplyText } from '../../../utils/FeedUtils';
import { Button } from '../../buttons/Button/Button';
@@ -29,28 +23,12 @@ import PopOver from '../../common/popover/PopOver';
import Loader from '../../Loader/Loader';
import ActivityFeedCard from '../ActivityFeedCard/ActivityFeedCard';
import ActivityFeedEditor from '../ActivityFeedEditor/ActivityFeedEditor';
-
-interface ActivityFeedPanelProp extends HTMLAttributes {
- selectedThread: EntityThread;
- open?: boolean;
- onCancel: () => void;
- postFeed: (value: string) => void;
-}
-
-interface FeedPanelHeaderProp
- extends HTMLAttributes,
- Pick {
- entityField: string;
- noun?: string;
- onShowNewConversation?: (v: boolean) => void;
-}
-interface FeedPanelOverlayProp
- extends HTMLAttributes,
- Pick {}
-interface FeedPanelBodyProp extends HTMLAttributes {
- threadData: EntityThread;
- isLoading: boolean;
-}
+import {
+ ActivityFeedPanelProp,
+ FeedPanelBodyProp,
+ FeedPanelHeaderProp,
+ FeedPanelOverlayProp,
+} from './ActivityFeedPanel.interface';
export const FeedPanelHeader: FC = ({
onCancel,
@@ -118,12 +96,14 @@ const FeedPanelBody: FC = ({
threadData,
className,
isLoading,
+ deletePostHandler,
}) => {
const repliesLength = threadData?.posts?.length ?? 0;
const mainThread = {
message: threadData.message,
from: threadData.createdBy,
postTs: threadData.threadTs,
+ id: threadData.id,
};
return (
@@ -151,8 +131,10 @@ const FeedPanelBody: FC = ({
))}
@@ -169,6 +151,7 @@ const ActivityFeedPanel: FC = ({
onCancel,
className,
postFeed,
+ deletePostHandler,
}) => {
const [threadData, setThreadData] = useState(selectedThread);
const [isLoading, setIsLoading] = useState(false);
@@ -204,6 +187,7 @@ const ActivityFeedPanel: FC = ({
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.interface.ts
new file mode 100644
index 00000000000..b6f8094c38e
--- /dev/null
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.interface.ts
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2021 Collate
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { EntityThread } from 'Models';
+import { HTMLAttributes } from 'react';
+import { CreateThread } from '../../../generated/api/feed/createThread';
+
+export interface ActivityThreadPanelProp
+ extends HTMLAttributes {
+ threadLink: string;
+ open?: boolean;
+ postFeedHandler: (value: string, id: string) => void;
+ onCancel: () => void;
+ createThread: (data: CreateThread) => void;
+ deletePostHandler?: (threadId: string, postId: string) => void;
+}
+
+export interface ActivityThreadListProp
+ extends HTMLAttributes,
+ Pick {
+ threads: EntityThread[];
+ selectedThreadId: string;
+ postFeed: (value: string) => void;
+ onThreadIdSelect: (value: string) => void;
+ onThreadSelect: (value: string) => void;
+}
+export interface ActivityThreadProp
+ extends HTMLAttributes,
+ Pick {
+ selectedThread: EntityThread;
+ postFeed: (value: string) => void;
+}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.tsx
index 8004a0756d2..bf26df2af09 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityThreadPanel/ActivityThreadPanel.tsx
@@ -15,16 +15,9 @@ import { AxiosResponse } from 'axios';
import classNames from 'classnames';
import { isUndefined } from 'lodash';
import { EntityThread, Post } from 'Models';
-import React, {
- FC,
- Fragment,
- HTMLAttributes,
- useEffect,
- useState,
-} from 'react';
+import React, { FC, Fragment, useEffect, useState } from 'react';
import AppState from '../../../AppState';
import { getAllFeeds, getFeedById } from '../../../axiosAPIs/feedsAPI';
-import { CreateThread } from '../../../generated/api/feed/createThread';
import {
getEntityField,
getFeedListWithRelativeDays,
@@ -39,26 +32,11 @@ import {
FeedPanelHeader,
FeedPanelOverlay,
} from '../ActivityFeedPanel/ActivityFeedPanel';
-
-interface ActivityThreadPanelProp extends HTMLAttributes {
- threadLink: string;
- open?: boolean;
- postFeedHandler: (value: string, id: string) => void;
- onCancel: () => void;
- createThread: (data: CreateThread) => void;
-}
-
-interface ActivityThreadListProp extends HTMLAttributes {
- threads: EntityThread[];
- selectedThreadId: string;
- postFeed: (value: string) => void;
- onThreadIdSelect: (value: string) => void;
- onThreadSelect: (value: string) => void;
-}
-interface ActivityThreadProp extends HTMLAttributes {
- selectedThread: EntityThread;
- postFeed: (value: string) => void;
-}
+import {
+ ActivityThreadListProp,
+ ActivityThreadPanelProp,
+ ActivityThreadProp,
+} from './ActivityThreadPanel.interface';
const ActivityThreadList: FC = ({
className,
@@ -67,6 +45,7 @@ const ActivityThreadList: FC = ({
postFeed,
onThreadIdSelect,
onThreadSelect,
+ deletePostHandler,
}) => {
const { updatedFeedList: updatedThreads, relativeDays } =
getFeedListWithRelativeDays(threads);
@@ -87,6 +66,7 @@ const ActivityThreadList: FC = ({
message: thread.message,
postTs: thread.threadTs,
from: thread.createdBy,
+ id: thread.id,
};
const postLength = thread.posts.length;
const replies = thread.postsCount - 1;
@@ -123,7 +103,9 @@ const ActivityThreadList: FC = ({
= ({
className,
selectedThread,
postFeed,
+ deletePostHandler,
}) => {
const [threadData, setThreadData] = useState(selectedThread);
const repliesLength = threadData?.posts?.length ?? 0;
@@ -168,6 +151,7 @@ const ActivityThread: FC = ({
message: threadData.message,
from: threadData.createdBy,
postTs: threadData.threadTs,
+ id: threadData.id,
};
useEffect(() => {
@@ -198,8 +182,10 @@ const ActivityThread: FC = ({
))}
@@ -221,6 +207,7 @@ const ActivityThreadPanel: FC = ({
open,
postFeedHandler,
createThread,
+ deletePostHandler,
}) => {
const [threads, setThreads] = useState([]);
const [selectedThread, setSelectedThread] = useState();
@@ -276,6 +263,13 @@ const ActivityThreadPanel: FC = ({
}, 500);
};
+ const onPostDelete = (threadId: string, postId: string) => {
+ deletePostHandler?.(threadId, postId);
+ setTimeout(() => {
+ getThreads();
+ }, 500);
+ };
+
useEffect(() => {
const escapeKeyHandler = (e: KeyboardEvent) => {
if (e.key === 'Escape') {
@@ -332,6 +326,7 @@ const ActivityThreadPanel: FC = ({
@@ -353,6 +348,7 @@ const ActivityThreadPanel: FC = ({
) : null}
= ({
qualityTestFormHandler,
handleSelectedColumn,
selectedColumn,
+ deletePostHandler,
}: DatasetDetailsProps) => {
const { isAuthDisabled } = useAuthContext();
const [isEdit, setIsEdit] = useState(false);
@@ -565,6 +566,7 @@ const DatasetDetails: React.FC = ({
{threadLink ? (
= ({
isEntityFeed
withSidePanel
className=""
+ deletePostHandler={deletePostHandler}
entityName={entityName}
feedList={entityThread}
isLoading={isentityThreadLoading}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.interface.ts
index d7469fde0b9..e43a51b0022 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.interface.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.interface.ts
@@ -108,4 +108,5 @@ export interface DatasetDetailsProps {
columnName: string,
testType: ColumnTestType
) => void;
+ deletePostHandler: (threadId: string, postId: string) => void;
}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.test.tsx
index 71a26a08aa4..fdcfd3b5148 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.test.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DatasetDetails/DatasetDetails.test.tsx
@@ -109,6 +109,7 @@ const DatasetDetailsProps = {
handleRemoveColumnTest: jest.fn(),
handleTestModeChange: jest.fn(),
qualityTestFormHandler: jest.fn(),
+ deletePostHandler: jest.fn(),
};
jest.mock('../ManageTab/ManageTab.component', () => {
return jest.fn().mockReturnValue(ManageTab
);
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Modals/ConfirmationModal/ConfirmationModal.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Modals/ConfirmationModal/ConfirmationModal.tsx
index e15efb12054..586ea6aa0dd 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Modals/ConfirmationModal/ConfirmationModal.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Modals/ConfirmationModal/ConfirmationModal.tsx
@@ -17,6 +17,7 @@ import React, { ReactNode } from 'react';
import { Button } from '../../buttons/Button/Button';
import Loader from '../../Loader/Loader';
type Props = {
+ className?: string;
loadingState?: LoadingState;
cancelText: string | ReactNode;
confirmText: string | ReactNode;
@@ -43,9 +44,12 @@ const ConfirmationModal = ({
onConfirm,
onCancel,
bodyText,
+ className,
}: Props) => {
return (
-