Skip to content

Commit c5f4501

Browse files
committed
fix(mentions): guard mention selection on Enter and add missing editHighlightedIndex state
1 parent dd42e1a commit c5f4501

3 files changed

Lines changed: 11 additions & 5 deletions

File tree

‎apps/codebility/app/home/kanban/[projectId]/[id]/_components/tasks/_components/TaskComments.tsx‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ const ReplyItem = memo(function ReplyItem({
283283
const [editMentionQuery, setEditMentionQuery] = useState("");
284284
const [editMentionPosition, setEditMentionPosition] = useState({ top: 0, left: 0, width: 200 });
285285
const [editFilteredUsers, setEditFilteredUsers] = useState<MentionUser[]>([]);
286+
const [editHighlightedIndex, setEditHighlightedIndex] = useState(0);
286287

287288
// Ref for edit textarea and wrapper (used for proper dropdown positioning)
288289
const editTextareaRef = useRef<HTMLTextAreaElement>(null);
@@ -479,7 +480,8 @@ const ReplyItem = memo(function ReplyItem({
479480
setEditHighlightedIndex(i => (i - 1 + editFilteredUsers.length) % editFilteredUsers.length);
480481
} else if (e.key === 'Enter') {
481482
e.preventDefault();
482-
handleEditMentionSelect(editFilteredUsers[editHighlightedIndex || 0]);
483+
const candidate = editFilteredUsers[editHighlightedIndex || 0];
484+
if (candidate) handleEditMentionSelect(candidate);
483485
} else if (e.key === 'Escape') {
484486
setShowEditMentionDropdown(false);
485487
}
@@ -851,7 +853,8 @@ const CommentItem = memo(function CommentItem({
851853
setEditHighlightedIndex(i => (i - 1 + editFilteredUsers.length) % editFilteredUsers.length);
852854
} else if (e.key === 'Enter') {
853855
e.preventDefault();
854-
handleEditMentionSelect(editFilteredUsers[editHighlightedIndex || 0]);
856+
const candidate = editFilteredUsers[editHighlightedIndex || 0];
857+
if (candidate) handleEditMentionSelect(candidate);
855858
} else if (e.key === 'Escape') {
856859
setShowEditMentionDropdown(false);
857860
}
@@ -953,7 +956,8 @@ const CommentItem = memo(function CommentItem({
953956
setReplyHighlightedIndex(i => (i - 1 + replyFilteredUsers.length) % replyFilteredUsers.length);
954957
} else if (e.key === 'Enter') {
955958
e.preventDefault();
956-
handleReplyMentionSelect(replyFilteredUsers[replyHighlightedIndex || 0]);
959+
const candidate = replyFilteredUsers[replyHighlightedIndex || 0];
960+
if (candidate) handleReplyMentionSelect(candidate);
957961
} else if (e.key === 'Escape') {
958962
setShowReplyMentionDropdown(false);
959963
}

‎apps/codebility/next.config.mjs‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ const config = withPlugins([[withBundleAnalyzer({ enabled: env.ANALYZE })]], {
8888
{
8989
hostname: "codebility-cdn.pages.dev",
9090
},
91-
91+
{
92+
hostname: "example.com",
93+
},
9294
{
9395
protocol: "https",
9496
hostname:

‎apps/next/next-env.d.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
/// <reference types="next/image-types/global" />
33

44
// NOTE: This file should not be edited
5-
// see https://nextjs.org/docs/basic-features/typescript for more information.
5+
// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information.

0 commit comments

Comments
 (0)