feat: 수주일(order_date) 일괄 적용 기능 구현
- OrderItemRepeaterTable에 order_date 컬럼 추가 - ModalRepeaterTableComponent에 수주일 일괄 적용 로직 구현 - 원본 newData 참조로 납기일 로직과 독립적으로 작동 - 모든 행이 비어있는 초기 상태에서 첫 선택 시 자동 적용 - isOrderDateApplied 플래그로 1회만 실행 보장
This commit is contained in:
parent
c7d47a6634
commit
a1117092aa
|
|
@ -75,6 +75,13 @@ const ORDER_COLUMNS: RepeaterColumnConfig[] = [
|
||||||
calculated: true,
|
calculated: true,
|
||||||
width: "120px",
|
width: "120px",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
field: "order_date",
|
||||||
|
label: "수주일",
|
||||||
|
type: "date",
|
||||||
|
editable: true,
|
||||||
|
width: "130px",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
field: "delivery_date",
|
field: "delivery_date",
|
||||||
label: "납기일",
|
label: "납기일",
|
||||||
|
|
|
||||||
|
|
@ -197,13 +197,6 @@ export function ModalRepeaterTableComponent({
|
||||||
|
|
||||||
// ✅ onChange 래퍼 (기존 onChange 콜백 + onFormDataChange 호출 + 납기일 일괄 적용)
|
// ✅ onChange 래퍼 (기존 onChange 콜백 + onFormDataChange 호출 + 납기일 일괄 적용)
|
||||||
const handleChange = (newData: any[]) => {
|
const handleChange = (newData: any[]) => {
|
||||||
console.log("🔄 ModalRepeaterTableComponent.handleChange 호출:", {
|
|
||||||
dataLength: newData.length,
|
|
||||||
columnName,
|
|
||||||
hasExternalOnChange: !!(componentConfig?.onChange || propOnChange),
|
|
||||||
hasOnFormDataChange: !!(onFormDataChange && columnName),
|
|
||||||
});
|
|
||||||
|
|
||||||
// 🆕 납기일 일괄 적용 로직 (납기일 필드가 있는 경우만)
|
// 🆕 납기일 일괄 적용 로직 (납기일 필드가 있는 경우만)
|
||||||
let processedData = newData;
|
let processedData = newData;
|
||||||
|
|
||||||
|
|
@ -229,22 +222,41 @@ export function ModalRepeaterTableComponent({
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setIsDeliveryDateApplied(true); // 플래그 활성화
|
setIsDeliveryDateApplied(true); // 플래그 활성화
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🆕 수주일 일괄 적용 로직 (order_date 필드가 있는 경우만)
|
||||||
|
const orderDateField = columns.find(
|
||||||
|
(col) =>
|
||||||
|
col.field === "order_date" ||
|
||||||
|
col.field === "ordered_date"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (orderDateField && !isOrderDateApplied && newData.length > 0) {
|
||||||
|
// ⚠️ 중요: 원본 newData를 참조해야 납기일의 영향을 받지 않음
|
||||||
|
const itemsWithOrderDate = newData.filter((item) => item[orderDateField.field]);
|
||||||
|
const itemsWithoutOrderDate = newData.filter((item) => !item[orderDateField.field]);
|
||||||
|
|
||||||
|
// ✅ 조건: 모든 행이 비어있는 초기 상태 → 어느 행에서든 첫 선택 시 전체 적용
|
||||||
|
if (itemsWithOrderDate.length === 1 && itemsWithoutOrderDate.length === newData.length - 1) {
|
||||||
|
const selectedOrderDate = itemsWithOrderDate[0][orderDateField.field];
|
||||||
|
processedData = processedData.map((item) => ({
|
||||||
|
...item,
|
||||||
|
[orderDateField.field]: selectedOrderDate,
|
||||||
|
}));
|
||||||
|
|
||||||
console.log("✅ 납기일 일괄 적용 완료:", selectedDate);
|
setIsOrderDateApplied(true); // 플래그 활성화
|
||||||
console.log(` - 대상: ${itemsWithoutDate.length}개 행에 ${selectedDate} 적용`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 기존 onChange 콜백 호출 (호환성)
|
// 기존 onChange 콜백 호출 (호환성)
|
||||||
const externalOnChange = componentConfig?.onChange || propOnChange;
|
const externalOnChange = componentConfig?.onChange || propOnChange;
|
||||||
if (externalOnChange) {
|
if (externalOnChange) {
|
||||||
console.log("📤 외부 onChange 호출");
|
|
||||||
externalOnChange(processedData);
|
externalOnChange(processedData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🆕 onFormDataChange 호출하여 EditModal의 groupData 업데이트
|
// 🆕 onFormDataChange 호출하여 EditModal의 groupData 업데이트
|
||||||
if (onFormDataChange && columnName) {
|
if (onFormDataChange && columnName) {
|
||||||
console.log("📤 onFormDataChange 호출:", columnName);
|
|
||||||
onFormDataChange(columnName, processedData);
|
onFormDataChange(columnName, processedData);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -261,6 +273,9 @@ export function ModalRepeaterTableComponent({
|
||||||
|
|
||||||
// 🆕 납기일 일괄 적용 플래그 (딱 한 번만 실행)
|
// 🆕 납기일 일괄 적용 플래그 (딱 한 번만 실행)
|
||||||
const [isDeliveryDateApplied, setIsDeliveryDateApplied] = useState(false);
|
const [isDeliveryDateApplied, setIsDeliveryDateApplied] = useState(false);
|
||||||
|
|
||||||
|
// 🆕 수주일 일괄 적용 플래그 (딱 한 번만 실행)
|
||||||
|
const [isOrderDateApplied, setIsOrderDateApplied] = useState(false);
|
||||||
|
|
||||||
// columns가 비어있으면 sourceColumns로부터 자동 생성
|
// columns가 비어있으면 sourceColumns로부터 자동 생성
|
||||||
const columns = React.useMemo((): RepeaterColumnConfig[] => {
|
const columns = React.useMemo((): RepeaterColumnConfig[] => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue