diff --git a/docs/задачи для pcp-tgu-ops-ui.txt b/docs/задачи для pcp-tgu-ops-ui.txt index a87be64..f26a955 100644 --- a/docs/задачи для pcp-tgu-ops-ui.txt +++ b/docs/задачи для pcp-tgu-ops-ui.txt @@ -16,3 +16,6 @@ TODO: - Деактивировать отмененный план, чтобы он не портил статистику - Если план заложен, то все отмененные планы до него (время начала которых меньше времени начала этого) не должны влиять на цветовую индикацию плана на вкладке Планы + + + diff --git a/services/pcp-tgu-ops-ui/src/features/tgu-planning/CreateChainPlanDialog.tsx b/services/pcp-tgu-ops-ui/src/features/tgu-planning/CreateChainPlanDialog.tsx index 8a1e17e..19f88fc 100644 --- a/services/pcp-tgu-ops-ui/src/features/tgu-planning/CreateChainPlanDialog.tsx +++ b/services/pcp-tgu-ops-ui/src/features/tgu-planning/CreateChainPlanDialog.tsx @@ -13,6 +13,8 @@ type CreateChainPlanDialogProps = { spacecraftId: string; /** Планы для выбора базы-предыстории (берём persisted этого КА, кроме черновиков/проекции). */ plans: TguPlanUi[]; + /** Выбранный (в фокусе) план — предзаполняет базу-предысторию, если он годится в базу. */ + initialBasePlanId?: string; onClose: () => void; /** Вызвать после создания черновика — чтобы он сразу появился на таймлайне (режим «Черновики»). */ onCreated?: () => void; @@ -25,12 +27,32 @@ type CreateChainPlanDialogProps = { * цепочку без истории), набирает окно из двух реальных ЗРВ и создаёт черновик плана. После * создания сразу предлагается перейти к его редактированию. */ -export function CreateChainPlanDialog({ spacecraftId, plans, onClose, onCreated, onEdit }: CreateChainPlanDialogProps) { +export function CreateChainPlanDialog({ + spacecraftId, + plans, + initialBasePlanId, + onClose, + onCreated, + onEdit +}: CreateChainPlanDialogProps) { const [zrvOptions, setZrvOptions] = useState([]); const [zrvLoading, setZrvLoading] = useState(true); const [zrvError, setZrvError] = useState(); - const [basePlanId, setBasePlanId] = useState(""); // "" — без истории + // "" — без истории; при открытии берём план в фокусе, если он годится в базу (этот КА, не + // проекция/черновик), иначе остаёмся без истории. + const [basePlanId, setBasePlanId] = useState(() => + initialBasePlanId && + plans.some( + (plan) => + plan.planId === initialBasePlanId && + plan.spacecraftId === spacecraftId && + plan.status !== "PLANNED" && + plan.status !== "DRAFT" + ) + ? initialBasePlanId + : "" + ); const [startId, setStartId] = useState(""); const [endId, setEndId] = useState(""); diff --git a/services/pcp-tgu-ops-ui/src/features/tgu-planning/TguPlanningPage.tsx b/services/pcp-tgu-ops-ui/src/features/tgu-planning/TguPlanningPage.tsx index 915a622..aa69261 100644 --- a/services/pcp-tgu-ops-ui/src/features/tgu-planning/TguPlanningPage.tsx +++ b/services/pcp-tgu-ops-ui/src/features/tgu-planning/TguPlanningPage.tsx @@ -497,6 +497,7 @@ export function TguPlanningPage() { setCreateChainOpen(false)} onCreated={() => { setShowDrafts(true);