pcp-tgu-ops-ui: «Создать план» берёт план в фокусе как базу-предысторию
Диалог получает initialBasePlanId — выбранный (в фокусе) план; селект «Базовое состояние» предзаполняется им, если он годится в базу (тот же КА, не PLANNED/DRAFT), иначе остаётся «без истории». Оператор может сменить базу вручную.
This commit is contained in:
@@ -16,3 +16,6 @@ TODO:
|
|||||||
- Деактивировать отмененный план, чтобы он не портил статистику
|
- Деактивировать отмененный план, чтобы он не портил статистику
|
||||||
- Если план заложен, то все отмененные планы до него (время начала которых меньше времени начала этого) не должны влиять на цветовую индикацию плана на вкладке Планы
|
- Если план заложен, то все отмененные планы до него (время начала которых меньше времени начала этого) не должны влиять на цветовую индикацию плана на вкладке Планы
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ type CreateChainPlanDialogProps = {
|
|||||||
spacecraftId: string;
|
spacecraftId: string;
|
||||||
/** Планы для выбора базы-предыстории (берём persisted этого КА, кроме черновиков/проекции). */
|
/** Планы для выбора базы-предыстории (берём persisted этого КА, кроме черновиков/проекции). */
|
||||||
plans: TguPlanUi[];
|
plans: TguPlanUi[];
|
||||||
|
/** Выбранный (в фокусе) план — предзаполняет базу-предысторию, если он годится в базу. */
|
||||||
|
initialBasePlanId?: string;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
/** Вызвать после создания черновика — чтобы он сразу появился на таймлайне (режим «Черновики»). */
|
/** Вызвать после создания черновика — чтобы он сразу появился на таймлайне (режим «Черновики»). */
|
||||||
onCreated?: () => 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<ZrvOption[]>([]);
|
const [zrvOptions, setZrvOptions] = useState<ZrvOption[]>([]);
|
||||||
const [zrvLoading, setZrvLoading] = useState(true);
|
const [zrvLoading, setZrvLoading] = useState(true);
|
||||||
const [zrvError, setZrvError] = useState<string>();
|
const [zrvError, setZrvError] = useState<string>();
|
||||||
|
|
||||||
const [basePlanId, setBasePlanId] = useState<string>(""); // "" — без истории
|
// "" — без истории; при открытии берём план в фокусе, если он годится в базу (этот КА, не
|
||||||
|
// проекция/черновик), иначе остаёмся без истории.
|
||||||
|
const [basePlanId, setBasePlanId] = useState<string>(() =>
|
||||||
|
initialBasePlanId &&
|
||||||
|
plans.some(
|
||||||
|
(plan) =>
|
||||||
|
plan.planId === initialBasePlanId &&
|
||||||
|
plan.spacecraftId === spacecraftId &&
|
||||||
|
plan.status !== "PLANNED" &&
|
||||||
|
plan.status !== "DRAFT"
|
||||||
|
)
|
||||||
|
? initialBasePlanId
|
||||||
|
: ""
|
||||||
|
);
|
||||||
const [startId, setStartId] = useState<string>("");
|
const [startId, setStartId] = useState<string>("");
|
||||||
const [endId, setEndId] = useState<string>("");
|
const [endId, setEndId] = useState<string>("");
|
||||||
|
|
||||||
|
|||||||
@@ -497,6 +497,7 @@ export function TguPlanningPage() {
|
|||||||
<CreateChainPlanDialog
|
<CreateChainPlanDialog
|
||||||
spacecraftId={selectedSpacecraftId}
|
spacecraftId={selectedSpacecraftId}
|
||||||
plans={plans}
|
plans={plans}
|
||||||
|
initialBasePlanId={selectedPlanId}
|
||||||
onClose={() => setCreateChainOpen(false)}
|
onClose={() => setCreateChainOpen(false)}
|
||||||
onCreated={() => {
|
onCreated={() => {
|
||||||
setShowDrafts(true);
|
setShowDrafts(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user