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,
|
||||
width: "120px",
|
||||
},
|
||||
{
|
||||
field: "order_date",
|
||||
label: "수주일",
|
||||
type: "date",
|
||||
editable: true,
|
||||
width: "130px",
|
||||
},
|
||||
{
|
||||
field: "delivery_date",
|
||||
label: "납기일",
|
||||
|
|
|
|||
|
|
@ -197,13 +197,6 @@ export function ModalRepeaterTableComponent({
|
|||
|
||||
// ✅ 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;
|
||||
|
||||
|
|
@ -229,22 +222,41 @@ export function ModalRepeaterTableComponent({
|
|||
}));
|
||||
|
||||
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);
|
||||
console.log(` - 대상: ${itemsWithoutDate.length}개 행에 ${selectedDate} 적용`);
|
||||
setIsOrderDateApplied(true); // 플래그 활성화
|
||||
}
|
||||
}
|
||||
|
||||
// 기존 onChange 콜백 호출 (호환성)
|
||||
const externalOnChange = componentConfig?.onChange || propOnChange;
|
||||
if (externalOnChange) {
|
||||
console.log("📤 외부 onChange 호출");
|
||||
externalOnChange(processedData);
|
||||
}
|
||||
|
||||
// 🆕 onFormDataChange 호출하여 EditModal의 groupData 업데이트
|
||||
if (onFormDataChange && columnName) {
|
||||
console.log("📤 onFormDataChange 호출:", columnName);
|
||||
onFormDataChange(columnName, processedData);
|
||||
}
|
||||
};
|
||||
|
|
@ -261,6 +273,9 @@ export function ModalRepeaterTableComponent({
|
|||
|
||||
// 🆕 납기일 일괄 적용 플래그 (딱 한 번만 실행)
|
||||
const [isDeliveryDateApplied, setIsDeliveryDateApplied] = useState(false);
|
||||
|
||||
// 🆕 수주일 일괄 적용 플래그 (딱 한 번만 실행)
|
||||
const [isOrderDateApplied, setIsOrderDateApplied] = useState(false);
|
||||
|
||||
// columns가 비어있으면 sourceColumns로부터 자동 생성
|
||||
const columns = React.useMemo((): RepeaterColumnConfig[] => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue