From 17264e787242d93f7eddd4f87dcc463e15c7d82a Mon Sep 17 00:00:00 2001 From: staticGuru Date: Mon, 9 Oct 2023 12:50:12 +0530 Subject: [PATCH] add the outside click listioner --- .../src/conversation/ConversationTile.tsx | 74 ++++++++++++------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/frontend/src/conversation/ConversationTile.tsx b/frontend/src/conversation/ConversationTile.tsx index b7e0058d..b578e381 100644 --- a/frontend/src/conversation/ConversationTile.tsx +++ b/frontend/src/conversation/ConversationTile.tsx @@ -1,11 +1,13 @@ -import React, { useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import { useSelector } from 'react-redux'; import Edit from '../assets/edit.svg'; import Exit from '../assets/exit.svg'; import Message from '../assets/message.svg'; import CheckMark from '../assets/checkMark.svg'; +import Trash from '../assets/trash.svg'; import { selectConversationId } from '../preferences/preferenceSlice'; +import { useOutsideAlerter } from '../hooks'; interface ConversationTileProps { conversation: { name: string; id: string }; @@ -21,29 +23,47 @@ export default function ConversationTile({ onSave, }: ConversationTileProps) { const conversationId = useSelector(selectConversationId); - const inputRef = useRef(null); + const tileRef = useRef(null); const [isEdit, setIsEdit] = useState(false); - const [conversationName, setConversationsName] = useState(conversation.name); + const [conversationName, setConversationsName] = useState(''); + useOutsideAlerter( + tileRef, + () => + handleSaveConversation({ + id: conversationId || conversation.id, + name: conversationName, + }), + [conversationName], + ); + + useEffect(() => { + setConversationsName(conversation.name); + }, [conversation.name]); function handleEditConversation() { setIsEdit(true); - // inputRef?.current?.focus(); } - function handleSaveConversation(changedConversation: any) { - onSave(changedConversation); - setIsEdit(false); - } - function handleBlur() { - if (conversation.name !== conversationName) { - handleSaveConversation({ - id: conversationId, - name: conversationName, - }); + + function handleSaveConversation(changedConversation: { + name: string; + id: string; + }) { + if (changedConversation.name.trim().length) { + onSave(changedConversation); + setIsEdit(false); + } else { + onClear(); } } + + function onClear() { + setConversationsName(conversation.name); + setIsEdit(false); + } return (
{ selectConversation(conversation.id); }} @@ -51,32 +71,28 @@ export default function ConversationTile({ conversationId === conversation.id ? 'bg-gray-100' : '' }`} > -
+
{isEdit ? ( setConversationsName(e.target.value)} /> ) : ( -

- {conversationName.length > 45 - ? conversationName.substring(0, 45) + '...' - : conversationName} +

+ {conversationName}

)}
{conversationId === conversation.id ? ( - <> +
Edit { event.stopPropagation(); @@ -89,16 +105,18 @@ export default function ConversationTile({ }} /> Exit { event.stopPropagation(); - onDeleteConversation(conversation.id); + isEdit ? onClear() : onDeleteConversation(conversation.id); }} /> - +
) : null}
);