Fix auth race condition and add typing indicator emission
This commit is contained in:
+12
-2
@@ -14,6 +14,7 @@ export default function Chat() {
|
||||
const { friendId } = useParams<{ friendId: string }>();
|
||||
const navigate = useNavigate();
|
||||
const user = useAuthStore((s) => s.user);
|
||||
const authLoading = useAuthStore((s) => s.isLoading);
|
||||
const {
|
||||
messages,
|
||||
typingFriendIds,
|
||||
@@ -24,6 +25,7 @@ export default function Chat() {
|
||||
openConversation,
|
||||
loadMoreMessages,
|
||||
sendMessage,
|
||||
emitTyping,
|
||||
clearChat,
|
||||
} = useChatStore();
|
||||
const { friends } = useFriendsStore();
|
||||
@@ -33,10 +35,12 @@ export default function Chat() {
|
||||
|
||||
const messagesEndRef = useRef<HTMLDivElement>(null);
|
||||
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
||||
const lastTypingEmit = useRef(0);
|
||||
|
||||
const friend = friends.find((f) => f.friend.id === friendId)?.friend;
|
||||
|
||||
useEffect(() => {
|
||||
if (authLoading) return;
|
||||
if (!user) {
|
||||
navigate('/login');
|
||||
return;
|
||||
@@ -51,7 +55,7 @@ export default function Chat() {
|
||||
clearChat();
|
||||
disconnect();
|
||||
};
|
||||
}, [user, friendId, navigate, connect, disconnect, openConversation, clearChat]);
|
||||
}, [user, authLoading, friendId, navigate, connect, disconnect, openConversation, clearChat]);
|
||||
|
||||
useEffect(() => {
|
||||
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
|
||||
@@ -153,7 +157,13 @@ export default function Chat() {
|
||||
<Input
|
||||
placeholder="Type a message..."
|
||||
value={input}
|
||||
onChange={(e) => setInput(e.target.value)}
|
||||
onChange={(e) => {
|
||||
setInput(e.target.value);
|
||||
if (friendId && Date.now() - lastTypingEmit.current > 2000) {
|
||||
lastTypingEmit.current = Date.now();
|
||||
emitTyping(friendId);
|
||||
}
|
||||
}}
|
||||
className="flex-1"
|
||||
/>
|
||||
<Button type="submit" size="sm" disabled={!input.trim() || sending}>
|
||||
|
||||
Reference in New Issue
Block a user