이동 함수·결과 모델
transferCominsRowBetweenTables와 transferCominsGroupBetweenTables는 comins-table에서 import하는 동기 순수 함수입니다. 입력 배열을 직접 변경하지 않고 양쪽 다음 모델을 반환합니다. 성공 결과를 부모 상태에 반영하기 전에는 화면이 바뀌지 않습니다.
성공·거절 처리
섹션 제목: “성공·거절 처리”결과가 null이면 조건 불충족/충돌 거절이며 기존 양쪽 상태를 유지합니다. 성공 결과는 source/target을 함께 반영합니다. 순수 함수에는 coordinator·canTransfer·pointer lifecycle이 없으므로 애플리케이션 권한 검사는 호출 전에 수행합니다. 툴팁이나 onTransferRejected도 발생하지 않습니다. 사용자 resolver/getter가 던지는 예외는 애플리케이션에서 처리합니다.
CominsTableTransferEndpoint
섹션 제목: “CominsTableTransferEndpoint”data
섹션 제목: “data”data: readonly TData[];필수. 부모가 소유한 읽기 전용 원본 행 배열입니다.
getRowId
섹션 제목: “getRowId”getRowId: (row: TData, dataIndex: number) => CominsRowId;필수. 입력 행의 안정적 ID를 반환합니다. 이동 전후에도 유지해야 합니다.
tableId
섹션 제목: “tableId”tableId: string;필수. source와 target의 서로 다른 ID입니다.
groups
섹션 제목: “groups”groups?: readonly TGroup[];그룹 이동에서 필요한 그룹 정의 배열입니다. 생략하면 flat endpoint입니다.
getGroupId
섹션 제목: “getGroupId”getGroupId?: (group: TGroup) => CominsRowId;그룹 endpoint에서 필요한 고유 ID resolver입니다.
getRowGroupId
섹션 제목: “getRowGroupId”getRowGroupId?: (row: TData, dataIndex: number) => CominsRowId;그룹 endpoint에서 필요한 행 소속 resolver입니다.
setRowGroupId
섹션 제목: “setRowGroupId”setRowGroupId?: (params: { fromGroupId: CominsRowId; row: TData; rowId: CominsRowId; toGroupId: CominsRowId; }) => TData;대상 그룹으로 행 소속을 바꿀 때 새 행을 반환합니다. 원본 객체와 업무 ID를 변경하지 않습니다.
CominsRowBetweenTablesInput
섹션 제목: “CominsRowBetweenTablesInput”source
섹션 제목: “source”source: CominsTableTransferEndpoint<TData, TGroup>;필수. 출발 endpoint입니다.
sourceRowId
섹션 제목: “sourceRowId”sourceRowId: CominsRowId;필수. 이동할 원본 행 ID입니다.
target
섹션 제목: “target”target: CominsTableTransferEndpoint<TData, TGroup>;필수. 도착 endpoint입니다. source와 같은 tableId는 거절합니다.
targetRowId
섹션 제목: “targetRowId”targetRowId?: CominsRowId;대상 행 앞에 삽입합니다. flat에서 생략하면 끝, grouped는 지정한 대상 그룹의 삽입 위치를 사용합니다.
targetGroupId
섹션 제목: “targetGroupId”targetGroupId?: CominsRowId;grouped 행 이동의 대상 그룹 ID입니다. flat에서는 지정하지 않습니다.
resolveConflict
섹션 제목: “resolveConflict”resolveConflict?: CominsTableTransferConflictResolver<TData, TGroup>;중복 ID 처리입니다. 미지정/undefined는 reject입니다.
CominsGroupBetweenTablesInput
섹션 제목: “CominsGroupBetweenTablesInput”source
섹션 제목: “source”source: CominsTableTransferEndpoint<TData, TGroup>;필수. 그룹 정보를 갖춘 출발 endpoint입니다.
sourceGroupId
섹션 제목: “sourceGroupId”sourceGroupId: CominsRowId;필수. 멤버와 함께 이동할 그룹 ID입니다. 빈 그룹도 이동합니다.
target
섹션 제목: “target”target: CominsTableTransferEndpoint<TData, TGroup>;필수. 그룹 정보를 갖춘 도착 endpoint입니다.
targetGroupId
섹션 제목: “targetGroupId”targetGroupId?: CominsRowId;before/after의 기준 그룹입니다. 생략 시 기본 append입니다.
position
섹션 제목: “position”position?: CominsTableTransferDropPosition;after/append/before. 기본값은 targetGroupId가 없으면 append, 있으면 before입니다.
resolveConflict
섹션 제목: “resolveConflict”resolveConflict?: CominsTableTransferConflictResolver<TData, TGroup>;중복 그룹 또는 멤버 ID 처리입니다. 미지정 시 reject입니다.
CominsTableTransferResult
섹션 제목: “CominsTableTransferResult”kind
섹션 제목: “kind”kind: "group" | "row";실행한 이동 종류 row/group입니다.
source
섹션 제목: “source”source: CominsTableTransferNextEndpoint<TData, TGroup>;출발 tableId와 다음 data, 선택적 groups를 포함합니다.
target
섹션 제목: “target”target: CominsTableTransferNextEndpoint<TData, TGroup>;도착 tableId와 다음 data, 선택적 groups를 포함합니다.
details
섹션 제목: “details”details: CominsTableTransferDetails<TData, TGroup>;이동 ID·대상 위치·처리한 충돌 목록입니다. kind로 세부 타입을 구분합니다.
CominsTableTransferRowEndpoint
섹션 제목: “CominsTableTransferRowEndpoint”export type CominsTableTransferRowEndpoint<TData> = { dataIndex: number; row: TData; rowId: CominsRowId; tableId: string;};충돌 payload의 행 위치입니다. dataIndex는 해당 원본 배열의 위치이며 row/rowId/tableId로 데이터를 식별합니다.
CominsTableTransferGroupEndpoint
섹션 제목: “CominsTableTransferGroupEndpoint”export type CominsTableTransferGroupEndpoint<TData, TGroup> = { group: TGroup; groupId: CominsRowId; groupIndex: number; rows: readonly CominsTableTransferRowEndpoint<TData>[]; tableId: string;};충돌 payload의 그룹 위치입니다. groupIndex는 groups 위치, rows는 멤버 endpoint 목록입니다.
CominsTableTransferResolvedConflict
섹션 제목: “CominsTableTransferResolvedConflict”export type CominsTableTransferResolvedConflict<TData, TGroup> = { conflict: CominsTableTransferConflict<TData, TGroup>; policy: CominsTableTransferConflictPolicy;};conflict와 선택된 reject/overwrite 정책의 쌍입니다.
CominsTableRowTransferDetails
섹션 제목: “CominsTableRowTransferDetails”export type CominsTableRowTransferDetails<TData, TGroup> = { conflicts: readonly CominsTableTransferResolvedConflict<TData, TGroup>[]; kind: "row"; sourceRowId: CominsRowId; targetGroupId?: CominsRowId; targetRowId?: CominsRowId;};row 이동 식별자와 해결된 conflicts입니다. 대상 행/그룹은 생략될 수 있습니다.
CominsTableGroupTransferDetails
섹션 제목: “CominsTableGroupTransferDetails”export type CominsTableGroupTransferDetails<TData, TGroup> = { conflicts: readonly CominsTableTransferResolvedConflict<TData, TGroup>[]; kind: "group"; position: CominsTableTransferDropPosition; sourceGroupId: CominsRowId; targetGroupId?: CominsRowId;};group 이동 식별자·position·conflicts입니다. targetGroupId는 append에서 생략될 수 있습니다.
transferCominsRowBetweenTables
섹션 제목: “transferCominsRowBetweenTables”export declare function transferCominsRowBetweenTables<TData, TGroup = never>(input: CominsRowBetweenTablesInput<TData, TGroup>): CominsTableTransferResult<TData, TGroup> | null;입력은 위 CominsRowBetweenTablesInput입니다. 성공 시 양쪽 다음 모델, 거절 시 null을 반환합니다.
transferCominsGroupBetweenTables
섹션 제목: “transferCominsGroupBetweenTables”export declare function transferCominsGroupBetweenTables<TData, TGroup>(input: CominsGroupBetweenTablesInput<TData, TGroup>): CominsTableTransferResult<TData, TGroup> | null;입력은 위 CominsGroupBetweenTablesInput입니다. 그룹과 모든 멤버를 함께 이동하며 거절 시 null입니다.