mirror of
				https://github.com/steveiliop56/tinyauth.git
				synced 2025-11-04 08:05:42 +00:00 
			
		
		
		
	* wip: add middlewares * refactor: use context fom middleware in handlers * refactor: use controller approach in handlers * refactor: move oauth providers into services (non-working) * feat: create oauth broker service * refactor: use a boostrap service to bootstrap the app * refactor: split utils into smaller files * refactor: use more clear name for frontend assets * feat: allow customizability of resources dir * fix: fix typo in ui middleware * fix: validate resource file paths in ui middleware * refactor: move resource handling to a controller * feat: add some logging * fix: configure middlewares before groups * fix: use correct api path in login mutation * fix: coderabbit suggestions * fix: further coderabbit suggestions
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
  appContextSchema,
 | 
						|
  AppContextSchema,
 | 
						|
} from "@/schemas/app-context-schema";
 | 
						|
import { createContext, useContext } from "react";
 | 
						|
import { useSuspenseQuery } from "@tanstack/react-query";
 | 
						|
import axios from "axios";
 | 
						|
 | 
						|
const AppContext = createContext<AppContextSchema | null>(null);
 | 
						|
 | 
						|
export const AppContextProvider = ({
 | 
						|
  children,
 | 
						|
}: {
 | 
						|
  children: React.ReactNode;
 | 
						|
}) => {
 | 
						|
  const { isFetching, data, error } = useSuspenseQuery({
 | 
						|
    queryKey: ["app"],
 | 
						|
    queryFn: () => axios.get("/api/context/app").then((res) => res.data),
 | 
						|
  });
 | 
						|
 | 
						|
  if (error && !isFetching) {
 | 
						|
    throw error;
 | 
						|
  }
 | 
						|
 | 
						|
  const validated = appContextSchema.safeParse(data);
 | 
						|
 | 
						|
  if (validated.success === false) {
 | 
						|
    throw validated.error;
 | 
						|
  }
 | 
						|
 | 
						|
  return (
 | 
						|
    <AppContext.Provider value={validated.data}>{children}</AppContext.Provider>
 | 
						|
  );
 | 
						|
};
 | 
						|
 | 
						|
export const useAppContext = () => {
 | 
						|
  const context = useContext(AppContext);
 | 
						|
 | 
						|
  if (!context) {
 | 
						|
    throw new Error("useAppContext must be used within an AppContextProvider");
 | 
						|
  }
 | 
						|
 | 
						|
  return context;
 | 
						|
};
 |