@ -110,7 +110,9 @@ test('пока ширину тянут, ключ прежний; после от
// Допущение @tanstack/table-core 8.20.5, на котором стоит явный с б р о с
// (openspec/changes/aurora-1839-cell-memo/design.md, «Контекст», п. 3; D1).
// Первые два теста держат допущение: ячейки пересоздаются при смене массива columns и не пересоздаются при смене ширин.
// Тесты ниже фиксируют характеристику table-core 8.20.5 (упадут при обновлении библиотеки):
// новый массив columns даёт новые ячейки; смена columnSizing ячейки не пересоздаёт (поэтому ключ нужен для ширины
// закреплённой колонки); смена columnPinning пересоздаёт ячейки закреплённых сторон, центральные те же.
const createFixture = ( ) =>
createTable ( {
data : [ { a : 1 , b : 2 , c : 3 } ] ,
@ -131,13 +133,6 @@ const cellsById = (table) =>
. map ( ( cell ) => [ cell . id , cell ] ) ,
) ;
test ( 'table-core: при прежних columns и data объекты ячеек те же' , ( ) => {
const table = createFixture ( ) ;
const before = cellsById ( table ) ;
updateState ( table , { columnSizing : { a : 80 } } ) ;
for ( const [ id , cell ] of cellsById ( table ) ) assert . equal ( cell , before . get ( id ) ) ;
} ) ;
test ( 'table-core: новый массив columns с теми же определениями даёт новые ячейки' , ( ) => {
const table = createFixture ( ) ;
const before = cellsById ( table ) ;
@ -147,12 +142,11 @@ test('table-core: новый массив columns с теми же опреде
for ( const [ id , cell ] of after ) assert . notEqual ( cell , before . get ( id ) ) ;
} ) ;
// Допущение дизайна «ячейки пересоздаются только при смене columns/data» неверно для columnPinning:
// в table-core 8.20.5 getLeftVisibleCells/getRightVisibleCells (features/ColumnPinning.js) возвращают
// поверхностные копии `{...cell, position}`, поэтому при смене закрепления объект ячейки закрепляемой колонки
// новый при прежнем массиве columns. Ячейки остальных колонок (центр) остаются теми же объектами.
// Ключ с б р о с а по закреплению остаётся как защита: он нужен для ячеек, которые table-core не пересоздаёт,
// и сработает как страховка, если поведение сменится. Тест фиксирует факт и упадёт при обновлении table-core.
// В table-core 8.20.5 getLeftVisibleCells/getRightVisibleCells (features/ColumnPinning.js) возвращают
// поверхностные копии `{...cell, position}`, поэтому при смене закрепления пересоздаются ячейки закреплённых
// колонок при прежнем массиве columns; центральные остаются теми же объектами.
// Ключ с б р о с а по закреплению нужен из-за ширины закреплённой колонки (смена columnSizing ячейки не пересоздаёт)
// и как страховка на случай смены поведения библиотеки.
test ( 'table-core: смена columnPinning при прежнем массиве columns пересоздаёт ячейку закреплённой колонки, остальные те же' , ( ) => {
const table = createFixture ( ) ;
const before = cellsById ( table ) ;
@ -163,8 +157,6 @@ test('table-core: смена columnPinning при прежнем массиве
for ( const id of [ '0_a' , '0_b' ] ) assert . equal ( after . get ( id ) , before . get ( id ) ) ;
} ) ;
// Характеристика, а не ожидание дизайна: фиксирует поведение table-core 8.20.5 при смене columnSizing,
// чтобы обновление библиотеки показало смену поведения.
test ( 'table-core: смена columnSizing при прежнем массиве columns оставляет те же ячейки' , ( ) => {
const table = createFixture ( ) ;
const before = cellsById ( table ) ;
@ -173,3 +165,24 @@ test('table-core: смена columnSizing при прежнем массиве c
assert . equal ( after . size , before . size ) ;
for ( const [ id , cell ] of after ) assert . equal ( cell , before . get ( id ) ) ;
} ) ;
test ( 'table-core: закрепление второй колонки слева пересоздаёт все закреплённые ячейки, центральная та же' , ( ) => {
const table = createFixture ( ) ;
updateState ( table , { columnPinning : { left : [ 'a' ] , right : [ ] } } ) ;
const before = cellsById ( table ) ;
updateState ( table , { columnPinning : { left : [ 'a' , 'c' ] , right : [ ] } } ) ;
const after = cellsById ( table ) ;
assert . notEqual ( after . get ( '0_a' ) , before . get ( '0_a' ) ) ;
assert . notEqual ( after . get ( '0_c' ) , before . get ( '0_c' ) ) ;
assert . equal ( after . get ( '0_b' ) , before . get ( '0_b' ) ) ;
} ) ;
test ( 'table-core: скрытие закреплённой колонки пересоздаёт ячейки оставшейся закреплённой стороны' , ( ) => {
const table = createFixture ( ) ;
updateState ( table , { columnPinning : { left : [ 'a' , 'c' ] , right : [ ] } } ) ;
const before = cellsById ( table ) ;
updateState ( table , { columnVisibility : { a : false } } ) ;
const after = cellsById ( table ) ;
assert . equal ( after . has ( '0_a' ) , false ) ;
assert . notEqual ( after . get ( '0_c' ) , before . get ( '0_c' ) ) ;
} ) ;