mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-08 08:39:03 +02:00
Hide resolve/edit/delete comment options for users without permissions (#22891)
GitOrigin-RevId: b3d2c1ba03ee836596abfc3da1260dec5a0a7714
This commit is contained in:
committed by
Copybot
parent
7bef003c56
commit
58c9f6e76e
+18
-11
@@ -28,10 +28,15 @@ const ReviewPanelCommentOptions: FC<{
|
||||
onEdit: () => void
|
||||
onDelete: () => void
|
||||
id: string
|
||||
belongsToCurrentUser: boolean
|
||||
}> = ({ onEdit, onDelete, id, belongsToCurrentUser }) => {
|
||||
canEdit: boolean
|
||||
canDelete: boolean
|
||||
}> = ({ onEdit, onDelete, id, canEdit, canDelete }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
if (!canEdit && !canDelete) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<BootstrapVersionSwitcher
|
||||
bs3={
|
||||
@@ -49,10 +54,10 @@ const ReviewPanelCommentOptions: FC<{
|
||||
/>
|
||||
</BS3Dropdown.Toggle>
|
||||
<BS3Dropdown.Menu>
|
||||
{belongsToCurrentUser && (
|
||||
<BS3MenuItem onClick={onEdit}>{t('edit')}</BS3MenuItem>
|
||||
{canEdit && <BS3MenuItem onClick={onEdit}>{t('edit')}</BS3MenuItem>}
|
||||
{canDelete && (
|
||||
<BS3MenuItem onClick={onDelete}>{t('delete')}</BS3MenuItem>
|
||||
)}
|
||||
<BS3MenuItem onClick={onDelete}>{t('delete')}</BS3MenuItem>
|
||||
</BS3Dropdown.Menu>
|
||||
</ControlledDropdown>
|
||||
}
|
||||
@@ -70,18 +75,20 @@ const ReviewPanelCommentOptions: FC<{
|
||||
/>
|
||||
</DropdownToggle>
|
||||
<DropdownMenu flip={false}>
|
||||
{belongsToCurrentUser && (
|
||||
{canEdit && (
|
||||
<li role="none">
|
||||
<DropdownItem as="button" onClick={onEdit}>
|
||||
{t('edit')}
|
||||
</DropdownItem>
|
||||
</li>
|
||||
)}
|
||||
<li role="none">
|
||||
<DropdownItem as="button" onClick={onDelete}>
|
||||
{t('delete')}
|
||||
</DropdownItem>
|
||||
</li>
|
||||
{canDelete && (
|
||||
<li role="none">
|
||||
<DropdownItem as="button" onClick={onDelete}>
|
||||
{t('delete')}
|
||||
</DropdownItem>
|
||||
</li>
|
||||
)}
|
||||
</DropdownMenu>
|
||||
</Dropdown>
|
||||
}
|
||||
|
||||
+10
-2
@@ -13,6 +13,7 @@ import { ExpandableContent } from './review-panel-expandable-content'
|
||||
import ReviewPanelDeleteCommentModal from './review-panel-delete-comment-modal'
|
||||
import { useUserContext } from '@/shared/context/user-context'
|
||||
import ReviewPanelEntryUser from './review-panel-entry-user'
|
||||
import { usePermissionsContext } from '@/features/ide-react/context/permissions-context'
|
||||
|
||||
export const ReviewPanelMessage: FC<{
|
||||
message: ReviewPanelCommentThreadMessage
|
||||
@@ -36,6 +37,12 @@ export const ReviewPanelMessage: FC<{
|
||||
const [deleting, setDeleting] = useState(false)
|
||||
const [content, setContent] = useState(message.content)
|
||||
const user = useUserContext()
|
||||
const { write, trackedWrite } = usePermissionsContext()
|
||||
|
||||
const isCommentAuthor = user.id === message.user.id
|
||||
const canEdit = isCommentAuthor
|
||||
const canResolve = write || (trackedWrite && isCommentAuthor)
|
||||
const canDelete = write || (trackedWrite && isCommentAuthor)
|
||||
|
||||
const handleEditOption = useCallback(() => setEditing(true), [])
|
||||
const showDeleteModal = useCallback(() => setDeleting(true), [])
|
||||
@@ -62,7 +69,7 @@ export const ReviewPanelMessage: FC<{
|
||||
</div>
|
||||
|
||||
<div className="review-panel-entry-actions">
|
||||
{!editing && !isReply && !isThreadResolved && (
|
||||
{!editing && !isReply && !isThreadResolved && canResolve && (
|
||||
<OLTooltip
|
||||
id="resolve-thread"
|
||||
overlayProps={{ placement: 'bottom' }}
|
||||
@@ -86,7 +93,8 @@ export const ReviewPanelMessage: FC<{
|
||||
|
||||
{!editing && !isThreadResolved && (
|
||||
<ReviewPanelCommentOptions
|
||||
belongsToCurrentUser={user.id === message.user.id}
|
||||
canDelete={canDelete}
|
||||
canEdit={canEdit}
|
||||
onEdit={handleEditOption}
|
||||
onDelete={showDeleteModal}
|
||||
id={message.id}
|
||||
|
||||
Reference in New Issue
Block a user