@topgrid/grid-pro-datamap
Pro: DataMap (foreign key display) · 상용 (EULA)
이 페이지는 소스 코드의 TSDoc 주석에서 자동 생성됩니다(내부 표식 정제). 큐레이트된 시작용 요약은 API 레퍼런스 참고.
총 14개 public export — 함수 2 · 훅 0 · 컴포넌트 2 · 타입 10 · 상수 0.
컴포넌트
DataMapCell
DataMapCell<TData>: TanStack CellContext 수신 → column.dataMap.getDisplay(value) → 레이블 렌더.
- 정적 dataMap: column.columnDef.dataMap가 DataMap 인스턴스
- 함수형 dataMap: column.columnDef.dataMap(row.original) → DataMap 인스턴스
- getDisplay 결과 없음(undefined) → String(value ?? '') fallback (.3)
- dataMap 미설정 시 → String(value ?? '') fallback (.1)
: TanStack CellContext 표준 API 사용 : no any (DataMapColumnDef<TData> 타입 캐스팅 — DataMap 전용 확장 필드 접근용) : 가상화 호환 — resolveDataMap + getDisplay 모두 O(1)
DataMapCell(info: CellContext<TData, unknown>): Element
| 파라미터 | 타입 | 설명 |
|---|---|---|
info | CellContext<TData, unknown> | TanStack CellContext<TData, unknown> (createColumns.ts L128-130 패턴) |
반환 — span 엘리먼트 — 레이블 텍스트 또는 fallback
DataMapEditor
DataMapEditor<TItem>: 편집 셀 필터-타이핑 드롭다운 컴포넌트.
- 마운트 시 input에 자동 포커스
- 타이핑 → items 필터링 (대소문자 무관, IME 조합 중 필터 억제)
- 드롭다운: absolute z-50 bg-white border border-gray-200 rounded shadow-md max-h-48 overflow-y-auto
- 키보드: ArrowDown/Up 이동, Enter 선택, Escape 취소
- ARIA: role="combobox" + aria-expanded + role="listbox" + role="option"
- highlightedIndex: filtered.length 변경 시 -1 리셋 (spec Section 11.2 risk #4)
- isComposing: useRef<boolean> 사용 — setState 불필요 (spec Section 11.2 risk #3)
: DataMapEditorProps<TItem> 표준 API (spec Section 3.1) : no any — TItem 제네릭 상한 : Tailwind CSS only : getItems + Array.filter — O(n), 가상화 호환
DataMapEditor(props: DataMapEditorProps<TItem>): Element
| 파라미터 | 타입 | 설명 |
|---|---|---|
props | DataMapEditorProps<TItem> | DataMapEditorProps<TItem> |
반환 — 입력 필드 + 조건부 드롭다운 컨테이너
함수
createAsyncDataMap
createAsyncDataMap<TItem>: AsyncDataMap 팩토리.
- DataMap<TItem> 완전 구현: getDisplay, getItems, getValue
- 4-state 상태머신: idle → loading → loaded/error (Section 12)
- staleTime 기반 캐싱 + invalidate
- pendingPromise de-dupe: 동시 load 호출 시 동일 Promise 공유
- onStateChange?: 구독 콜백 등록 → 구독 해제 함수 반환 (Section 3.1)
createAsyncDataMap(options: CreateAsyncDataMapOptions<TItem>): AsyncDataMap<TItem>
| 파라미터 | 타입 | 설명 |
|---|---|---|
options | CreateAsyncDataMapOptions<TItem> | CreateAsyncDataMapOptions<TItem> |
반환 — AsyncDataMap<TItem>
createDataMap
createDataMap<TItem>: DataMap 팩토리 함수. items 배열과 valuePath/displayPath 설정으로 DataMap 인스턴스 생성.
createDataMap(options: CreateDataMapOptions<TItem>): DataMap<TItem>
예시
const map = createDataMap({
items: [{ code: 'A', name: '항목A' }],
valuePath: 'code',
displayPath: 'name',
});
map.getDisplay('A'); // '항목A'
map.getValue('항목A'); // 'A'
타입 · 인터페이스
AsyncDataMap
AsyncDataMap<TItem>: 비동기 DataMap 인터페이스. DataMap<TItem>을 확장 — DataMapEditor/DataMapCell에 동기 DataMap과 동일하게 사용 가능.
추가 멤버:
- state: 현재 로딩 상태 (readonly)
- load: 비동기 로드 트리거 — Promise<void> (이미 loading 중이면 동일 Promise 공유)
- invalidate: 캐시 무효화 → state 'idle' 리셋 → 다음 getItems 시 재로드
- onStateChange?: state 변경 콜백 등록 (DataMapEditor spinner 연동용) 반환값 = unsubscribe 함수 (DataMapEditor useEffect cleanup 호출)
: no any — TItem 상한 유지 : onStateChange? optional — 미제공 시 undefined 체크 필수
| 속성 | 타입 | 설명 |
|---|---|---|
state | AsyncDataMapState | |
getDisplay | unknown | |
getItems | unknown | |
getValue | unknown | |
invalidate | unknown | |
load | unknown | |
onStateChange? | unknown |
CreateAsyncDataMapOptions
CreateAsyncDataMapOptions<TItem>: createAsyncDataMap 팩토리 옵션.
: no any
: staleTime? optional — 미제공 시 내부 DEFAULT_STALE_TIME(300_000 ms) 사용.
내부 소비: options.staleTime !== undefined ? options.staleTime : DEFAULT_STALE_TIME
| 속성 | 타입 | 설명 |
|---|---|---|
displayPath | PathOrAccessor<TItem, string> | 표시 레이블 경로 또는 accessor |
loader | (…) => … | 옵션 항목 비동기 로더 — Promise<TItem[]> 반환 |
staleTime? | number | 캐시 유효 기간 (ms). 미제공 시 5분(300_000 ms). : optional — staleTime !== undefined 체크 후 내부 사용 |
valuePath | PathOrAccessor<TItem, unknown> | 코드 값 경로 또는 accessor |