topgrid API 레퍼런스
이 레퍼런스는 핵심 그리드 패키지(아래 §0 표의 13종)의 public export 와 주요 시그니처를 정리한다.
전체 31 패키지 구성은 소개·아키텍처, 차트(4종)는 차트,
Vue 어댑터는 @topgrid/grid-vue 를 참고. 시작 가이드는 시작하기, 셀 렌더러 상세는 아래 §2.
타입(ColumnDef, Table, Row, Cell, Header 등)은 별도 표기가 없는 한
TanStack Table v8 의 것을 그대로 사용한다 (https://tanstack.com/table/v8).
0. 핵심 패키지 (이 레퍼런스 범위)
| 패키지 | 라이선스 | 분류 | 목적 |
|---|---|---|---|
@topgrid/grid-core | MIT | Free | 핵심 Grid + 상태 훅 + 페이지네이션 + 컬럼 팩토리 |
@topgrid/grid-renderers | MIT | Free | 셀 렌더러 11종 + EditableCell + 레지스트리 |
@topgrid/grid-features | MIT | Free | 다중 정렬 + 필터 UI + 글로벌 검색 |
@topgrid/grid-export | MIT | Free | Excel / CSV / PDF / Clipboard / Print |
@topgrid/grid-license | EULA | Pro | 라이선스 검증 + Watermark |
@topgrid/grid-pro-header | EULA | Pro | 다단 헤더 (createColumnGroup) |
@topgrid/grid-pro-tracking | EULA | Pro | 변경 추적 (ChangeTrackingGrid) |
@topgrid/grid-pro-range | EULA | Pro | 범위 선택 + 키보드 nav + clipboard + drag-fill |
@topgrid/grid-pro-master | EULA | Pro | Master-Detail + Context Menu |
@topgrid/grid-pro-datamap | EULA | Pro | DataMap (foreign key 표시) |
@topgrid/grid-pro-merging | EULA | Pro | 셀 병합 (rowSpan) |
@topgrid/grid-pro-agg | EULA | Pro | 집계 (group footer) |
@topgrid/grid | EULA | Pro (meta) | 전 패키지 aggregate facade |
의존성
@topgrid/grid-core (base)
├── @topgrid/grid-renderers (uses grid-core)
├── @topgrid/grid-features (uses grid-core)
├── @topgrid/grid-export (uses grid-core)
├── @topgrid/grid-license (uses grid-core)
└── @topgrid/grid-pro-* (uses grid-core + grid-license)
Peer Dependencies (전 패키지):
react ^18.0.0 || ^19.0.0
react-dom ^18.0.0 || ^19.0.0
@tanstack/react-table ^8.0.0
@tanstack/react-virtual ^3.0.0 (가상화 사용 시)
Pro 패키지는 라이선스 키 미설정 시 "Unlicensed @topgrid/grid" watermark 를 표시한다.
1. @topgrid/grid-core (MIT)
1.1 주요 Export
| Export | 종류 | 설명 |
|---|---|---|
Grid | Component | 기본 그리드 (TanStack Table wrapper) |
useGridState | Hook | 정렬/필터/페이지/가시성 통합 상태 |
useUrlSync | Hook | URL query param ↔ grid state 양방향 sync |
useStoragePersist | Hook | localStorage 에 state 영속화 |
GridPagination | Component | 페이지네이션 |
PageSizeSelect | Component | 페이지 크기 선택 |
TotalCount | Component | 총 개수 표시 |
createColumns | Function | TopgridColumnDef[] → TanStack ColumnDef[] 변환 |
defaultRendererRegistry / registerRenderer | Registry | type 기반 렌더러 디스패치 |
useColumnDrag / DropIndicator / useColumnOrderPersist | Hook/Component | 컬럼 드래그 reorder + 순서 영속화 |
SortBadge | Component | 다중 정렬 우선순위 배지 |
SortClearButton | Component | 정렬 초기화 버튼 |
타입: GridProps, GridHandle, GridScrollToOptions, BaseGridProps,
CellClassNameCallback, RowClassNameCallback, GridState, UseGridStateOptions,
PaginationMode, TopgridColumnDef, TopgridColumnType, RendererFn,
ColumnPersistenceOptions 등.
deprecated (다음 메이저에서 제거 예정):
createTopgridColumnHelper,createGroupedColumns/TopgridColumnGroup,useColumnPersistence,ColumnVisibilityMenu, 그리고 legacy 그리드 별칭 (BaseGrid/VirtualGrid/ColumnPinGrid/GroupedHeaderGrid/TreeGrid). 신규 코드는Grid+createColumns를 사용한다.
1.2 Grid 컴포넌트
import { Grid, type GridProps, type GridHandle } from '@topgrid/grid-core';
import { useRef } from 'react';
import type { ColumnDef } from '@tanstack/react-table';
function MyGrid() {
const gridRef = useRef<GridHandle<MyRow>>(null);
return (
<Grid<MyRow>
ref={gridRef}
data={data}
columns={columns}
enableSorting
enableColumnPinning
defaultColumnPinning={{ left: ['name'], right: [] }}
cellClassName={(ctx) => (ctx.columnId === 'age' ? 'text-right' : '')}
onCellKeyDown={(ctx, event) => { /* keyboard */ }}
onStartEditing={(rowId, colId) => { /* edit hook */ }}
/>
);
}
주요 GridProps 필드:
interface GridProps<TData> {
data: TData[];
columns: ColumnDef<TData>[];
// 정렬 / 필터 / 페이징
enableSorting?: boolean;
enableFiltering?: boolean;
enablePagination?: boolean;
paginationMode?: PaginationMode;
// 컬럼 고정
enableColumnPinning?: boolean;
defaultColumnPinning?: ColumnPinningState; // { left?: string[]; right?: string[] }
// 가상화 (둘 다 필요)
enableVirtualization?: boolean;
estimatedRowHeight?: number;
virtualOverscan?: number;
// 셀 / 행 스타일
cellClassName?: CellClassNameCallback<TData>; // (ctx: GridCellContext) => string
rowClassName?: RowClassNameCallback<TData>; // (row) => string
// 편집 / 이벤트 hook
onCellKeyDown?: (ctx: GridCellContext, event) => void;
onStartEditing?: (rowId: string | number, colId: string) => void;
onRowClick?: (row: TData, event: MouseEvent<HTMLTableRowElement>) => void;
// 기타
loading?: boolean;
emptyText?: string;
className?: string;
}
GridHandle (ref) 은 scrollToIndex 등 imperative 메서드와 startEditing
(→ onStartEditing 콜백 위임) 을 노출한다.
1.3 useGridState
const grid = useGridState<MyRow>({
initialSort: [{ id: 'name', desc: false }],
initialFilters: [],
initialPagination: { pageIndex: 0, pageSize: 20 },
initialColumnVisibility: {},
});
// grid.table / grid.pagination / grid.setPagination / grid.sorting ...
1.4 useUrlSync / useStoragePersist
useUrlSync(grid, { paramPrefix: 'list_' }); // → list_sort, list_page
useStoragePersist(grid, { storageKey: 'my-grid' });
1.5 페이지네이션
import { GridPagination, PageSizeSelect, TotalCount } from '@topgrid/grid-core';
<GridPagination
table={table}
mode="client" // | "server"
totalCount={1000}
pageSizeOptions={[10, 20, 50, 100]}
showTotalCount
/>
1.6 createColumns (컬럼 팩토리)
TopgridColumnDef[] 를 받아 TanStack ColumnDef[] 로 변환한다. type 키로 셀
렌더러를 자동 매핑한다 (렌더러 wiring 은 §2.5 참고).
import { createColumns } from '@topgrid/grid-core';
const columns = createColumns<MyRow>([
{ id: 'name', accessorKey: 'name', header: '이름', type: 'text' },
{ id: 'amount', accessorKey: 'amount', header: '금액', type: 'number' },
{ id: 'created', accessorKey: 'created', header: '생성일', type: 'date' },
]);
2. @topgrid/grid-renderers (MIT)
표시 셀 11종 + 인라인 편집 셀 1종 + 포매팅 헬퍼 + 렌더러 레지스트리. 전체 prop 계약과 엣지 케이스는 아래 카탈로그·예시를 참고한다.