pcp-tgu-ops-ui: fork-forward в редакторе — выбор будущей ЗРВ для перевыдачи невозвратного плана
Селектор «Целевая ЗРВ» в EditorToolbar: текущий слот (replace, по умолчанию)
либо будущая ЗРВ из проекции pcp-tgu-service (fetchSpacecraftPlans →
GET /api/plans/{spacecraftId}, фильтр futureZrvWindows: PLANNED строго в
будущем, кроме базы — та же проекция, что валидирует бэк). Выбор окна
переводит обзор редактора и заставляет ensureDraft слать mode=fork-forward
(naive-UTC окно + kpp); селектор блокируется после создания DRAFT.
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import type { TguPlanUi, TguPlatformUi } from "../../model/timelineTypes";
|
||||
import { formatDuration } from "./editorPresentation";
|
||||
import type { ZrvWindow } from "./editorForkForward";
|
||||
import { formatUtcDateTime } from "../../utils/utcTime";
|
||||
|
||||
type EditorToolbarProps = {
|
||||
selectedSpacecraftId?: string;
|
||||
@@ -13,6 +15,10 @@ type EditorToolbarProps = {
|
||||
dirty: boolean;
|
||||
applying: boolean;
|
||||
canceling: boolean;
|
||||
futureWindows: ZrvWindow[];
|
||||
targetWindowId?: string;
|
||||
targetLocked: boolean;
|
||||
onSelectTargetWindow: (planId: string | undefined) => void;
|
||||
windowLabel: string;
|
||||
rightMode: "none" | "inspect" | "shoot" | "downlink" | "mapInfo";
|
||||
onSetRightMode: (mode: "shoot" | "downlink") => void;
|
||||
@@ -37,6 +43,10 @@ export function EditorToolbar({
|
||||
dirty,
|
||||
applying,
|
||||
canceling,
|
||||
futureWindows,
|
||||
targetWindowId,
|
||||
targetLocked,
|
||||
onSelectTargetWindow,
|
||||
windowLabel,
|
||||
rightMode,
|
||||
onSetRightMode,
|
||||
@@ -83,6 +93,25 @@ export function EditorToolbar({
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{(futureWindows.length > 0 || targetWindowId) && (
|
||||
<label className="tgu-editor-target-zrv" title="Целевая ЗРВ для перевыдачи невозвратного плана">
|
||||
<span className="tgu-editor-target-zrv__label">Целевая ЗРВ</span>
|
||||
<select
|
||||
className="tgu-select"
|
||||
value={targetWindowId ?? ""}
|
||||
disabled={targetLocked}
|
||||
onChange={(event) => onSelectTargetWindow(event.target.value || undefined)}
|
||||
>
|
||||
<option value="">Текущий слот (правка)</option>
|
||||
{futureWindows.map((window) => (
|
||||
<option key={window.planId} value={window.planId}>
|
||||
{formatUtcDateTime(window.startMs)} · {window.kppId}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</label>
|
||||
)}
|
||||
|
||||
<div className="tgu-editor-toolbar__spacer" />
|
||||
|
||||
<div className="tgu-editor-window-control" aria-label="Окно редактора">
|
||||
|
||||
Reference in New Issue
Block a user