Redesign WatchLink application UI
This commit is contained in:
36
src/lib/shell.ts
Normal file
36
src/lib/shell.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { prisma } from "./prisma";
|
||||
import { getCurrentUser, userIsAdmin } from "./session";
|
||||
|
||||
type CurrentUser = NonNullable<Awaited<ReturnType<typeof getCurrentUser>>>;
|
||||
|
||||
export async function getShellContext(user: CurrentUser) {
|
||||
const [rooms, pendingRequests, activeRoomCount] = await Promise.all([
|
||||
prisma.room.findMany({
|
||||
where: {
|
||||
OR: [{ ownerId: user.id }, { members: { some: { userId: user.id } } }, { visibility: "PUBLIC" }]
|
||||
},
|
||||
include: { _count: { select: { members: true, mediaSources: true } } },
|
||||
orderBy: [{ ownerId: "desc" }, { updatedAt: "desc" }],
|
||||
take: 8
|
||||
}),
|
||||
prisma.friendship.count({ where: { receiverId: user.id, status: "PENDING" } }),
|
||||
prisma.room.count({ where: { mediaSources: { some: {} } } })
|
||||
]);
|
||||
|
||||
return {
|
||||
isAdmin: userIsAdmin(user),
|
||||
userName: user.displayName || user.username,
|
||||
pendingRequests,
|
||||
activeRoomCount,
|
||||
rooms: rooms.map((room) => ({
|
||||
id: room.id,
|
||||
name: room.name,
|
||||
slug: room.slug,
|
||||
href: `/rooms/${encodeURIComponent(room.slug)}`,
|
||||
visibility: room.visibility,
|
||||
participantCount: room._count.members + 1,
|
||||
queueCount: room._count.mediaSources,
|
||||
isPersonal: room.ownerId === user.id
|
||||
}))
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user