feat: 테이블 설정 모달의 컬럼 저장 로직 개선
- 변경된 컬럼들만 저장하도록 로직을 개선하여 불필요한 API 호출을 줄임 - 기존 컬럼 정보와 편집된 값을 병합하여 최종 설정을 구성 - 엔티티 및 코드 타입에 대한 세부 설정 처리 로직 추가 - 저장 성공 시 사용자에게 피드백 제공 및 편집 상태 초기화 기능 구현
This commit is contained in:
parent
0a3d42f3ad
commit
059ea6b30a
|
|
@ -78,7 +78,7 @@ import {
|
|||
deleteFieldJoin,
|
||||
FieldJoin,
|
||||
} from "@/lib/api/screenGroup";
|
||||
import { tableManagementApi, ColumnTypeInfo, TableInfo } from "@/lib/api/tableManagement";
|
||||
import { tableManagementApi, ColumnTypeInfo, TableInfo, ColumnSettings } from "@/lib/api/tableManagement";
|
||||
import { screenApi } from "@/lib/api/screen";
|
||||
import { INPUT_TYPE_OPTIONS } from "@/types/input-types";
|
||||
import TableManagementPage from "@/app/(main)/admin/systemMng/tableMngList/page";
|
||||
|
|
@ -434,22 +434,97 @@ export function TableSettingModal({
|
|||
}
|
||||
};
|
||||
|
||||
// 전체 저장
|
||||
// 전체 저장 (테이블타입관리 페이지와 동일한 로직)
|
||||
const handleSaveAll = async () => {
|
||||
setSaving(true);
|
||||
try {
|
||||
// 각 컬럼 설정 저장
|
||||
for (const [columnName, settings] of Object.entries(editedColumns)) {
|
||||
await tableManagementApi.updateColumnSettings(tableName, columnName, {
|
||||
column_label: settings.displayName || "",
|
||||
input_type: (settings.inputType as string) || "text",
|
||||
reference_table: settings.referenceTable || null,
|
||||
reference_column: settings.referenceColumn || null,
|
||||
display_column: settings.displayColumn || null,
|
||||
});
|
||||
// 변경된 컬럼들만 저장
|
||||
for (const [columnName, editedSettings] of Object.entries(editedColumns)) {
|
||||
// 기존 컬럼 정보 찾기
|
||||
const originalColumn = tableColumns.find((c) => c.columnName === columnName);
|
||||
if (!originalColumn) continue;
|
||||
|
||||
// 기존 값과 편집된 값 병합
|
||||
const mergedColumn = {
|
||||
...originalColumn,
|
||||
...editedSettings,
|
||||
};
|
||||
|
||||
// detailSettings 처리 (Entity 타입인 경우)
|
||||
let finalDetailSettings = mergedColumn.detailSettings || "";
|
||||
|
||||
if (mergedColumn.inputType === "entity" && mergedColumn.referenceTable) {
|
||||
// 기존 detailSettings를 파싱하거나 새로 생성
|
||||
let existingSettings: Record<string, unknown> = {};
|
||||
if (typeof mergedColumn.detailSettings === "string" && mergedColumn.detailSettings.trim().startsWith("{")) {
|
||||
try {
|
||||
existingSettings = JSON.parse(mergedColumn.detailSettings);
|
||||
} catch {
|
||||
existingSettings = {};
|
||||
}
|
||||
}
|
||||
|
||||
// 엔티티 설정 추가
|
||||
const entitySettings = {
|
||||
...existingSettings,
|
||||
entityTable: mergedColumn.referenceTable,
|
||||
entityCodeColumn: mergedColumn.referenceColumn || "id",
|
||||
entityLabelColumn: mergedColumn.displayColumn || "name",
|
||||
placeholder: (existingSettings.placeholder as string) || "항목을 선택하세요",
|
||||
searchable: existingSettings.searchable ?? true,
|
||||
};
|
||||
|
||||
finalDetailSettings = JSON.stringify(entitySettings);
|
||||
console.log("Entity 설정 JSON 생성:", entitySettings);
|
||||
}
|
||||
|
||||
// Code 타입인 경우 hierarchyRole을 detailSettings에 포함
|
||||
if (mergedColumn.inputType === "code" && (mergedColumn as any).hierarchyRole) {
|
||||
let existingSettings: Record<string, unknown> = {};
|
||||
if (typeof finalDetailSettings === "string" && finalDetailSettings.trim().startsWith("{")) {
|
||||
try {
|
||||
existingSettings = JSON.parse(finalDetailSettings);
|
||||
} catch {
|
||||
existingSettings = {};
|
||||
}
|
||||
}
|
||||
|
||||
const codeSettings = {
|
||||
...existingSettings,
|
||||
hierarchyRole: (mergedColumn as any).hierarchyRole,
|
||||
};
|
||||
|
||||
finalDetailSettings = JSON.stringify(codeSettings);
|
||||
console.log("Code 계층 역할 설정 JSON 생성:", codeSettings);
|
||||
}
|
||||
|
||||
// ColumnSettings 인터페이스에 맞게 데이터 구성
|
||||
const columnSetting: ColumnSettings = {
|
||||
columnName: columnName,
|
||||
columnLabel: mergedColumn.displayName || originalColumn.displayName || "",
|
||||
webType: mergedColumn.inputType || originalColumn.inputType || "text",
|
||||
detailSettings: finalDetailSettings,
|
||||
codeCategory: mergedColumn.codeCategory || originalColumn.codeCategory || "",
|
||||
codeValue: mergedColumn.codeValue || originalColumn.codeValue || "",
|
||||
referenceTable: mergedColumn.referenceTable || "",
|
||||
referenceColumn: mergedColumn.referenceColumn || "",
|
||||
displayColumn: mergedColumn.displayColumn || "",
|
||||
};
|
||||
|
||||
console.log("저장할 컬럼 설정:", columnSetting);
|
||||
|
||||
// API 호출
|
||||
const response = await tableManagementApi.updateColumnSettings(tableName, columnName, columnSetting);
|
||||
|
||||
if (!response.success) {
|
||||
console.error(`컬럼 '${columnName}' 저장 실패:`, response.message);
|
||||
toast.error(`컬럼 '${columnName}' 저장 실패: ${response.message}`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
toast.success("테이블 설정이 저장되었습니다.");
|
||||
setEditedColumns({}); // 편집 상태 초기화
|
||||
onSaveSuccess?.();
|
||||
await loadTableData();
|
||||
} catch (error) {
|
||||
|
|
|
|||
|
|
@ -461,3 +461,4 @@ export default function DataFlowPanel({ groupId, screenId, screens = [] }: DataF
|
|||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -413,3 +413,4 @@ export default function FieldJoinPanel({ screenId, componentId, layoutId }: Fiel
|
|||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue