Featuring Design System
ChangelogData Grid

0.1.4

여러 셀을 한 번에 편집할 때 일부 셀의 저장 표시가 내려오지 않고 실행 취소가 멈추던 문제를 고칩니다.

여러 셀을 한 번에 편집하면 일부 셀이 저장 중에서 멈추던 문제

비동기 onCellEdit(Promise 반환)를 쓰는 그리드에서 두 개 이상의 셀을 한 번에 편집하면 — 붙여넣기, 채우기, Cmd/Ctrl+D·R, 범위 지우기 — 일부 셀의 저장 상태가 pending에서 내려오지 않았습니다.

서버 요청은 전부 성공하고 데이터도 정확히 반영되는데 화면의 저장 표시만 남았습니다. 그리고 그 셀은 다시 편집할 수 없고(진행 중인 셀은 편집 진입이 막힙니다), 실행 취소·다시 실행이 그리드 전체에서 멈췄습니다. 멈춘 셀이 하나라도 있으면 canUndo가 false로 유지되기 때문입니다.

몇 개가 걸리는지는 매번 달랐고 하나도 안 걸릴 때도 있었습니다. 경합이었습니다. 셀이 하나뿐인 인라인 편집에서는 발생하지 않았습니다.

원인은 편집 이력을 담는 내부 참조를 렌더 중에 되돌려 쓰고 있던 것입니다. 저장 완료 처리는 이 참조를 읽어 다음 상태를 계산하는데, React가 우선순위가 낮은 업데이트를 건너뛴 채 렌더하면 그 되쓰기가 최신 이력을 한 세대 뒤로 밀어냈습니다. 그 사이에 도착한 저장 완료는 뒤처진 이력을 기준으로 계산되어, 앞서 확정된 셀을 다시 진행 중으로 되살리거나 편집 묶음 자체를 찾지 못해 사라졌습니다.

이제 이력 참조가 유일한 기준이 되고 렌더가 그것을 되돌리지 않습니다. 어떤 순서로 저장이 완료되든 모든 셀이 확정되고, 편집이 실행 취소 이력에 남습니다.

0.1.0부터 이 버전 직전까지 모두 해당합니다. 동기 onCellEdit(Promise를 반환하지 않는 경우)만 쓰는 구성은 영향이 없습니다. 저장 완료가 즉시 처리되어 사이에 끼어들 지점이 없기 때문입니다.

함께 확인해 주세요

증상이 나타났던 그리드에서는 아래도 함께 관찰됐습니다. 이 버전에서 모두 해소됩니다.

  • 멈춘 셀은 더블클릭이나 Enter로도 편집에 들어가지 않습니다.
  • Cmd/Ctrl+Z와 Cmd/Ctrl+Shift+Z가 그리드 전체에서 동작하지 않습니다.
  • 정렬·필터·페이지 이동처럼 행 목록이 바뀌면 남아 있던 저장 표시가 한꺼번에 사라집니다. 이력이 무효화되면서 함께 정리되기 때문입니다.

공개 API는 바뀌지 않았습니다. 버전만 올리면 됩니다.