ui 수정 및 시현할 기능 업데이트

This commit is contained in:
leeheejin
2025-10-02 14:34:15 +09:00
parent 2c0dca08b4
commit 3fa410cbe4
168 changed files with 1545 additions and 1066 deletions

View File

@@ -127,7 +127,7 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
if (isDeleteAction()) {
return component.style?.labelColor || '#ef4444'; // 빨간색 기본값 (Tailwind red-500)
}
return component.style?.labelColor || '#3b83f6'; // 기본 파란색 (Tailwind blue-500)
return component.style?.labelColor || '#212121'; // 검은색 기본값 (shadcn/ui primary)
};
const buttonColor = getLabelColor();
@@ -265,6 +265,30 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
}
console.log("✅ 버튼 액션 실행 성공:", actionConfig.type);
// 저장/수정 성공 시 자동 처리
if (actionConfig.type === "save" || actionConfig.type === "edit") {
if (typeof window !== 'undefined') {
// 1. 테이블 새로고침 이벤트 먼저 발송 (모달이 닫히기 전에)
console.log("🔄 저장/수정 후 테이블 새로고침 이벤트 발송");
window.dispatchEvent(new CustomEvent('refreshTable'));
// 2. 모달 닫기 (약간의 딜레이)
setTimeout(() => {
// EditModal 내부인지 확인 (isInModal prop 사용)
const isInEditModal = (props as any).isInModal;
if (isInEditModal) {
console.log("🚪 EditModal 닫기 이벤트 발송");
window.dispatchEvent(new CustomEvent('closeEditModal'));
}
// ScreenModal은 항상 닫기
console.log("🚪 ScreenModal 닫기 이벤트 발송");
window.dispatchEvent(new CustomEvent('closeSaveModal'));
}, 100);
}
}
} catch (error) {
console.log("❌ executeAction catch 블록 진입:", error);
@@ -296,6 +320,12 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
// 이벤트 핸들러
const handleClick = async (e: React.MouseEvent) => {
e.stopPropagation();
console.log("🖱️ 버튼 클릭 이벤트 발생", {
isDesignMode,
isInteractive,
hasAction: !!processedConfig.action,
processedConfig,
});
// 디자인 모드에서는 기본 onClick만 실행
if (isDesignMode) {
@@ -303,8 +333,20 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
return;
}
console.log("🔍 조건 체크:", {
isInteractive,
hasProcessedConfig: !!processedConfig,
hasAction: !!processedConfig.action,
actionType: processedConfig.action?.type,
});
// 인터랙티브 모드에서 액션 실행
if (isInteractive && processedConfig.action) {
console.log("✅ 액션 실행 조건 통과", {
actionType: processedConfig.action.type,
requiresConfirmation: confirmationRequiredActions.includes(processedConfig.action.type),
});
const context: ButtonActionContext = {
formData: formData || {},
originalData: originalData || {}, // 부분 업데이트용 원본 데이터 추가
@@ -320,6 +362,7 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
// 확인이 필요한 액션인지 확인
if (confirmationRequiredActions.includes(processedConfig.action.type)) {
console.log("📋 확인 다이얼로그 표시 중...");
// 확인 다이얼로그 표시
setPendingAction({
type: processedConfig.action.type,
@@ -328,10 +371,16 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
});
setShowConfirmDialog(true);
} else {
console.log("🚀 액션 바로 실행 중...");
// 확인이 필요하지 않은 액션은 바로 실행
await executeAction(processedConfig.action, context);
}
} else {
console.log("⚠️ 액션 실행 조건 불만족:", {
isInteractive,
hasAction: !!processedConfig.action,
"이유": !isInteractive ? "인터랙티브 모드 아님" : "액션 없음",
});
// 액션이 설정되지 않은 경우 기본 onClick 실행
onClick?.();
}
@@ -460,9 +509,9 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
</button>
</div>
{/* 확인 다이얼로그 */}
{/* 확인 다이얼로그 - EditModal보다 위에 표시하도록 z-index 최상위로 설정 */}
<AlertDialog open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>
<AlertDialogContent>
<AlertDialogContent className="z-[99999]">
<AlertDialogHeader>
<AlertDialogTitle>{getConfirmTitle()}</AlertDialogTitle>
<AlertDialogDescription>{getConfirmMessage()}</AlertDialogDescription>