Fix onboard K1 enrollment continuity and share named acquisition preparation
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
.k1-acquisition-fields {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--nodedc-space-3)}
|
||||
.k1-acquisition-fields > div {display:grid;min-width:0;gap:var(--nodedc-space-2)}
|
||||
@media (max-width:960px) {.k1-acquisition-fields {grid-template-columns:1fr}}
|
||||
@@ -0,0 +1,55 @@
|
||||
import {Select,TextField} from '@nodedc/ui-react';
|
||||
import {mountTypeOptions,gnssModeOptions,type MountType,type GnssMode} from '../configuration';
|
||||
import {normalizeProjectName,validateProjectName} from '../projectName';
|
||||
import './K1AcquisitionFields.css';
|
||||
|
||||
export function K1AcquisitionFields({mountType,setMountType,gnssMode,setGnssMode,projectName,setProjectName,
|
||||
projectNameTouched,setProjectNameTouched,disabled,projectDisabled=disabled}:{
|
||||
mountType:MountType;setMountType:(value:MountType)=>void;gnssMode:GnssMode;setGnssMode:(value:GnssMode)=>void;
|
||||
projectName:string;setProjectName:(value:string|((current:string)=>string))=>void;
|
||||
projectNameTouched:boolean;setProjectNameTouched:(value:boolean)=>void;disabled:boolean;projectDisabled?:boolean;
|
||||
}) {
|
||||
const projectNameValidation=validateProjectName(projectName);
|
||||
return <>
|
||||
<div className="scan-configuration-grid k1-acquisition-fields">
|
||||
<div className="configuration-field">
|
||||
<span className="nodedc-field__description">Тип установки / носитель</span>
|
||||
<Select
|
||||
label="Тип установки / носитель"
|
||||
value={mountType}
|
||||
options={mountTypeOptions}
|
||||
onChange={setMountType}
|
||||
disabled={disabled}
|
||||
variant="split"
|
||||
/>
|
||||
</div>
|
||||
<div className="configuration-field">
|
||||
<span className="nodedc-field__description">Режим GNSS</span>
|
||||
<Select
|
||||
label="Режим GNSS"
|
||||
value={gnssMode}
|
||||
options={gnssModeOptions}
|
||||
onChange={setGnssMode}
|
||||
disabled={disabled}
|
||||
variant="split"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<TextField
|
||||
label="Название проекта"
|
||||
value={projectName}
|
||||
onChange={(event) => {
|
||||
setProjectName(event.target.value);
|
||||
setProjectNameTouched(true);
|
||||
}}
|
||||
onBlur={() => setProjectName((value) => normalizeProjectName(value))}
|
||||
disabled={projectDisabled}
|
||||
autoComplete="off"
|
||||
aria-invalid={projectNameTouched && projectNameValidation.error ? true : undefined}
|
||||
description={projectNameTouched && projectNameValidation.error
|
||||
? projectNameValidation.error
|
||||
: undefined}
|
||||
placeholder="Например, TEST001"
|
||||
/>
|
||||
</>;
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
import {K1AcquisitionFields} from './K1AcquisitionFields';
|
||||
import { useEffect, useMemo, useRef, useState } from "react";
|
||||
import {
|
||||
ActivityIndicator,
|
||||
@@ -5,7 +6,6 @@ import {
|
||||
Checker,
|
||||
GlassSurface,
|
||||
Icon,
|
||||
Select,
|
||||
SegmentedControl,
|
||||
StatusBadge,
|
||||
TextField,
|
||||
@@ -21,8 +21,6 @@ import {
|
||||
import {
|
||||
SUPPORTED_GNSS_MODE,
|
||||
SUPPORTED_MOUNT_TYPE,
|
||||
gnssModeOptions,
|
||||
mountTypeOptions,
|
||||
type GnssMode,
|
||||
type MountType,
|
||||
} from "../configuration";
|
||||
@@ -41,7 +39,6 @@ import {
|
||||
} from "../lifecycle";
|
||||
import { connectionPolicyOperatorGuidance } from "../presentation";
|
||||
import {
|
||||
normalizeProjectName,
|
||||
projectNameAfterConnectionModeSelection,
|
||||
shouldHydratePreparedProject,
|
||||
validateProjectName,
|
||||
@@ -443,46 +440,9 @@ export function K1AcquisitionPipeline({
|
||||
</div>
|
||||
) : effectiveSessionIntent === "live" ? (
|
||||
<div className="session-form">
|
||||
<div className="scan-configuration-grid">
|
||||
<div className="configuration-field">
|
||||
<span className="nodedc-field__description">Тип установки / носитель</span>
|
||||
<Select
|
||||
label="Тип установки / носитель"
|
||||
value={mountType}
|
||||
options={mountTypeOptions}
|
||||
onChange={setMountType}
|
||||
disabled={isBusy || sessionLocked}
|
||||
variant="split"
|
||||
/>
|
||||
</div>
|
||||
<div className="configuration-field">
|
||||
<span className="nodedc-field__description">Режим GNSS</span>
|
||||
<Select
|
||||
label="Режим GNSS"
|
||||
value={gnssMode}
|
||||
options={gnssModeOptions}
|
||||
onChange={setGnssMode}
|
||||
disabled={isBusy || sessionLocked}
|
||||
variant="split"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<TextField
|
||||
label="Название проекта"
|
||||
value={projectName}
|
||||
onChange={(event) => {
|
||||
setProjectName(event.target.value);
|
||||
setProjectNameTouched(true);
|
||||
}}
|
||||
onBlur={() => setProjectName((value) => normalizeProjectName(value))}
|
||||
disabled={isBusy || preparedAcquisition !== null || sourceRuntimeBusy}
|
||||
autoComplete="off"
|
||||
aria-invalid={projectNameTouched && projectNameValidation.error ? true : undefined}
|
||||
description={projectNameTouched && projectNameValidation.error
|
||||
? projectNameValidation.error
|
||||
: undefined}
|
||||
placeholder="Например, TEST001"
|
||||
/>
|
||||
<K1AcquisitionFields mountType={mountType} setMountType={setMountType} gnssMode={gnssMode} setGnssMode={setGnssMode}
|
||||
projectName={projectName} setProjectName={setProjectName} projectNameTouched={projectNameTouched} setProjectNameTouched={setProjectNameTouched}
|
||||
disabled={isBusy || sessionLocked} projectDisabled={isBusy || preparedAcquisition !== null || sourceRuntimeBusy}/>
|
||||
<Button
|
||||
variant="primary"
|
||||
aria-busy={pendingAction === "live"}
|
||||
|
||||
Reference in New Issue
Block a user