feat(tgu-ui): запрет выбора конфликтных слотов + прохождение без подсветки
- конфликтные слоты нельзя добавить в выбор под бронь (клик по строке, Shift-диапазон, выбор полосы на карте, «выбрать все») — жёсткая блокировка; снятие выбора не блокируется (конфликт считается только для невыбранных) - слоты одной полосы между собой не конфликтуют (groupOf) — иначе нельзя было бы набрать полосу поштучным кликом - чекбокс «Конфликты» теперь и гасит, и блокирует выбор; выкл. — выбирать любые - переход на прохождение (◀/▶) больше не подсвечивает никакой слот: активная подсветка строки — только по явному клику; добавлена прокрутка к началу прохода - повторный Shift+клик по тому же концу снимает выделение (таблица и карта)
This commit is contained in:
@@ -12,6 +12,9 @@ type CoveragePanelProps = {
|
||||
/** Тумблер следа покрытия на карте (D4 — локальный, вкл. по умолчанию). */
|
||||
coverageOn: boolean;
|
||||
onToggleCoverage: (on: boolean) => void;
|
||||
/** Тумблер подсветки конфликтов выбора (тусклый слой) — рядом со следом на карте. */
|
||||
showConflicts: boolean;
|
||||
onToggleConflicts: (on: boolean) => void;
|
||||
};
|
||||
|
||||
// Панель покрытия над списком слотов (D-D1): «забронировано NN% · с выбором MM%» + двухсегментный
|
||||
@@ -23,6 +26,8 @@ export function CoveragePanel({
|
||||
available,
|
||||
coverageOn,
|
||||
onToggleCoverage,
|
||||
showConflicts,
|
||||
onToggleConflicts,
|
||||
}: CoveragePanelProps) {
|
||||
const bookedPct = booked?.percent ?? 0;
|
||||
const withPct = withSelection?.percent ?? bookedPct;
|
||||
@@ -34,14 +39,27 @@ export function CoveragePanel({
|
||||
<div className="tgu-coverage">
|
||||
<div className="tgu-coverage__head">
|
||||
<span className="tgu-coverage__title">Покрытие заявки</span>
|
||||
<label className="tgu-coverage__toggle" title="Показывать след покрытия на карте">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={coverageOn}
|
||||
onChange={(event) => onToggleCoverage(event.target.checked)}
|
||||
/>
|
||||
След на карте
|
||||
</label>
|
||||
<div className="tgu-coverage__toggles">
|
||||
<label className="tgu-coverage__toggle" title="Показывать след покрытия на карте">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={coverageOn}
|
||||
onChange={(event) => onToggleCoverage(event.target.checked)}
|
||||
/>
|
||||
След на карте
|
||||
</label>
|
||||
<label
|
||||
className="tgu-coverage__toggle"
|
||||
title="Гасить и блокировать выбор слотов, недоступных из-за текущего выбора (тот же КА, не хватает времени на манёвр). Выкл. — выбирать можно любые."
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={showConflicts}
|
||||
onChange={(event) => onToggleConflicts(event.target.checked)}
|
||||
/>
|
||||
Конфликты
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{!available ? (
|
||||
|
||||
Reference in New Issue
Block a user