From 631b09172b48ec24c4f0131bc97017b87ddf0c47 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Fri, 10 Oct 2025 11:45:21 +0900 Subject: (김준회) fix: data-table 공통컴포넌트의 nested columns에 대한 child column의 width 오류 수정 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/data-table/data-table-detail.tsx | 13 ++++++++----- components/data-table/data-table-resizer.tsx | 12 +++++++++--- components/data-table/data-table.tsx | 18 ++++++++++++------ components/data-table/expandable-data-table.tsx | 7 +++++-- components/data-table/infinite-data-table.tsx | 7 +++++-- 5 files changed, 39 insertions(+), 18 deletions(-) (limited to 'components/data-table') diff --git a/components/data-table/data-table-detail.tsx b/components/data-table/data-table-detail.tsx index c34f9e73..f3f09fe2 100644 --- a/components/data-table/data-table-detail.tsx +++ b/components/data-table/data-table-detail.tsx @@ -87,11 +87,13 @@ export function DataTableDetail({ data-column-id={header.column.id} className={compactStyles.header} style={{ - ...getCommonPinningStylesWithBorder({ - column: header.column, - isHeader: true + ...getCommonPinningStylesWithBorder({ + column: header.column, + isHeader: true }), - width: header.getSize(), + // 부모 그룹 헤더는 colSpan으로 너비가 결정되므로 width 설정하지 않음 + // 자식 헤더만 개별 width 설정 + ...(!('columns' in header.column.columnDef) && { width: header.getSize() }), }} >
@@ -102,7 +104,8 @@ export function DataTableDetail({ header.getContext() )} - {header.column.getCanResize() && ( + {/* 부모 그룹 헤더는 리사이즈 불가, 자식 헤더만 리사이즈 가능 */} + {header.column.getCanResize() && !('columns' in header.column.columnDef) && ( )}
diff --git a/components/data-table/data-table-resizer.tsx b/components/data-table/data-table-resizer.tsx index 9723a0b4..8053606d 100644 --- a/components/data-table/data-table-resizer.tsx +++ b/components/data-table/data-table-resizer.tsx @@ -18,9 +18,10 @@ export function DataTableResizer({ // 더블클릭 시 너비 자동 조정 함수 const handleDoubleClick = React.useCallback(() => { + // 테이블 인스턴스 가져오기 const table = header.getContext().table - + // 0. 몇 가지 기본 설정 const defaultMinWidth = 80 // 기본 최소 너비 const extraPadding = 24 // 여유 공간 @@ -75,15 +76,20 @@ export function DataTableResizer({ table.setColumnSizing(updatedSizing) }, [header]) + const handleMouseDown = React.useCallback((e: React.MouseEvent) => { + // 기본 resize handler 사용 + header.getResizeHandler()(e); + }, [header]); + return ( <> {/* 헤더 콘텐츠 참조를 위한 요소 */}
- + {/* 리사이저 */}
({
{stableChildren}
- +
+ {/* table-fixed 제거: nested header에서 동적 width 변경을 위해 유연한 레이아웃 사용 */} {/* 테이블 헤더 */} {table.getHeaderGroups().map((headerGroup) => ( @@ -92,11 +93,15 @@ export function DataTable({ data-column-id={header.column.id} className={cn(compactStyles.header, "whitespace-normal break-words")} style={{ - ...getCommonPinningStylesWithBorder({ - column: header.column, - isHeader: true + ...getCommonPinningStylesWithBorder({ + column: header.column, + isHeader: true + }), + // 부모 그룹 헤더는 colSpan으로 너비가 결정되므로 width 설정하지 않음 + // 자식 헤더만 개별 width 설정 + ...(!('columns' in header.column.columnDef) && { + width: header.getSize() }), - width: header.getSize(), }} >
@@ -107,7 +112,8 @@ export function DataTable({ header.getContext() )} - {header.column.getCanResize() && ( + {/* 부모 그룹 헤더는 리사이즈 불가, 자식 헤더만 리사이즈 가능 */} + {header.column.getCanResize() && !('columns' in header.column.columnDef) && ( )}
diff --git a/components/data-table/expandable-data-table.tsx b/components/data-table/expandable-data-table.tsx index 15c59540..d36f0251 100644 --- a/components/data-table/expandable-data-table.tsx +++ b/components/data-table/expandable-data-table.tsx @@ -532,7 +532,9 @@ export function ExpandableDataTable({ )} style={{ ...getPinnedStyle(header.column, true), - width: header.getSize() + // 부모 그룹 헤더는 colSpan으로 너비가 결정되므로 width 설정하지 않음 + // 자식 헤더만 개별 width 설정 + ...(!('columns' in header.column.columnDef) && { width: header.getSize() }), }} >
@@ -543,7 +545,8 @@ export function ExpandableDataTable({ header.getContext() )} - {header.column.getCanResize() && ( + {/* 부모 그룹 헤더는 리사이즈 불가, 자식 헤더만 리사이즈 가능 */} + {header.column.getCanResize() && !('columns' in header.column.columnDef) && ( )}
diff --git a/components/data-table/infinite-data-table.tsx b/components/data-table/infinite-data-table.tsx index b8764d62..d766f35c 100644 --- a/components/data-table/infinite-data-table.tsx +++ b/components/data-table/infinite-data-table.tsx @@ -167,7 +167,9 @@ export function InfiniteDataTable({ className={compactStyles.header} style={{ ...getPinnedStyle(header.column, true), // 🎯 헤더임을 명시 - width: header.getSize(), // 🎯 width 별도 설정 + // 부모 그룹 헤더는 colSpan으로 너비가 결정되므로 width 설정하지 않음 + // 자식 헤더만 개별 width 설정 + ...(!('columns' in header.column.columnDef) && { width: header.getSize() }), }} >
@@ -178,7 +180,8 @@ export function InfiniteDataTable({ header.getContext() )} - {header.column.getCanResize() && ( + {/* 부모 그룹 헤더는 리사이즈 불가, 자식 헤더만 리사이즈 가능 */} + {header.column.getCanResize() && !('columns' in header.column.columnDef) && ( )}
-- cgit v1.2.3