(low) CpLayerControlPanel.tsx/CpLayerControlPanel: «Показать все» рассинхронизируется при наличии пустых категорий #1459

Closed
opened 2026-06-15 05:55:58 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: logic · Файл: frontend/src/components/site-finder/CpLayerControlPanel.tsx:51, 145-148

CpLayerControlPanel.tsx:51, 145-148. allVisible = visibleCategories.size === CP_ALL_CATEGORIES.length. Per-category чекбоксы рендерятся только для категорий с structs.length>0 (стр. 146-148: if (structs.length === 0) return null), то есть пустые категории пользователю недоступны для включения. toggleAll в SiteMap.tsx:281-289 переключает между пустым набором и new Set(CP_ALL_CATEGORIES) (все категории, включая пустые). Сценарий бага: пользователь выключил «Показать все» (visibleCategories пуст), затем вручную включил все ВИДИМЫЕ категории — visibleCategories.size = число непустых категорий < CP_ALL_CATEGORIES.length → чекбокс «Показать все» остаётся неотмеченным, хотя все доступные слои включены. Индикатор рассинхронизирован с реальностью. Несмертельно: начальное состояние = new Set(CP_ALL_CATEGORIES) (все, allVisible=true), баг проявляется только после ручного цикла выкл/вкл при наличии пустых категорий в квартале. Low, краевой UX. Фикс: сравнивать allVisible с числом НЕпустых (рисуемых) категорий, либо при toggleAll класть в Set только непустые категории.

Почему баг: Если в квартале есть категории без структур, пользователь, выключив «Показать все» и затем вручную включив все ВИДИМЫЕ категории, не сможет довести visibleCategories.size до CP_ALL_CATEGORIES.length (пустые категории не в наборе) → чекбокс «Показать все» останется неотмеченным, хотя все доступные слои включены. Состояние индикатора рассинхронизировано с реальностью. Несмертельно (начальное состояние = все категории), но это краевой UX-баг логики.

Как чинить: Сравнивать только с непустыми категориями: allVisible = nonEmptyCategories.every((c) => visibleCategories.has(c)), где nonEmptyCategories = CP_ALL_CATEGORIES.filter((c) => (grouped.get(c)?.length ?? 0) > 0).


deep-audit «армия ботов 2» · verify+harden, confidence 0.83 · unit U94

**Severity:** low · **Категория:** logic · **Файл:** `frontend/src/components/site-finder/CpLayerControlPanel.tsx:51, 145-148` CpLayerControlPanel.tsx:51, 145-148. allVisible = `visibleCategories.size === CP_ALL_CATEGORIES.length`. Per-category чекбоксы рендерятся только для категорий с structs.length>0 (стр. 146-148: `if (structs.length === 0) return null`), то есть пустые категории пользователю недоступны для включения. toggleAll в SiteMap.tsx:281-289 переключает между пустым набором и `new Set(CP_ALL_CATEGORIES)` (все категории, включая пустые). Сценарий бага: пользователь выключил «Показать все» (visibleCategories пуст), затем вручную включил все ВИДИМЫЕ категории — visibleCategories.size = число непустых категорий < CP_ALL_CATEGORIES.length → чекбокс «Показать все» остаётся неотмеченным, хотя все доступные слои включены. Индикатор рассинхронизирован с реальностью. Несмертельно: начальное состояние = new Set(CP_ALL_CATEGORIES) (все, allVisible=true), баг проявляется только после ручного цикла выкл/вкл при наличии пустых категорий в квартале. Low, краевой UX. Фикс: сравнивать allVisible с числом НЕпустых (рисуемых) категорий, либо при toggleAll класть в Set только непустые категории. **Почему баг:** Если в квартале есть категории без структур, пользователь, выключив «Показать все» и затем вручную включив все ВИДИМЫЕ категории, не сможет довести visibleCategories.size до CP_ALL_CATEGORIES.length (пустые категории не в наборе) → чекбокс «Показать все» останется неотмеченным, хотя все доступные слои включены. Состояние индикатора рассинхронизировано с реальностью. Несмертельно (начальное состояние = все категории), но это краевой UX-баг логики. **Как чинить:** Сравнивать только с непустыми категориями: `allVisible = nonEmptyCategories.every((c) => visibleCategories.has(c))`, где nonEmptyCategories = CP_ALL_CATEGORIES.filter((c) => (grouped.get(c)?.length ?? 0) > 0). --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.83 · unit U94</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:55:58 +00:00
bot-backend added the
scope/frontend
label 2026-06-15 11:02:08 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1459
No description provided.