wwf
2025-05-20 938c3e5a587ce950a94964ea509b9e7f8834dfae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'use client'
import React from 'react'
import type { ZodSchema } from 'zod'
 
function withValidation<T extends Record<string, unknown>, K extends keyof T>(
  WrappedComponent: React.ComponentType<T>,
  schema: ZodSchema<Pick<T, K>>,
) {
  return function EnsuredComponent(props: T) {
    const partialProps = Object.fromEntries(
      Object.entries(props).filter(([key]) => key in (schema._def as any).shape),
    ) as Pick<T, K>
 
    const checkRes = schema.safeParse(partialProps)
    if (!checkRes.success) {
      console.error(checkRes.error)
      // Maybe there is a better way to handle this, like error logic placeholder
      return null
    }
    return <WrappedComponent {...props} />
  }
}
 
export default withValidation