mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-08-23 00:18:06 +00:00
fix comment editor issue (#20362)
This commit is contained in:
parent
fc30e69442
commit
d60fd97e17
@ -14,7 +14,7 @@ import { Card, Col, Input, Space, Tooltip, Typography } from 'antd';
|
|||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { compare } from 'fast-json-patch';
|
import { compare } from 'fast-json-patch';
|
||||||
import { isUndefined } from 'lodash';
|
import { isUndefined } from 'lodash';
|
||||||
import React, { useMemo, useState } from 'react';
|
import React, { useEffect, useMemo, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { ASSET_CARD_STYLES } from '../../../constants/Feeds.constants';
|
import { ASSET_CARD_STYLES } from '../../../constants/Feeds.constants';
|
||||||
@ -75,6 +75,10 @@ const ActivityFeedCardNew = ({
|
|||||||
const [isEditPost, setIsEditPost] = useState<boolean>(false);
|
const [isEditPost, setIsEditPost] = useState<boolean>(false);
|
||||||
const { updateFeed } = useActivityFeedProvider();
|
const { updateFeed } = useActivityFeedProvider();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setShowFeedEditor(false);
|
||||||
|
}, [feed.id]);
|
||||||
|
|
||||||
const onSave = (message: string) => {
|
const onSave = (message: string) => {
|
||||||
postFeed(message, selectedThread?.id ?? '').catch(() => {
|
postFeed(message, selectedThread?.id ?? '').catch(() => {
|
||||||
// ignore since error is displayed in toast in the parent promise.
|
// ignore since error is displayed in toast in the parent promise.
|
||||||
@ -194,6 +198,10 @@ const ActivityFeedCardNew = ({
|
|||||||
</Tooltip>
|
</Tooltip>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
|
const closeFeedEditor = () => {
|
||||||
|
setShowFeedEditor(false);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card
|
<Card
|
||||||
className={classNames(
|
className={classNames(
|
||||||
@ -331,6 +339,7 @@ const ActivityFeedCardNew = ({
|
|||||||
.sort((a, b) => (b.postTs as number) - (a.postTs as number))
|
.sort((a, b) => (b.postTs as number) - (a.postTs as number))
|
||||||
.map((reply, index, arr) => (
|
.map((reply, index, arr) => (
|
||||||
<CommentCard
|
<CommentCard
|
||||||
|
closeFeedEditor={closeFeedEditor}
|
||||||
feed={feed}
|
feed={feed}
|
||||||
isLastReply={index === arr.length - 1}
|
isLastReply={index === arr.length - 1}
|
||||||
key={reply.id}
|
key={reply.id}
|
||||||
|
@ -13,7 +13,13 @@
|
|||||||
import { Tooltip, Typography } from 'antd';
|
import { Tooltip, Typography } from 'antd';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { compare } from 'fast-json-patch';
|
import { compare } from 'fast-json-patch';
|
||||||
import React, { useCallback, useMemo, useState } from 'react';
|
import React, {
|
||||||
|
useCallback,
|
||||||
|
useEffect,
|
||||||
|
useMemo,
|
||||||
|
useRef,
|
||||||
|
useState,
|
||||||
|
} from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { Thread } from '../../../generated/entity/feed/thread';
|
import { Thread } from '../../../generated/entity/feed/thread';
|
||||||
import {
|
import {
|
||||||
@ -37,16 +43,42 @@ interface CommentCardInterface {
|
|||||||
feed: Thread;
|
feed: Thread;
|
||||||
post: any;
|
post: any;
|
||||||
isLastReply: boolean;
|
isLastReply: boolean;
|
||||||
|
closeFeedEditor: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const CommentCard = ({ feed, post, isLastReply }: CommentCardInterface) => {
|
const CommentCard = ({
|
||||||
|
feed,
|
||||||
|
post,
|
||||||
|
isLastReply,
|
||||||
|
closeFeedEditor,
|
||||||
|
}: CommentCardInterface) => {
|
||||||
const { updateFeed } = useActivityFeedProvider();
|
const { updateFeed } = useActivityFeedProvider();
|
||||||
const [isHovered, setIsHovered] = useState(false);
|
const [isHovered, setIsHovered] = useState(false);
|
||||||
const [isEditPost, setIsEditPost] = useState<boolean>(false);
|
const [isEditPost, setIsEditPost] = useState<boolean>(false);
|
||||||
const [postMessage, setPostMessage] = useState<string>('');
|
const [postMessage, setPostMessage] = useState<string>('');
|
||||||
const seperator = '.';
|
const seperator = '.';
|
||||||
|
const editorRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const handleClickOutside = (event: MouseEvent) => {
|
||||||
|
if (
|
||||||
|
isEditPost &&
|
||||||
|
editorRef.current &&
|
||||||
|
!editorRef.current.contains(event.target as Node)
|
||||||
|
) {
|
||||||
|
setIsEditPost(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
document.addEventListener('mousedown', handleClickOutside);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener('mousedown', handleClickOutside);
|
||||||
|
};
|
||||||
|
}, [isEditPost]);
|
||||||
|
|
||||||
const onEditPost = () => {
|
const onEditPost = () => {
|
||||||
|
closeFeedEditor();
|
||||||
setIsEditPost(!isEditPost);
|
setIsEditPost(!isEditPost);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -69,14 +101,16 @@ const CommentCard = ({ feed, post, isLastReply }: CommentCardInterface) => {
|
|||||||
const feedBodyRender = useMemo(() => {
|
const feedBodyRender = useMemo(() => {
|
||||||
if (isEditPost) {
|
if (isEditPost) {
|
||||||
return (
|
return (
|
||||||
<ActivityFeedEditor
|
<div ref={editorRef}>
|
||||||
focused
|
<ActivityFeedEditor
|
||||||
className="mb-8 reply-feed-editor"
|
focused
|
||||||
defaultValue={defaultValue}
|
className="mb-8 reply-feed-editor"
|
||||||
editorClass="is_edit_post"
|
defaultValue={defaultValue}
|
||||||
onSave={handleSave}
|
editorClass="is_edit_post"
|
||||||
onTextChange={(message) => setPostMessage(message)}
|
onSave={handleSave}
|
||||||
/>
|
onTextChange={(message) => setPostMessage(message)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,19 +240,26 @@
|
|||||||
}
|
}
|
||||||
.activity-feed-editor-container-new {
|
.activity-feed-editor-container-new {
|
||||||
background-color: @grey-9;
|
background-color: @grey-9;
|
||||||
border: none;
|
border: 0.5px solid @blue-15;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
.ql-container {
|
.ql-container {
|
||||||
background-color: @grey-9;
|
background-color: @grey-9;
|
||||||
border: none;
|
border: 1px solid @blue-15;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
|
&:focus-within {
|
||||||
|
border: 0.5px solid @blue-15;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.ql-toolbar {
|
.ql-toolbar {
|
||||||
background-color: @grey-9;
|
background-color: @grey-9;
|
||||||
border: none;
|
border: 1px solid @blue-15;
|
||||||
border-bottom: 1px solid #d9d9d9;
|
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
&:focus-within {
|
||||||
|
border: 0.5px solid @blue-15;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.ql-toolbar button {
|
.ql-toolbar button {
|
||||||
color: #292929;
|
color: #292929;
|
||||||
|
@ -994,6 +994,15 @@ export const TaskTabNew = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const closeFeedEditor = () => {
|
||||||
|
setShowFeedEditor(false);
|
||||||
|
setComment('');
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
closeFeedEditor();
|
||||||
|
}, [taskThread.id]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Row
|
<Row
|
||||||
className="relative task-details-panel"
|
className="relative task-details-panel"
|
||||||
@ -1088,6 +1097,7 @@ export const TaskTabNew = ({
|
|||||||
.sort((a, b) => (b.postTs as number) - (a.postTs as number))
|
.sort((a, b) => (b.postTs as number) - (a.postTs as number))
|
||||||
.map((reply, index, arr) => (
|
.map((reply, index, arr) => (
|
||||||
<CommentCard
|
<CommentCard
|
||||||
|
closeFeedEditor={closeFeedEditor}
|
||||||
feed={taskThread}
|
feed={taskThread}
|
||||||
isLastReply={index === arr.length - 1}
|
isLastReply={index === arr.length - 1}
|
||||||
key={reply.id}
|
key={reply.id}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user