185 lines
8.9 KiB
TypeScript
185 lines
8.9 KiB
TypeScript
"use client";
|
|
|
|
import { ComponentRegistry } from "../ComponentRegistry";
|
|
import { initializeHotReload } from "../utils/hotReload";
|
|
|
|
/**
|
|
* 컴포넌트 시스템 초기화
|
|
* 모든 컴포넌트를 자동으로 로드하고 등록합니다
|
|
*/
|
|
|
|
// 컴포넌트 자동 디스커버리 및 로드
|
|
// 현재는 수동 import 방식 사용 (향후 자동 디스커버리로 확장 예정)
|
|
|
|
/**
|
|
* 새 구조 컴포넌트들 (자동 등록)
|
|
* CLI로 생성된 컴포넌트들은 여기에 import만 추가하면 자동으로 등록됩니다
|
|
*/
|
|
|
|
// 기본 입력 컴포넌트들 — Phase E (text/number/date/select/checkbox/textarea 6종)
|
|
// 와 Phase F.1 (radio-basic / toggle-switch) 에서 canonical input 으로 흡수,
|
|
// 폴더/렌더러 모두 삭제. file-upload/image-widget/image-display 는 Phase D.5
|
|
// 에서 canonical input (FilePicker) 으로 흡수.
|
|
import "./accordion-basic/AccordionBasicRenderer"; // 컴포넌트 패널에서만 숨김
|
|
import "./split-panel-layout2/SplitPanelLayout2Renderer"; // 분할 패널 레이아웃 v2
|
|
import "./domain/map/MapRenderer";
|
|
import "./repeater-field-group/RepeaterFieldGroupRenderer";
|
|
import "./domain/flow-widget/FlowWidgetRenderer";
|
|
import "./category-manager/CategoryManagerRenderer";
|
|
import "./customer-item-mapping/CustomerItemMappingRenderer"; // 거래처별 품목정보
|
|
|
|
// 수주 등록 관련 컴포넌트들 (v2 버전 없음 - 유지)
|
|
import "./autocomplete-search-input/AutocompleteSearchInputRenderer";
|
|
import "./entity-search-input/EntitySearchInputRenderer";
|
|
import "./modal-repeater-table/ModalRepeaterTableRenderer";
|
|
import "./simple-repeater-table/SimpleRepeaterTableRenderer"; // 단순 반복 테이블
|
|
|
|
// 조건부 컨테이너 컴포넌트
|
|
import "./conditional-container/ConditionalContainerRenderer"; // 컴포넌트 패널에서만 숨김
|
|
import "./selected-items-detail-input/SelectedItemsDetailInputRenderer";
|
|
|
|
// 화면 임베딩 및 분할 패널 컴포넌트
|
|
import "./screen-split-panel/ScreenSplitPanelRenderer"; // 화면 분할 패널 (좌우 화면 임베딩 + 데이터 전달)
|
|
|
|
// 범용 폼 모달 컴포넌트
|
|
import "./universal-form-modal/UniversalFormModalRenderer"; // 컴포넌트 패널에서만 숨김
|
|
|
|
// 세금계산서 관리 컴포넌트
|
|
import "./tax-invoice-list/TaxInvoiceListRenderer"; // 세금계산서 목록, 작성, 발행, 취소
|
|
|
|
// 메일 수신자 선택 컴포넌트
|
|
import "./mail-recipient-selector/MailRecipientSelectorRenderer"; // 내부 인원 선택 + 외부 이메일 입력
|
|
|
|
// 연관 데이터 버튼 컴포넌트
|
|
import "./related-data-buttons/RelatedDataButtonsRenderer"; // 좌측 선택 데이터 기반 연관 테이블 버튼 표시
|
|
|
|
// ============================================================
|
|
// 기존 컴포넌트들 (기존 화면 호환성 유지)
|
|
// V2 버전도 별도로 존재하지만, 기존 화면은 이 컴포넌트들을 사용
|
|
// ============================================================
|
|
import "./button-primary/ButtonPrimaryRenderer";
|
|
import "./text-display/TextDisplayRenderer";
|
|
import "./divider-line/DividerLineRenderer";
|
|
import "./table-list/TableListRenderer";
|
|
import "./split-panel-layout/SplitPanelLayoutRenderer";
|
|
// numbering-rule 캔버스 컴포넌트는 폐기 (2026-05-11). admin 페이지 /admin/systemMng/numberingRuleList 로 대체.
|
|
import "./table-search-widget";
|
|
import "./repeat-screen-modal/RepeatScreenModalRenderer";
|
|
import "./section-paper/SectionPaperRenderer";
|
|
import "./section-card/SectionCardRenderer";
|
|
import "./tabs/tabs-component";
|
|
import "./location-swap-selector/LocationSwapSelectorRenderer";
|
|
import "./rack-structure/RackStructureRenderer";
|
|
import "./aggregation-widget/AggregationWidgetRenderer";
|
|
import "./repeat-container/RepeatContainerRenderer";
|
|
|
|
// ============================================================
|
|
// V2 컴포넌트들 (화면관리 전용 - 충돌 방지용 별도 버전)
|
|
// ============================================================
|
|
import "./v2-repeater/V2RepeaterRenderer";
|
|
import "./v2-button-primary/ButtonPrimaryRenderer";
|
|
import "./v2-split-panel-layout/SplitPanelLayoutRenderer";
|
|
import "./v2-aggregation-widget/AggregationWidgetRenderer";
|
|
// v2-numbering-rule 캔버스 컴포넌트는 폐기 (2026-05-11). admin 페이지 /admin/systemMng/numberingRuleList 로 대체.
|
|
import "./v2-table-list/TableListRenderer";
|
|
import "./v2-text-display/TextDisplayRenderer";
|
|
import "./v2-divider-line/DividerLineRenderer";
|
|
|
|
// ============================================================
|
|
// ★ 통합 컴포넌트 (2026-04-11~, Phase A+)
|
|
// v2-* / legacy 폴더를 단일 컴포넌트로 흡수한 결과물.
|
|
// 기존 등록은 legacy alias 로 자동 리다이렉트됨.
|
|
// 관련 문서: notes/gbpark/2026-04-11-component-unification-plan.md
|
|
// ============================================================
|
|
import "./divider/DividerRenderer"; // v2-divider-line + v2-split-line + divider-line 흡수
|
|
import "./title/TitleRenderer"; // v2-text-display + text-display 흡수
|
|
import "./button/ButtonRenderer"; // v2-button-primary + button-primary + related-data-buttons 흡수
|
|
import "./search/SearchRenderer"; // v2-table-search-widget + table-search-widget + autocomplete-search-input 흡수
|
|
import "./input/InputRenderer"; // 20+ 레거시 입력 컴포넌트 흡수 (옛 V2 입력/선택 포함, Phase D.2 에서 V2 측 폐기)
|
|
import "./stats/StatsRenderer"; // v2-aggregation-widget + v2-status-count + v2-card-display + legacy 흡수
|
|
// form 컴포넌트는 롤백됨 (2026-04-11): "폼" 은 별도 컴포넌트가 아닌
|
|
// 화면 디자이너의 3뷰 탭(목록/등록 팝업/수정 팝업) 구조로 처리할 예정.
|
|
// 관련: notes/gbpark/2026-04-11-component-unification-plan.md §3.2
|
|
import "./table/TableRenderer"; // v2-table-list + v2-table-grouped + v2-pivot-grid + v2-split-panel-layout + legacy 9종 흡수
|
|
import "./container/ContainerRenderer"; // v2-tabs-widget + v2-section-card/paper + v2-repeat-container + accordion + conditional + legacy 11종 흡수
|
|
import "./v2-repeat-container/RepeatContainerRenderer";
|
|
import "./v2-section-card/SectionCardRenderer";
|
|
import "./v2-section-paper/SectionPaperRenderer";
|
|
import "./domain/v2-rack-structure/RackStructureRenderer";
|
|
import "./domain/v2-location-swap-selector/LocationSwapSelectorRenderer";
|
|
import "./v2-table-search-widget";
|
|
import "./v2-tabs-widget/tabs-component";
|
|
import "./v2-category-manager/V2CategoryManagerRenderer";
|
|
// v2-media / v2-file-upload renderer — Phase D.5 폐기. canonical input (FilePicker) 으로 흡수.
|
|
import "./domain/v2-timeline-scheduler/TimelineSchedulerRenderer"; // 타임라인 스케줄러
|
|
import "./v2-split-line/SplitLineRenderer"; // V2 캔버스 분할선
|
|
import "./domain/v2-bom-tree/BomTreeRenderer"; // BOM 트리 뷰
|
|
import "./domain/v2-bom-item-editor/BomItemEditorRenderer"; // BOM 하위품목 편집기
|
|
import "./domain/v2-approval-step/ApprovalStepRenderer"; // 결재 단계 시각화
|
|
import "./v2-status-count/StatusCountRenderer"; // 상태별 카운트 카드
|
|
import "./domain/v2-process-work-standard/ProcessWorkStandardRenderer"; // 공정 작업기준
|
|
import "./domain/v2-item-routing/ItemRoutingRenderer"; // 품목별 라우팅
|
|
import "./domain/v2-shipping-plan-editor/ShippingPlanEditorRenderer"; // 출하계획 동시등록
|
|
|
|
/**
|
|
* 컴포넌트 초기화 함수
|
|
*/
|
|
export async function initializeComponents() {
|
|
try {
|
|
// 1. 자동 등록된 컴포넌트 확인
|
|
const registeredComponents = ComponentRegistry.getAllComponents();
|
|
|
|
// 2. 카테고리별 통계
|
|
const stats = ComponentRegistry.getStats();
|
|
|
|
// 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().by_category,
|
|
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;
|
|
}
|