From e8d2a28738fca1eeeed9c33f0ca127deea183b52 Mon Sep 17 00:00:00 2001 From: giancarlo Date: Tue, 9 Apr 2024 15:51:03 +0800 Subject: [PATCH] Update admin action functionalities and UI This commit includes several changes to the admin functionality. Most notably, it updates the actions deleteUser and banUser to deleteAccount and updates the UI for admin actions. It also includes new variants for badges, and adds new icons to buttons. In addition, it updates the user schemas to match these changes. --- .../src/components/admin-account-page.tsx | 39 ++++++++++++++----- .../src/components/admin-ban-user-dialog.tsx | 8 ++-- .../admin-delete-account-dialog.tsx | 4 +- .../components/admin-delete-user-dialog.tsx | 6 ++- .../admin-impersonate-user-dialog.tsx | 4 +- .../admin-reactivate-user-dialog.tsx | 10 +++-- .../src/lib/server/admin-server-actions.ts | 16 ++++++++ .../lib/server/schema/admin-actions.schema.ts | 8 ++-- 8 files changed, 71 insertions(+), 24 deletions(-) diff --git a/packages/features/admin/src/components/admin-account-page.tsx b/packages/features/admin/src/components/admin-account-page.tsx index fbae14cc1..73faf614d 100644 --- a/packages/features/admin/src/components/admin-account-page.tsx +++ b/packages/features/admin/src/components/admin-account-page.tsx @@ -1,3 +1,5 @@ +import { BadgeX, Ban, ShieldPlus, Trash, VenetianMask } from 'lucide-react'; + import { Database } from '@kit/supabase/database'; import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; @@ -67,28 +69,44 @@ async function PersonalAccountPage(props: { account: Account }) { {props.account.name} Personal Account + + + Banned + } > -
- - - - +
- + - + + + + + - +
@@ -134,7 +152,10 @@ async function TeamAccountPage(props: { } > - + diff --git a/packages/features/admin/src/components/admin-ban-user-dialog.tsx b/packages/features/admin/src/components/admin-ban-user-dialog.tsx index f7fbe7e51..412b7ca15 100644 --- a/packages/features/admin/src/components/admin-ban-user-dialog.tsx +++ b/packages/features/admin/src/components/admin-ban-user-dialog.tsx @@ -26,7 +26,7 @@ import { import { Input } from '@kit/ui/input'; import { banUser } from '../lib/server/admin-server-actions'; -import { DeleteUserSchema } from '../lib/server/schema/admin-actions.schema'; +import { BanUserSchema } from '../lib/server/schema/admin-actions.schema'; export function AdminBanUserDialog( props: React.PropsWithChildren<{ @@ -34,7 +34,7 @@ export function AdminBanUserDialog( }>, ) { const form = useForm({ - resolver: zodResolver(DeleteUserSchema), + resolver: zodResolver(BanUserSchema), defaultValues: { userId: props.userId, confirmation: '', @@ -57,7 +57,9 @@ export function AdminBanUserDialog(
{ + return banUser(data); + })} > { + return deleteAccount(data); + })} > { + return deleteAccount(data); + })} > , ) { const form = useForm({ - resolver: zodResolver(DeleteUserSchema), + resolver: zodResolver(ImpersonateUserSchema), defaultValues: { userId: props.userId, confirmation: '', diff --git a/packages/features/admin/src/components/admin-reactivate-user-dialog.tsx b/packages/features/admin/src/components/admin-reactivate-user-dialog.tsx index a13e3feb0..43619226a 100644 --- a/packages/features/admin/src/components/admin-reactivate-user-dialog.tsx +++ b/packages/features/admin/src/components/admin-reactivate-user-dialog.tsx @@ -1,3 +1,5 @@ +'use client'; + import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; @@ -24,7 +26,7 @@ import { import { Input } from '@kit/ui/input'; import { reactivateUser } from '../lib/server/admin-server-actions'; -import { DeleteUserSchema } from '../lib/server/schema/admin-actions.schema'; +import { ReactivateUserSchema } from '../lib/server/schema/admin-actions.schema'; export function AdminReactivateUserDialog( props: React.PropsWithChildren<{ @@ -32,7 +34,7 @@ export function AdminReactivateUserDialog( }>, ) { const form = useForm({ - resolver: zodResolver(DeleteUserSchema), + resolver: zodResolver(ReactivateUserSchema), defaultValues: { userId: props.userId, confirmation: '', @@ -55,7 +57,9 @@ export function AdminReactivateUserDialog( { + return reactivateUser(data); + })} > value === 'CONFIRM'), +const ConfirmationSchema = z.object({ + confirmation: z.custom((value) => value === 'CONFIRM'), }); -const UserIdSchema = confirmationSchema.extend({ +const UserIdSchema = ConfirmationSchema.extend({ userId: z.string().uuid(), }); @@ -13,6 +13,6 @@ export const ReactivateUserSchema = UserIdSchema; export const ImpersonateUserSchema = UserIdSchema; export const DeleteUserSchema = UserIdSchema; -export const DeleteAccountSchema = confirmationSchema.extend({ +export const DeleteAccountSchema = ConfirmationSchema.extend({ accountId: z.string().uuid(), });