@@ -34,19 +34,24 @@ export default function useData<T>(url: string) {
3434 return { data, isLoading, error, reload } ;
3535}
3636
37- async function safeReadData < T > ( url : string ) : Promise < Result < T > > {
37+ async function safeReadData < T > (
38+ url : string ,
39+ schema : Zod . Schema < T > ,
40+ ) : Promise < Result < T > > {
3841 try {
3942 const res = await credFetch ( "GET" , url ) ;
40- const result = await res . json ( ) ;
41- // TODO: zod
43+ const data = await res . json ( ) ;
44+ const result = schema . parse ( data ) ;
4245 return Ok ( result ) ;
4346 } catch ( e ) {
47+ console . error ( `
48+ safeReadData: Schema Parse Error | in incoming data | Error: ${ e } ` ) ;
4449 return Err ( e ) ;
4550 }
4651}
4752
4853// TODO: refactor this to look better.
49- export function useAuthorizedData < T > ( url : string ) {
54+ export function useAuthorizedData < T > ( url : string , schema : Zod . Schema < T > ) {
5055 const [ data , setData ] = useState < T | null > ( null ) ;
5156 const [ loading , setLoading ] = useState < boolean > ( false ) ;
5257 const [ error , setError ] = useState < Error | null > ( null ) ;
@@ -55,7 +60,7 @@ export function useAuthorizedData<T>(url: string) {
5560 setLoading ( true ) ;
5661 setError ( null ) ;
5762
58- const result = await safeReadData < T > ( url ) ;
63+ const result = await safeReadData < T > ( url , schema ) ;
5964 if ( result . ok ) {
6065 setData ( result . value ) ;
6166 setLoading ( false ) ;
@@ -64,7 +69,7 @@ export function useAuthorizedData<T>(url: string) {
6469 setError ( result . error as Error ) ;
6570 setData ( null ) ;
6671 setLoading ( false ) ;
67- } , [ url ] ) ;
72+ } , [ url , schema ] ) ;
6873
6974 useEffect ( ( ) => {
7075 reload ( ) ;
0 commit comments