ERP-node/frontend/lib/registry/components/index.ts

102 lines
3.2 KiB
TypeScript

"use client";
import { ComponentRegistry } from "../ComponentRegistry";
import { initializeHotReload } from "../utils/hotReload";
/**
* 컴포넌트 시스템 초기화
* 모든 컴포넌트를 자동으로 로드하고 등록합니다
*/
console.log("🚀 컴포넌트 시스템 초기화 시작...");
// 컴포넌트 자동 디스커버리 및 로드
// 현재는 수동 import 방식 사용 (향후 자동 디스커버리로 확장 예정)
/**
* 새 구조 컴포넌트들 (자동 등록)
* CLI로 생성된 컴포넌트들은 여기에 import만 추가하면 자동으로 등록됩니다
*/
// 예시 컴포넌트들 (CLI로 생성 후 주석 해제)
import "./button-primary/ButtonPrimaryRenderer";
import "./text-input/TextInputRenderer";
import "./textarea-basic/TextareaBasicRenderer";
import "./number-input/NumberInputRenderer";
import "./select-basic/SelectBasicRenderer";
import "./checkbox-basic/CheckboxBasicRenderer";
import "./radio-basic/RadioBasicRenderer";
import "./date-input/DateInputRenderer";
import "./label-basic/LabelBasicRenderer";
import "./file-upload/FileUploadRenderer";
import "./slider-basic/SliderBasicRenderer";
import "./toggle-switch/ToggleSwitchRenderer";
import "./image-display/ImageDisplayRenderer";
import "./divider-line/DividerLineRenderer";
/**
* 컴포넌트 초기화 함수
*/
export async function initializeComponents() {
console.log("🔄 컴포넌트 초기화 중...");
try {
// 1. 자동 등록된 컴포넌트 확인
const registeredComponents = ComponentRegistry.getAllComponents();
console.log(`✅ 등록된 컴포넌트: ${registeredComponents.length}`);
// 2. 카테고리별 통계
const stats = ComponentRegistry.getStats();
console.log("📊 카테고리별 분포:", stats.byCategory);
// 3. 개발 모드에서 디버그 정보 출력
if (process.env.NODE_ENV === "development") {
ComponentRegistry.debug();
// 4. Hot Reload 시스템 초기화
initializeHotReload();
}
return {
success: true,
totalComponents: registeredComponents.length,
stats,
};
} catch (error) {
console.error("❌ 컴포넌트 시스템 초기화 실패:", error);
throw error;
}
}
/**
* 컴포넌트 시스템 상태 확인
*/
export function getComponentSystemStatus() {
return {
isInitialized: ComponentRegistry.getComponentCount() > 0,
componentCount: ComponentRegistry.getComponentCount(),
categories: ComponentRegistry.getStats().byCategory,
lastInitialized: new Date(),
};
}
// 즉시 초기화 실행 (브라우저 환경에서만)
if (typeof window !== "undefined") {
// DOM이 로드된 후 초기화
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", () => {
initializeComponents();
});
} else {
// 이미 로드된 경우 즉시 실행
setTimeout(initializeComponents, 0);
}
}
// 개발 모드에서 Hot Reload 지원
if (process.env.NODE_ENV === "development" && typeof window !== "undefined") {
// 전역 함수로 등록하여 개발자가 브라우저에서 직접 호출 가능
(window as any).__INIT_COMPONENTS__ = initializeComponents;
(window as any).__COMPONENT_STATUS__ = getComponentSystemStatus;
}