Unwrap Operation

래퍼 노드를 제거하고 자식을 부모 레벨로 승격합니다.

개요

Unwrap operation은 래퍼 노드를 제거하고 자식을 부모 레벨로 승격합니다. 링크 서식 제거 또는 목록 항목을 단락으로 변환할 때 일반적으로 사용됩니다.

인터페이스

interface UnwrapOperation extends Operation {
  type: 'unwrap';
  path: Path; // 래퍼 노드 경로
  wrapperType?: string; // 풀 래퍼 타입 (검증용)
  preservedWrapper?: Node; // undo를 위해 래퍼 저장
}

사용법

// 링크 풀기
function unwrapLink(editor: Editor, linkPath: Path) {
  const linkNode = editor.getNodeAtPath(linkPath);
  
  const operation: UnwrapOperation = {
    type: 'unwrap',
    path: linkPath,
    wrapperType: 'link',
    preservedWrapper: linkNode
  };
  
  editor.applyOperation(operation);
}

// 목록 항목 풀기
function unwrapListItem(editor: Editor, itemPath: Path) {
  const itemNode = editor.getNodeAtPath(itemPath);
  
  const operation: UnwrapOperation = {
    type: 'unwrap',
    path: itemPath,
    wrapperType: 'listItem',
    preservedWrapper: itemNode
  };
  
  editor.applyOperation(operation);
}

리버스 Operation

Unwrap의 리버스 Operation은 wrap입니다:

function getInverse(operation: UnwrapOperation): WrapOperation {
  return {
    type: 'wrap',
    path: operation.path,
    wrapper: operation.preservedWrapper!
  };
}