feat: 품목 납기일 일괄 적용 기능 추가
- ModalRepeaterTableComponent에 납기일 자동 일괄 적용 로직 구현 - 첫 납기일 선택 시 빈 행에 자동으로 동일 날짜 적용 - isDeliveryDateApplied 플래그로 중복 실행 방지 - ScreenModal 환경에서 onFormDataChange 경로 지원
This commit is contained in:
@@ -195,17 +195,57 @@ export function ModalRepeaterTableComponent({
|
||||
const columnName = component?.columnName;
|
||||
const value = (columnName && formData?.[columnName]) || componentConfig?.value || propValue || [];
|
||||
|
||||
// ✅ onChange 래퍼 (기존 onChange 콜백 + onFormDataChange 호출)
|
||||
// ✅ onChange 래퍼 (기존 onChange 콜백 + onFormDataChange 호출 + 납기일 일괄 적용)
|
||||
const handleChange = (newData: any[]) => {
|
||||
console.log("🔄 ModalRepeaterTableComponent.handleChange 호출:", {
|
||||
dataLength: newData.length,
|
||||
columnName,
|
||||
hasExternalOnChange: !!(componentConfig?.onChange || propOnChange),
|
||||
hasOnFormDataChange: !!(onFormDataChange && columnName),
|
||||
});
|
||||
|
||||
// 🆕 납기일 일괄 적용 로직 (납기일 필드가 있는 경우만)
|
||||
let processedData = newData;
|
||||
|
||||
// 납기일 필드 찾기 (item_due_date, delivery_date, due_date 등)
|
||||
const dateField = columns.find(
|
||||
(col) =>
|
||||
col.field === "item_due_date" ||
|
||||
col.field === "delivery_date" ||
|
||||
col.field === "due_date"
|
||||
);
|
||||
|
||||
if (dateField && !isDeliveryDateApplied && newData.length > 0) {
|
||||
// 현재 상태: 납기일이 있는 행과 없는 행 개수 체크
|
||||
const itemsWithDate = newData.filter((item) => item[dateField.field]);
|
||||
const itemsWithoutDate = newData.filter((item) => !item[dateField.field]);
|
||||
|
||||
// 정확히 1개만 날짜가 있고, 나머지는 모두 비어있을 때 일괄 적용
|
||||
if (itemsWithDate.length === 1 && itemsWithoutDate.length > 0) {
|
||||
const selectedDate = itemsWithDate[0][dateField.field];
|
||||
processedData = newData.map((item) => ({
|
||||
...item,
|
||||
[dateField.field]: selectedDate, // 모든 행에 동일한 납기일 적용
|
||||
}));
|
||||
|
||||
setIsDeliveryDateApplied(true); // 플래그 활성화
|
||||
|
||||
console.log("✅ 납기일 일괄 적용 완료:", selectedDate);
|
||||
console.log(` - 대상: ${itemsWithoutDate.length}개 행에 ${selectedDate} 적용`);
|
||||
}
|
||||
}
|
||||
|
||||
// 기존 onChange 콜백 호출 (호환성)
|
||||
const externalOnChange = componentConfig?.onChange || propOnChange;
|
||||
if (externalOnChange) {
|
||||
externalOnChange(newData);
|
||||
console.log("📤 외부 onChange 호출");
|
||||
externalOnChange(processedData);
|
||||
}
|
||||
|
||||
// 🆕 onFormDataChange 호출하여 EditModal의 groupData 업데이트
|
||||
if (onFormDataChange && columnName) {
|
||||
onFormDataChange(columnName, newData);
|
||||
console.log("📤 onFormDataChange 호출:", columnName);
|
||||
onFormDataChange(columnName, processedData);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -219,6 +259,9 @@ export function ModalRepeaterTableComponent({
|
||||
const companyCode = componentConfig?.companyCode || propCompanyCode;
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
|
||||
// 🆕 납기일 일괄 적용 플래그 (딱 한 번만 실행)
|
||||
const [isDeliveryDateApplied, setIsDeliveryDateApplied] = useState(false);
|
||||
|
||||
// columns가 비어있으면 sourceColumns로부터 자동 생성
|
||||
const columns = React.useMemo((): RepeaterColumnConfig[] => {
|
||||
const configuredColumns = componentConfig?.columns || propColumns || [];
|
||||
|
||||
Reference in New Issue
Block a user