@@ -11,61 +11,51 @@ import { useState, useEffect } from "react";
1111import type { OutletContext } from "./user.detail" ;
1212import { createProtectedAction } from "~/lib/secureRoute" ;
1313
14- const banSchema = z . object ( {
15- banReason : z . string ( ) . min ( 1 , "Ban reason is required" ) . max ( 500 , "Ban reason is too long" ) ,
16- banExpires : z
17- . string ( )
18- . optional ( )
19- . refine (
20- ( date ) => {
21- if ( ! date ) return true ;
22- const selectedDate = new Date ( date ) ;
23- const now = new Date ( ) ;
24- return selectedDate > now ;
25- } ,
26- { message : "Ban expiration date must be in the future" }
27- ) ,
28- } ) ;
29-
3014export const action = createProtectedAction ( {
3115 paramValidation : z . object ( {
3216 id : z . string ( ) ,
3317 } ) ,
34- function : async ( { request, params } ) => {
35- try {
36- const formData = await request . formData ( ) ;
37- const banData = {
38- banReason : formData . get ( "banReason" ) as string ,
39- banExpires : formData . get ( "banExpires" ) as string ,
40- } ;
18+ formValidation : z . object ( {
19+ banReason : z . string ( ) . min ( 1 , "Ban reason is required" ) . max ( 500 , "Ban reason is too long" ) ,
20+ banExpires : z
21+ . string ( )
22+ . optional ( )
23+ . refine (
24+ ( date ) => {
25+ if ( ! date ) return true ;
26+ const selectedDate = new Date ( date ) ;
27+ const now = new Date ( ) ;
28+ return selectedDate > now ;
29+ } ,
30+ { message : "Ban expiration date must be in the future" }
31+ ) ,
32+ } ) ,
33+ function : async ( { request, params, form } ) => {
34+ if ( params . error ) {
35+ return { success : false , message : params . error . message } ;
36+ }
37+ const { id } = params . data ;
4138
42- const validatedData = banSchema . parse ( banData ) ;
39+ if ( form . error ) {
40+ return { success : false , message : form . error . message , fieldErrors : form . fieldErrors } ;
41+ }
42+ const { banReason, banExpires } = form . data ;
4343
44- // Calculate ban duration in seconds
45- const banExpiresIn = validatedData . banExpires
46- ? Math . floor ( ( new Date ( validatedData . banExpires ) . getTime ( ) - Date . now ( ) ) / 1000 )
47- : undefined ;
44+ // Calculate ban duration in seconds
45+ const banExpiresIn = banExpires
46+ ? Math . floor ( ( new Date ( banExpires ) . getTime ( ) - Date . now ( ) ) / 1000 )
47+ : undefined ;
4848
49- await auth . api . banUser ( {
50- headers : request . headers ,
51- body : {
52- userId : params . id ,
53- banReason : validatedData . banReason ,
54- banExpiresIn,
55- } ,
56- } ) ;
49+ await auth . api . banUser ( {
50+ headers : request . headers ,
51+ body : {
52+ userId : id ,
53+ banReason : banReason ,
54+ banExpiresIn,
55+ } ,
56+ } ) ;
5757
58- return { success : true , message : "User banned successfully" } ;
59- } catch ( error ) {
60- if ( error instanceof z . ZodError ) {
61- return {
62- success : false ,
63- error : "Validation failed" ,
64- fieldErrors : error . flatten ( ) . fieldErrors ,
65- } ;
66- }
67- return { success : false , error : "Failed to ban user" } ;
68- }
58+ return { success : true , message : "User banned successfully" } ;
6959 } ,
7060} ) ;
7161
0 commit comments