feat: 개별 위젯 컴포넌트 입력 타입 및 자동 값 설정 기능 추가

- BaseComponent에 inputType, autoValueType 속성 추가
- DetailSettingsPanel에 입력 타입 및 자동 값 타입 선택 UI 추가
- RealtimePreview에서 자동 값 타입별 값 생성 및 표시 로직 구현
- 텍스트, 숫자, 날짜 위젯에서 7가지 자동 값 타입 지원
  - 현재 날짜시간, 현재 날짜, 현재 시간
  - 현재 사용자, UUID, 시퀀스, 사용자 정의
- 자동입력 모드에서 읽기 전용 스타일 적용 (회색 배경)
- 백엔드 API에 input_type 처리 로직 추가
- TableTypeSelector에 입력 타입 설정 UI 추가
This commit is contained in:
kjs
2025-09-04 14:23:35 +09:00
parent d7c41fc35d
commit 78d4d7de23
17 changed files with 1912 additions and 49 deletions

View File

@@ -48,23 +48,42 @@ export const ButtonConfigPanel: React.FC<ButtonConfigPanelProps> = ({ component,
const config = (component.webTypeConfig as ButtonTypeConfig) || {};
// 로컬 상태 관리
const [localConfig, setLocalConfig] = useState<ButtonTypeConfig>({
actionType: "custom",
variant: "default",
size: "sm",
...config,
const [localConfig, setLocalConfig] = useState<ButtonTypeConfig>(() => {
const defaultConfig = {
actionType: "custom" as ButtonActionType,
variant: "default" as ButtonVariant,
size: "sm" as ButtonSize,
};
return {
...defaultConfig,
...config, // 저장된 값이 기본값을 덮어씀
};
});
// 컴포넌트 변경 시 로컬 상태 동기화
useEffect(() => {
const newConfig = (component.webTypeConfig as ButtonTypeConfig) || {};
// 기본값 설정 (실제 값이 있으면 덮어쓰지 않음)
const defaultConfig = {
actionType: "custom" as ButtonActionType,
variant: "default" as ButtonVariant,
size: "sm" as ButtonSize,
};
// 실제 저장된 값이 우선순위를 가지도록 설정
setLocalConfig({
actionType: "custom",
variant: "default",
size: "sm",
...newConfig,
...defaultConfig,
...newConfig, // 저장된 값이 기본값을 덮어씀
});
}, [component.webTypeConfig]);
console.log("🔄 ButtonConfigPanel 로컬 상태 동기화:", {
componentId: component.id,
savedConfig: newConfig,
finalConfig: { ...defaultConfig, ...newConfig },
});
}, [component.webTypeConfig, component.id]);
// 설정 업데이트 함수
const updateConfig = (updates: Partial<ButtonTypeConfig>) => {
@@ -194,7 +213,22 @@ export const ButtonConfigPanel: React.FC<ButtonConfigPanelProps> = ({ component,
break;
}
updateConfig(updates);
// 로컬 상태 업데이트 후 webTypeConfig도 함께 업데이트
const newConfig = { ...localConfig, ...updates };
setLocalConfig(newConfig);
// webTypeConfig를 마지막에 다시 업데이트하여 확실히 저장되도록 함
setTimeout(() => {
onUpdateComponent({
webTypeConfig: newConfig,
});
console.log("🎯 ButtonActionType webTypeConfig 최종 업데이트:", {
actionType,
newConfig,
componentId: component.id,
});
}, 0);
};
const selectedActionOption = actionTypeOptions.find((opt) => opt.value === localConfig.actionType);