import { useState } from "react";
import {
View,
Text,
FlatList,
TextInput,
Pressable,
KeyboardAvoidingView,
Platform,
type ListRenderItemInfo,
} from "react-native";
import { useLocalSearchParams, Stack, useRouter } from "expo-router";
import { useQuery, useMutation } from "convex/react";
import { api } from "../../convex/_generated/api";
import { useAuth } from "../_layout";
import { useTheme } from "../../components/theme";
import { Button } from "../../components/ui/button";
import { Loading } from "../../components/ui/loading";
function formatMessageTime(timestamp: number): string {
return new Date(timestamp).toLocaleTimeString("mk-MK", {
hour: "2-digit",
minute: "2-digit",
});
}
export default function ChatDetailScreen() {
const { id } = useLocalSearchParams<{ id: string }>();
const theme = useTheme();
const router = useRouter();
const { token, userId, isAuthenticated } = useAuth();
const chat = useQuery(
api.chats.getById,
isAuthenticated && token && id ? { token, chatId: id as any } : "skip"
);
const messages = useQuery(
api.messages.listByChat,
isAuthenticated && token && id ? { token, chatId: id as any } : "skip"
);
const sendMessage = useMutation(api.messages.send);
const [text, setText] = useState("");
const [sending, setSending] = useState(false);
async function handleSend() {
const content = text.trim();
if (!content || !token || !id) return;
setText("");
setSending(true);
try {
await sendMessage({ token, chatId: id as any, content });
} catch {
setText(content);
} finally {
setSending(false);
}
}
if (!isAuthenticated) {
return (
<>
Најавете се за да ги видите пораките.
>
);
}
if (!chat || !messages) {
return (
<>
>
);
}
const otherUserName = chat.otherUser?.name ?? "Непознат";
return (
<>
{messages.length === 0 ? (
{"\uD83D\uDCAC"}
Започнете разговор
Испратете порака за да започнете разговор.
) : (
item._id}
inverted
contentContainerStyle={{
paddingVertical: 16,
paddingHorizontal: 16,
}}
ItemSeparatorComponent={() => }
renderItem={({
item,
}: ListRenderItemInfo) => {
const isSelf = item.senderId === userId;
return (
{item.content}
{formatMessageTime(item.createdAt)}
);
}}
style={{ flex: 1 }}
/>
)}
{"\u27A4"}
>
);
}