Redesign WatchLink application UI
All checks were successful
Template Compliance / compliance (push) Successful in 5s
Build / build (push) Successful in 12m36s
Release Dry Run / release-dry-run (push) Successful in 1m33s

This commit is contained in:
MrSphay
2026-05-15 20:13:29 +02:00
parent cea591b587
commit 9fbd79c7ef
22 changed files with 2370 additions and 533 deletions

36
src/lib/shell.ts Normal file
View 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
}))
};
}