feat: 채번 규칙 자동/수동 모드 전환 기능 구현
- 사용자 수정 감지 시 자동으로 수동 모드 전환 - 원본 자동 생성 값 추적으로 모드 전환 기준 설정 - 수동 모드 시 채번 규칙 ID 제거하여 재할당 방지 - 원본 값 복구 시 자동 모드로 재전환 및 메타데이터 복구
This commit is contained in:
parent
a9577a8f9a
commit
c7d47a6634
|
|
@ -83,6 +83,10 @@ export const TextInputComponent: React.FC<TextInputComponentProps> = ({
|
|||
// autoGeneratedValue,
|
||||
// });
|
||||
|
||||
// 자동생성 원본 값 추적 (수동/자동 모드 구분용)
|
||||
const [originalAutoGeneratedValue, setOriginalAutoGeneratedValue] = useState<string>("");
|
||||
const [isManualMode, setIsManualMode] = useState<boolean>(false);
|
||||
|
||||
// 자동생성 값 생성 (컴포넌트 마운트 시 한 번만 실행)
|
||||
useEffect(() => {
|
||||
const generateAutoValue = async () => {
|
||||
|
|
@ -136,6 +140,7 @@ export const TextInputComponent: React.FC<TextInputComponentProps> = ({
|
|||
if (generatedValue) {
|
||||
console.log("✅ 자동생성 값 설정:", generatedValue);
|
||||
setAutoGeneratedValue(generatedValue);
|
||||
setOriginalAutoGeneratedValue(generatedValue); // 🆕 원본 값 저장
|
||||
hasGeneratedRef.current = true; // 생성 완료 플래그
|
||||
|
||||
// 폼 데이터에 자동생성된 값 설정 (인터랙티브 모드에서만)
|
||||
|
|
@ -684,6 +689,20 @@ export const TextInputComponent: React.FC<TextInputComponentProps> = ({
|
|||
</label>
|
||||
)}
|
||||
|
||||
{/* 수동/자동 모드 표시 배지 */}
|
||||
{testAutoGeneration.enabled && testAutoGeneration.type === "numbering_rule" && isInteractive && (
|
||||
<div className="absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1">
|
||||
<span className={cn(
|
||||
"text-[10px] px-2 py-0.5 rounded-full font-medium",
|
||||
isManualMode
|
||||
? "bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400"
|
||||
: "bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"
|
||||
)}>
|
||||
{isManualMode ? "수동" : "자동"}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<input
|
||||
type={inputType}
|
||||
defaultValue={(() => {
|
||||
|
|
@ -704,14 +723,18 @@ export const TextInputComponent: React.FC<TextInputComponentProps> = ({
|
|||
})()}
|
||||
placeholder={
|
||||
testAutoGeneration.enabled && testAutoGeneration.type !== "none"
|
||||
? `자동생성: ${AutoGenerationUtils.getTypeDescription(testAutoGeneration.type)}`
|
||||
? isManualMode
|
||||
? "수동 입력 모드"
|
||||
: `자동생성: ${AutoGenerationUtils.getTypeDescription(testAutoGeneration.type)}`
|
||||
: componentConfig.placeholder || defaultPlaceholder
|
||||
}
|
||||
pattern={validationPattern}
|
||||
title={
|
||||
webType === "tel"
|
||||
? "전화번호 형식: 010-1234-5678"
|
||||
: component.label
|
||||
: isManualMode
|
||||
? `${component.label} (수동 입력 모드 - 채번 규칙 미적용)`
|
||||
: component.label
|
||||
? `${component.label}${component.columnName ? ` (${component.columnName})` : ""}`
|
||||
: component.columnName || undefined
|
||||
}
|
||||
|
|
@ -742,6 +765,44 @@ export const TextInputComponent: React.FC<TextInputComponentProps> = ({
|
|||
// hasOnChange: !!props.onChange,
|
||||
// });
|
||||
|
||||
// 🆕 사용자 수정 감지 (자동 생성 값과 다르면 수동 모드로 전환)
|
||||
if (testAutoGeneration.enabled && testAutoGeneration.type === "numbering_rule") {
|
||||
if (originalAutoGeneratedValue && newValue !== originalAutoGeneratedValue) {
|
||||
if (!isManualMode) {
|
||||
setIsManualMode(true);
|
||||
console.log("🔄 수동 모드로 전환:", {
|
||||
field: component.columnName,
|
||||
original: originalAutoGeneratedValue,
|
||||
modified: newValue
|
||||
});
|
||||
|
||||
// 🆕 채번 규칙 ID 제거 (수동 모드이므로 더 이상 채번 규칙 사용 안 함)
|
||||
if (isInteractive && onFormDataChange && component.columnName) {
|
||||
const ruleIdKey = `${component.columnName}_numberingRuleId`;
|
||||
onFormDataChange(ruleIdKey, null);
|
||||
console.log("🗑️ 채번 규칙 ID 제거 (수동 모드):", ruleIdKey);
|
||||
}
|
||||
}
|
||||
} else if (isManualMode && newValue === originalAutoGeneratedValue) {
|
||||
// 사용자가 원본 값으로 되돌렸을 때 자동 모드로 복구
|
||||
setIsManualMode(false);
|
||||
console.log("🔄 자동 모드로 복구:", {
|
||||
field: component.columnName,
|
||||
value: newValue
|
||||
});
|
||||
|
||||
// 채번 규칙 ID 복구
|
||||
if (isInteractive && onFormDataChange && component.columnName) {
|
||||
const ruleId = testAutoGeneration.options?.numberingRuleId;
|
||||
if (ruleId) {
|
||||
const ruleIdKey = `${component.columnName}_numberingRuleId`;
|
||||
onFormDataChange(ruleIdKey, ruleId);
|
||||
console.log("✅ 채번 규칙 ID 복구 (자동 모드):", ruleIdKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// isInteractive 모드에서는 formData 업데이트
|
||||
if (isInteractive && onFormDataChange && component.columnName) {
|
||||
onFormDataChange(component.columnName, newValue);
|
||||
|
|
|
|||
Loading…
Reference in New Issue