1
0
Fork 0
panel/components/pages/inspector/RecentMessages.tsx

76 lines
2.0 KiB
TypeScript

import type { Filter, WithId } from "mongodb";
import { Message, User } from "revolt-api";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "../../ui/card";
import { fetchMessages, fetchMessagesByUser, fetchUsersById } from "@/lib/db";
import { CompactMessage } from "../../cards/CompactMessage";
type Props = { users?: boolean | User[] } & (
| {
query: Filter<Message>;
}
| {
userId: string;
}
);
export async function RecentMessages(props: Props) {
let recentMessages: WithId<Message>[] = [];
try {
recentMessages = (
(props as { query: {} }).query
? await fetchMessages((props as { query: Filter<Message> }).query)
: await fetchMessagesByUser((props as { userId: string }).userId).catch(
() => []
)
).reverse();
} catch(e) {}
const userList = (
props.users === true
? await fetchUsersById([...new Set(recentMessages.map((x) => x.author))])
: Array.isArray(props.users)
? props.users
: []
).reduce((prev, next) => {
prev[next._id] = next;
return prev;
}, {} as Record<string, any>);
return (
<Card>
<CardHeader>
<CardTitle>Recent Messages</CardTitle>
<CardDescription>Overview of recent messages</CardDescription>
</CardHeader>
<CardContent>
{/* enter reason for fetching */}
{!recentMessages.length && (
<>
<h2 className="text-sm text-center pb-2 text-gray-400">
No messages found
</h2>
<h3 className="text-xs text-center pb-2 text-gray-400">
You may be lacking permissions.
</h3>
</>
)}
{recentMessages.map((message) => (
<CompactMessage
key={message._id}
message={message}
hideUser={Object.keys(userList).length === 0}
users={userList}
/>
))}
</CardContent>
</Card>
);
}