ERP-node/frontend/app/registry-provider.tsx

62 lines
1.7 KiB
TypeScript

"use client";
import React, { useEffect, useState } from "react";
import { initializeRegistries } from "@/lib/registry/init";
interface RegistryProviderProps {
children: React.ReactNode;
}
/**
* 레지스트리 초기화 프로바이더
* 앱 시작 시 모든 웹타입과 버튼 액션을 등록합니다.
*/
export function RegistryProvider({ children }: RegistryProviderProps) {
const [isInitialized, setIsInitialized] = useState(false);
useEffect(() => {
// 레지스트리 초기화
try {
initializeRegistries();
setIsInitialized(true);
} catch (error) {
console.error("❌ 레지스트리 초기화 실패:", error);
setIsInitialized(true); // 오류가 있어도 앱은 계속 실행
}
}, []);
// 초기화 중 로딩 표시 (선택사항)
// if (!isInitialized) {
// return (
// <div className="flex min-h-screen items-center justify-center">
// <div className="flex flex-col items-center space-y-4">
// <div className="border-primary h-12 w-12 animate-spin rounded-full border-b-2"></div>
// <p className="text-muted-foreground text-sm">시스템 초기화 중...</p>
// </div>
// </div>
// );
// }
return <>{children}</>;
}
/**
* 레지스트리 초기화 상태를 확인하는 훅
*/
export function useRegistryInitialization() {
const [isInitialized, setIsInitialized] = useState(false);
const [error, setError] = useState<Error | null>(null);
useEffect(() => {
try {
initializeRegistries();
setIsInitialized(true);
} catch (err) {
setError(err as Error);
setIsInitialized(true);
}
}, []);
return { isInitialized, error };
}