62 lines
1.6 KiB
TypeScript
62 lines
1.6 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 };
|
|
}
|