우측 패널 항목 삭제 기능 구현

This commit is contained in:
dohyeons
2025-11-07 18:20:24 +09:00
parent 3009d1eecc
commit 68577a09f9
6 changed files with 246 additions and 17 deletions

View File

@@ -394,12 +394,25 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
// 삭제 확인
const handleDeleteConfirm = useCallback(async () => {
const tableName = deleteModalPanel === "left"
// 우측 패널 삭제 시 중계 테이블 확인
let tableName = deleteModalPanel === "left"
? componentConfig.leftPanel?.tableName
: componentConfig.rightPanel?.tableName;
// 우측 패널 + 중계 테이블 모드인 경우
if (deleteModalPanel === "right" && componentConfig.rightPanel?.addConfig?.targetTable) {
tableName = componentConfig.rightPanel.addConfig.targetTable;
console.log("🔗 중계 테이블 모드: 삭제 대상 테이블 =", tableName);
}
const sourceColumn = componentConfig.leftPanel?.itemAddConfig?.sourceColumn || 'id';
const primaryKey = deleteModalItem[sourceColumn] || deleteModalItem.id || deleteModalItem.ID;
let primaryKey: any = deleteModalItem[sourceColumn] || deleteModalItem.id || deleteModalItem.ID;
// 복합키 처리: deleteModalItem 전체를 전달 (백엔드에서 복합키 자동 처리)
if (deleteModalItem && typeof deleteModalItem === 'object') {
primaryKey = deleteModalItem;
console.log("🔑 복합키 가능성: 전체 객체 전달", primaryKey);
}
if (!tableName || !primaryKey) {
toast({
@@ -507,13 +520,39 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
// 테이블명과 모달 컬럼 결정
let tableName: string | undefined;
let modalColumns: Array<{ name: string; label: string; required?: boolean }> | undefined;
let finalData = { ...addModalFormData };
if (addModalPanel === "left") {
tableName = componentConfig.leftPanel?.tableName;
modalColumns = componentConfig.leftPanel?.addModalColumns;
} else if (addModalPanel === "right") {
tableName = componentConfig.rightPanel?.tableName;
modalColumns = componentConfig.rightPanel?.addModalColumns;
// 우측 패널: 중계 테이블 설정이 있는지 확인
const addConfig = componentConfig.rightPanel?.addConfig;
if (addConfig?.targetTable) {
// 중계 테이블 모드
tableName = addConfig.targetTable;
modalColumns = componentConfig.rightPanel?.addModalColumns;
// 좌측 패널에서 선택된 값 자동 채우기
if (addConfig.leftPanelColumn && addConfig.targetColumn && selectedLeftItem) {
const leftValue = selectedLeftItem[addConfig.leftPanelColumn];
finalData[addConfig.targetColumn] = leftValue;
console.log(`🔗 좌측 패널 값 자동 채움: ${addConfig.targetColumn} = ${leftValue}`);
}
// 자동 채움 컬럼 추가
if (addConfig.autoFillColumns) {
Object.entries(addConfig.autoFillColumns).forEach(([key, value]) => {
finalData[key] = value;
});
console.log("🔧 자동 채움 컬럼:", addConfig.autoFillColumns);
}
} else {
// 일반 테이블 모드
tableName = componentConfig.rightPanel?.tableName;
modalColumns = componentConfig.rightPanel?.addModalColumns;
}
} else if (addModalPanel === "left-item") {
// 하위 항목 추가 (좌측 테이블에 추가)
tableName = componentConfig.leftPanel?.tableName;
@@ -543,9 +582,9 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
}
try {
console.log("📝 데이터 추가:", { tableName, data: addModalFormData });
console.log("📝 데이터 추가:", { tableName, data: finalData });
const result = await dataApi.createRecord(tableName, addModalFormData);
const result = await dataApi.createRecord(tableName, finalData);
if (result.success) {
toast({