AURORA-1895: формула из localStorage не перезаписывает чужие значения #267
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/264-aurora-1895-formula-localstorage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
cell.row.id, а не отline_id).cell_updated(ни по Enter, ни по клику вне ячейки).calculateFormula(expr)совпадает с текущим значением ячейки (допуск1e-9); иначе формула помечается устаревшей (stale), удаляется из localStorage, и в ячейке показывается актуальное значение.formula_${tableId}_${cellId}(cellId строился от позиции строки в дереве) наformula_v2_${tableId}_${getRowId(row)_...}(отline_id/idстроки). При монтированииRealtimeTableвыполняется разовая очистка устаревших ключейformula_*без суффикса_v2.#ОШИБКА), на сервер она не отправляется: показывается toast, редактор остаётся открытым.web/src/components/RealtimeTable/utils/formulaUtils.js:resolveEditorState(savedFormula, value)иisSameCellValue(a, b), покрыты юнит-тестами.Это временная мера до AURORA-1896 (серверное хранение формул), которая полностью заменит localStorage.
Closes #264.
Test plan
web/src/components/RealtimeTable/utils/formulaUtils.test.jsнаписан до реализации, наблюдал RED (отсутствующие экспорты) перед GREEN.cd web && node --test src/components/RealtimeTable/utils/*.test.js— 9/9 новых тестов зелёные;rowUtils.test.js(5/5) иheaderYearUtils.test.js(4/4) из того же набора тоже зелёные.columnLayoutUtils.test.jsв этом прогоне падает сERR_MODULE_NOT_FOUND: @tanstack/table-core— в этом worktree не выполненnpm install(web/node_modulesотсутствует полностью). Не связано с этим изменением; воспроизводится и на чистом HEAD без моих правок.npx biome checkпо изменённым файлам точечно сверен с baseline (git show HEAD:<file>через biome на тот же путь): новых ошибок не добавлено.EditCell.jsxиformulaUtils.test.js— 0 ошибок/0 новых предупреждений.formulaUtils.js— та же 1 pre-existing ошибка (noGlobalIsFinite, непотронутая строка) и те же 2 предупреждения, что и на baseline.tableColumns.jsx/RealtimeTable.jsx— те же 4 pre-existing ошибки format/organizeImports, что и на baseline (весьweb/srcуже не проходитbiome checkна базовой ветке: 318 ошибок/87 предупреждений до этого PR).localStorageUtils.js— на 1 предупреждение больше (console.error в новойclearLegacyFormulaKeys, в стиле остальных функций файла).Rulings I made
calculateFormulaили писать новый — в кодовой базе он уже был вformulaUtils.js(поддержка+ - * / % ()), поэтомуresolveEditorStateпереиспользует его как есть, без изменений.displayValueпри подстановке формулы вEditCellдобился избежать расширения сигнатурыresolveEditorStateсверх трёх полей, заданных в тикете (currentValue,isFormulaMode,stale): отображаемое значение формулы пересчитывается локальным хелперомcomputeFormulaDisplayвнутриEditCell.jsx, а не добавлением четвёртого поля в возвращаемый объектresolveEditorState.formula_*(clearLegacyFormulaKeys) размещена вlocalStorageUtils.js(а не вformulaUtils.js) и запускается вuseEffect(() => {...}, [])при каждом монтированииRealtimeTable— тикет не указывал точный модуль/механизм "один раз"; после первой фактической очистки в браузере повторные вызовы находят 0 устаревших ключей, так что итоговый эффект соответствует требованию "один раз" без отдельного флага в localStorage.finishEditing), я не закрываю редактор ни по Enter, ни по клику вне ячейки — оба пути идут через общийhandleSave, который возвращаетfalseи не даётfinishEditingпродолжить. Тикет описывал это как пункт 5 без указания, должен ли путь закрытия по Enter вести себя иначе от клика вне ячейки — сделал их одинаковыми.по-моему там была ошибка, при которой другой пользователь должен видеть формулу, то есть формула должна на сервере храниться
Merge origin/test (
455393c)Ветка влита с test (merge, без rebase/force-push). Конфликты: EditCell.jsx, RealtimeTable.jsx, formulaUtils.test.js. Всё из test сохранено (1891, 1892, 1893/1894, 1890, 1899, 1840, 1944), намерение PR перенесено поверх.
Тесты (node --test web/src/**/*.test.js): baseline origin/test 153 всего, 152 pass, 1 fail; ветка 162 всего, 161 pass, 1 fail. Единственный fail в обоих прогонах: SMETA.test.js (известный, не связан). npx rsbuild build успешен. Живая проверка в браузере не выполнялась.
H-1
Замечание (PotapovaA): другой пользователь должен видеть формулу, т.е. формулы должны храниться на сервере. Принято. По решению владельца задачи (08.11) серверное хранение формул выносится в отдельную задачу и в этот PR не входит; здесион остаётся временная мера на localStorage. Статус: deferred.