From 223cf55f5cbae35e93a05c48cc4fc7514c78452d Mon Sep 17 00:00:00 2001 From: chpark Date: Thu, 7 May 2026 16:51:28 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A9=94=EC=8B=A0=EC=A0=80=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EA=B2=80=EC=83=89=20undefined=20=EA=B0=80?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit useCompanyUsers 응답 중 user_name 이 비어있는 레거시 row 가 있을 때 toLowerCase 호출에서 발생하던 Runtime TypeError 방지. - NewRoomModal: userName/deptName ?? '' 으로 가드 후 includes - MessageInput: 멘션 자동완성 필터에서 userName ?? '' 가드 Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/components/messenger/MessageInput.tsx | 2 +- frontend/components/messenger/NewRoomModal.tsx | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/frontend/components/messenger/MessageInput.tsx b/frontend/components/messenger/MessageInput.tsx index 241fcae7..69fac80b 100644 --- a/frontend/components/messenger/MessageInput.tsx +++ b/frontend/components/messenger/MessageInput.tsx @@ -39,7 +39,7 @@ function MessageInput({ roomId, onTypingStart, onTypingStop }: MessageInputProps const { data: users } = useCompanyUsers(); const filteredMentionUsers = mentionQuery !== null && users - ? users.filter((u) => u.userName.toLowerCase().includes(mentionQuery.toLowerCase())).slice(0, 5) + ? users.filter((u) => (u.userName ?? "").toLowerCase().includes(mentionQuery.toLowerCase())).slice(0, 5) : []; // Revoke object URLs when pending files change or component unmounts diff --git a/frontend/components/messenger/NewRoomModal.tsx b/frontend/components/messenger/NewRoomModal.tsx index 09fa513c..b923cabc 100644 --- a/frontend/components/messenger/NewRoomModal.tsx +++ b/frontend/components/messenger/NewRoomModal.tsx @@ -35,11 +35,12 @@ export function NewRoomModal({ open, onOpenChange, userStatuses }: NewRoomModalP const createRoom = useCreateRoom(); const { selectRoom } = useMessengerContext(); - const filtered = users.filter( - (u) => - u.userName.toLowerCase().includes(search.toLowerCase()) || - (u.deptName && u.deptName.toLowerCase().includes(search.toLowerCase())) - ); + const filtered = users.filter((u) => { + const q = search.toLowerCase(); + const name = (u.userName ?? "").toLowerCase(); + const dept = (u.deptName ?? "").toLowerCase(); + return name.includes(q) || dept.includes(q); + }); const toggleUser = (userId: string) => { if (tab === "dm") {