ERP-node/frontend/lib/registry/components/universal-form-modal/config.ts

323 lines
6.8 KiB
TypeScript
Raw Normal View History

/**
*
*/
import {
UniversalFormModalConfig,
TableSectionConfig,
TableColumnConfig,
ValueMappingConfig,
ColumnModeConfig,
TablePreFilter,
TableModalFilter,
TableCalculationRule,
ConditionalTableConfig,
ConditionalTableOption,
} from "./types";
// 기본 설정값
export const defaultConfig: UniversalFormModalConfig = {
modal: {
title: "데이터 입력",
description: "",
size: "lg",
closeOnOutsideClick: false,
showCloseButton: true,
},
sections: [
{
id: "default",
title: "기본 정보",
description: "",
collapsible: false,
defaultCollapsed: false,
columns: 2,
gap: "16px",
fields: [],
repeatable: false,
},
],
saveConfig: {
tableName: "",
primaryKeyColumn: "id",
afterSave: {
closeModal: true,
refreshParent: true,
showToast: true,
},
},
editMode: {
enabled: false,
loadDataOnOpen: true,
identifierField: "id",
},
};
// 기본 필드 설정
export const defaultFieldConfig = {
id: "",
columnName: "",
label: "",
fieldType: "text" as const,
required: false,
defaultValue: "",
placeholder: "",
disabled: false,
readOnly: false,
width: "100%",
gridSpan: 6,
receiveFromParent: false,
};
// 기본 섹션 설정
export const defaultSectionConfig = {
id: "",
title: "새 섹션",
description: "",
type: "fields" as const,
collapsible: false,
defaultCollapsed: false,
columns: 2,
gap: "16px",
fields: [],
repeatable: false,
repeatConfig: {
minItems: 0,
maxItems: 10,
addButtonText: "+ 추가",
removeButtonText: "삭제",
itemTitle: "항목 {index}",
confirmRemove: false,
},
optionalFieldGroups: [],
linkedFieldGroups: [],
};
// ============================================
// 테이블 섹션 관련 기본값
// ============================================
// 기본 테이블 섹션 설정
export const defaultTableSectionConfig: TableSectionConfig = {
source: {
tableName: "",
displayColumns: [],
searchColumns: [],
columnLabels: {},
},
filters: {
preFilters: [],
modalFilters: [],
},
columns: [],
calculations: [],
saveConfig: {
targetTable: undefined,
uniqueField: undefined,
},
uiConfig: {
addButtonText: "항목 검색",
modalTitle: "항목 검색 및 선택",
multiSelect: true,
maxHeight: "400px",
},
conditionalTable: undefined,
};
// 기본 조건부 테이블 설정
export const defaultConditionalTableConfig: ConditionalTableConfig = {
enabled: false,
triggerType: "checkbox",
conditionColumn: "",
options: [],
optionSource: {
enabled: false,
tableName: "",
valueColumn: "",
labelColumn: "",
filterCondition: "",
},
sourceFilter: {
enabled: false,
filterColumn: "",
},
};
// 기본 조건부 테이블 옵션 설정
export const defaultConditionalTableOptionConfig: ConditionalTableOption = {
id: "",
value: "",
label: "",
};
// 기본 테이블 컬럼 설정
export const defaultTableColumnConfig: TableColumnConfig = {
field: "",
label: "",
type: "text",
editable: true,
calculated: false,
required: false,
width: "150px",
minWidth: "60px",
maxWidth: "400px",
defaultValue: undefined,
selectOptions: [],
valueMapping: undefined,
columnModes: [],
};
// 기본 값 매핑 설정
export const defaultValueMappingConfig: ValueMappingConfig = {
type: "source",
sourceField: "",
externalRef: undefined,
internalField: undefined,
};
// 기본 컬럼 모드 설정
export const defaultColumnModeConfig: ColumnModeConfig = {
id: "",
label: "",
isDefault: false,
valueMapping: {
type: "source",
sourceField: "",
},
};
// 기본 사전 필터 설정
export const defaultPreFilterConfig: TablePreFilter = {
column: "",
operator: "=",
value: "",
};
// 기본 모달 필터 설정
export const defaultModalFilterConfig: TableModalFilter = {
column: "",
label: "",
type: "category",
categoryRef: undefined,
options: [],
optionsFromTable: undefined,
defaultValue: undefined,
};
// 기본 계산 규칙 설정
export const defaultCalculationRuleConfig: TableCalculationRule = {
resultField: "",
formula: "",
dependencies: [],
};
// 기본 옵셔널 필드 그룹 설정
export const defaultOptionalFieldGroupConfig = {
id: "",
fields: [],
// 섹션 스타일 설정
title: "옵셔널 그룹",
description: "",
columns: undefined, // undefined면 부모 섹션 columns 상속
collapsible: false,
defaultCollapsed: false,
// 버튼 설정
addButtonText: "",
removeButtonText: "제거",
confirmRemove: false,
// 연동 필드 설정
triggerField: "",
triggerValueOnAdd: "",
triggerValueOnRemove: "",
};
// 기본 연동 필드 그룹 설정
export const defaultLinkedFieldGroupConfig = {
id: "",
label: "연동 필드",
sourceTable: "dept_info",
displayFormat: "code_name" as const,
displayColumn: "dept_name",
valueColumn: "dept_code",
mappings: [],
required: false,
placeholder: "선택하세요",
gridSpan: 6,
};
// 기본 연동 필드 매핑 설정
export const defaultLinkedFieldMappingConfig = {
sourceColumn: "",
targetColumn: "",
};
// 기본 채번규칙 설정
export const defaultNumberingRuleConfig = {
enabled: false,
ruleId: "",
editable: false,
hidden: false,
generateOnOpen: true,
generateOnSave: false,
};
// 기본 Select 옵션 설정
export const defaultSelectOptionsConfig = {
type: "static" as const,
staticOptions: [],
tableName: "",
valueColumn: "",
labelColumn: "",
filterCondition: "",
codeCategory: "",
};
// 모달 크기별 너비
export const MODAL_SIZE_MAP = {
sm: 400,
md: 600,
lg: 800,
xl: 1000,
full: "100%",
} as const;
// 유틸리티: 고유 ID 생성
export const generateUniqueId = (prefix: string = "item"): string => {
return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
};
// 유틸리티: 섹션 ID 생성
export const generateSectionId = (): string => {
return generateUniqueId("section");
};
// 유틸리티: 필드 ID 생성
export const generateFieldId = (): string => {
return generateUniqueId("field");
};
// 유틸리티: 연동 필드 그룹 ID 생성
export const generateLinkedFieldGroupId = (): string => {
return generateUniqueId("linked");
};
// 유틸리티: 테이블 컬럼 ID 생성
export const generateTableColumnId = (): string => {
return generateUniqueId("tcol");
};
// 유틸리티: 컬럼 모드 ID 생성
export const generateColumnModeId = (): string => {
return generateUniqueId("mode");
};
// 유틸리티: 필터 ID 생성
export const generateFilterId = (): string => {
return generateUniqueId("filter");
};
// 유틸리티: 조건부 테이블 옵션 ID 생성
export const generateConditionalOptionId = (): string => {
return generateUniqueId("cond");
};