mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-06 14:39:22 +00:00
Merge remote-tracking branch 'origin/issue/220-space-tab-reorder' into dev
This commit is contained in:
@@ -717,6 +717,85 @@ export const MUTANTS = [
|
||||
replace: ' .dev:not(.unavail):hover {',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'tab-reorder-not-persisted',
|
||||
guard: 'node demo/smoke_space_tab_reorder.mjs',
|
||||
because: 'перестановка вкладок, оставшаяся только в памяти, выглядит рабочей ровно до '
|
||||
+ 'перезагрузки страницы — смок обязан требовать запись на сервер',
|
||||
patches: [{
|
||||
file: 'src/houseplan-card.ts',
|
||||
find: ' cfg.spaces = applySpaceOrder(cfg.spaces || [], order);\n this._saveConfig();',
|
||||
replace: ' cfg.spaces = applySpaceOrder(cfg.spaces || [], order);',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'reorder-skips-materialization',
|
||||
guard: 'node demo/smoke_space_tab_reorder.mjs',
|
||||
because: 'без материализации привязки маркер без space и area уезжает вслед за порядком: '
|
||||
+ 'его пространство решает firstSpaceId, а тот после перестановки другой (#220 §8.3)',
|
||||
patches: [{
|
||||
file: 'src/houseplan-card.ts',
|
||||
find: ' const byId = new Map(pinned.map((entry) => [entry.id, entry.space]));',
|
||||
replace: ' const byId = new Map();',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'materialization-touches-bound-markers',
|
||||
guard: 'node --test --test-name-pattern="issue 220" test/space-order.test.mjs',
|
||||
because: 'материализация обязана трогать только маркеры, чьё пространство решает порядок; '
|
||||
+ 'запись space маркеру, закреплённому HA-областью, кладёт в конфиг поле, которое '
|
||||
+ 'сдвинет его в старое первое пространство в день смены области (ревью r1, H1)',
|
||||
patches: [{
|
||||
file: 'src/space-order.ts',
|
||||
find: ' if (area && areaToSpace[area]) continue;',
|
||||
replace: ' if (false) continue;',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'tab-drag-survives-release-outside',
|
||||
guard: 'node demo/smoke_space_tab_reorder.mjs',
|
||||
because: 'мышь, отпущенная мимо панели, обязана завершить жест: иначе перетаскивание '
|
||||
+ 'зависает с moved:true и съедает следующий клик по вкладке (ревью r1, M1)',
|
||||
patches: [{
|
||||
file: 'src/houseplan-card.ts',
|
||||
find: " window.addEventListener('pointerup', this._tabDragRelease);",
|
||||
replace: ' void 0;',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'tab-drag-outlives-the-card',
|
||||
guard: 'node demo/smoke_space_tab_reorder.mjs',
|
||||
because: 'слушатели жеста, пережившие disconnectedCallback, держат инстанс карточки '
|
||||
+ 'и дают невидимой карточке записать порядок по следующему pointerup на странице '
|
||||
+ '(ревью r2/r3, F1)',
|
||||
patches: [{
|
||||
file: 'src/houseplan-card.ts',
|
||||
find: ' this._endTabDrag();\n clearInterval(this._cycleTimer);',
|
||||
replace: ' clearInterval(this._cycleTimer);',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'tab-reorder-eats-click',
|
||||
guard: 'node --test --test-name-pattern="issue 220" test/space-order.test.mjs',
|
||||
because: 'нулевой порог превращает обычный клик по вкладке в перетаскивание, и '
|
||||
+ 'переключение пространств — основное действие панели — перестаёт работать',
|
||||
patches: [{
|
||||
file: 'src/space-order.ts',
|
||||
find: 'export const TAB_DRAG_THRESHOLD_PX = 4;',
|
||||
replace: 'export const TAB_DRAG_THRESHOLD_PX = 0;',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'tab-reorder-ignores-pointer-type',
|
||||
guard: 'node --test --test-name-pattern="issue 220" test/space-order.test.mjs',
|
||||
because: 'на тач-устройстве вкладки — это навигация View, где тап обязан оставаться тапом; '
|
||||
+ 'решение владельца «Touch editor: not exposed» держится именно этой проверкой',
|
||||
patches: [{
|
||||
file: 'src/space-order.ts',
|
||||
find: " if (ctx.pointerType !== 'mouse') return false;",
|
||||
replace: ' if (false) return false;',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'internal-path-ignores-query',
|
||||
guard: 'node scripts/backend-test-guard.mjs issue_225',
|
||||
|
||||
Reference in New Issue
Block a user