Skip to content

Commit

Permalink
T17 : Add user cancellation
Browse files Browse the repository at this point in the history
  • Loading branch information
Melvynx committed Nov 1, 2023
1 parent ccafa50 commit d228101
Showing 1 changed file with 72 additions and 1 deletion.
73 changes: 72 additions & 1 deletion app/admin/courses/[courseId]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,15 @@ import {
LayoutTitle,
} from '@/components/layout/layout';
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
import { buttonVariants } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Button, buttonVariants } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import {
Table,
TableBody,
Expand All @@ -18,6 +25,9 @@ import {
} from '@/components/ui/table';
import { Typography } from '@/components/ui/typography';
import { getRequiredAuthSession } from '@/lib/auth';
import { prisma } from '@/lib/prisma';
import { Menu } from 'lucide-react';
import { revalidatePath } from 'next/cache';
import Link from 'next/link';
import { CoursePaginationButton } from '../../../../src/features/pagination/PaginationButton';
import { getAdminCourse } from './admin-course.query';
Expand Down Expand Up @@ -56,6 +66,8 @@ export default async function CoursePage({
<TableHeader>
<TableHead>Image</TableHead>
<TableHead>Name</TableHead>
<TableHead>Status</TableHead>
<TableHead className="text-end">Actions</TableHead>
</TableHeader>
<TableBody>
{course.users?.map((user) => (
Expand All @@ -77,6 +89,65 @@ export default async function CoursePage({
{user.email}
</Typography>
</TableCell>

<TableCell>
<Badge variant="secondary">
{user.canceled ? 'Canceled' : 'Active'}
</Badge>
</TableCell>
<TableCell className="flex flex-row-reverse">
<DropdownMenu>
<DropdownMenuTrigger>
<Button size="sm" variant="secondary">
<Menu size={16} />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem asChild>
<form>
<button
formAction={async () => {
'use server';

const session = await getRequiredAuthSession();

const courseId = params.courseId;
const userId = user.id;

const courseOnUser =
await prisma.courseOnUser.findFirst({
where: {
userId,
course: {
id: courseId,
creatorId: session?.user.id,
},
},
});

if (!courseOnUser) return;

await prisma.courseOnUser.update({
where: {
id: courseOnUser.id,
},
data: {
canceledAt: courseOnUser.canceledAt
? null
: new Date(),
},
});

revalidatePath(`/admin/courses/${courseId}`);
}}
>
{user.canceled ? 'Activate' : 'Cancel'}
</button>
</form>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</TableCell>
</TableRow>
))}
</TableBody>
Expand Down

0 comments on commit d228101

Please sign in to comment.