From 7d4d9917dd43652930886a4cb999baf5166f4653 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Thu, 21 May 2026 06:32:19 +0300 Subject: [PATCH] Select requested form in IDE designer --- .../src/components/editor/ide-workspace.tsx | 15 +++++++++++++-- frontend/sfera-web/src/lib/api.ts | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/frontend/sfera-web/src/components/editor/ide-workspace.tsx b/frontend/sfera-web/src/components/editor/ide-workspace.tsx index 8581af7..00e8f57 100644 --- a/frontend/sfera-web/src/components/editor/ide-workspace.tsx +++ b/frontend/sfera-web/src/components/editor/ide-workspace.tsx @@ -3041,12 +3041,23 @@ function FormDesignerPanel({ const [elementDrafts, setElementDrafts] = useState>({}); const [newElementName, setNewElementName] = useState(""); const [newElementKind, setNewElementKind] = useState("input"); + const selectedFormQualifiedName = data.editorSelectedForm; useEffect(() => { + if (selectedFormQualifiedName) { + const requestedForm = objectForms.find((item) => item.form.qualified_name === selectedFormQualifiedName); + if (requestedForm && requestedForm.form.lineage_id !== selectedFormId) { + setSelectedFormId(requestedForm.form.lineage_id); + return; + } + } if (objectForms.length > 0 && !objectForms.some((item) => item.form.lineage_id === selectedFormId)) { setSelectedFormId(objectForms[0].form.lineage_id); } - }, [objectForms, selectedFormId]); - const form = objectForms.find((item) => item.form.lineage_id === selectedFormId) ?? objectForms[0]; + }, [objectForms, selectedFormId, selectedFormQualifiedName]); + const form = + objectForms.find((item) => item.form.lineage_id === selectedFormId) ?? + objectForms.find((item) => item.form.qualified_name === selectedFormQualifiedName) ?? + objectForms[0]; const commands = form?.commands.slice(0, 6) ?? []; const formKey = form?.form.lineage_id ?? "draft"; const baseElements = useMemo(() => buildIdeFormElements(form), [form]); diff --git a/frontend/sfera-web/src/lib/api.ts b/frontend/sfera-web/src/lib/api.ts index d8b952c..1c4b7aa 100644 --- a/frontend/sfera-web/src/lib/api.ts +++ b/frontend/sfera-web/src/lib/api.ts @@ -817,6 +817,11 @@ export async function getBslCompletions( return getJson(apiUrl, `/projects/${projectId}/bsl/completions?${params.toString()}`); } +function ownerQualifiedNameForForm(formQualifiedName: string) { + const parts = formQualifiedName.split("."); + return parts.length > 1 ? parts.slice(0, -1).join(".") : formQualifiedName; +} + export async function getProjectWorkspaceData(projectId: string, apiUrl = resolveApiUrl(), selectedRoutine?: string | null, activeMode?: string | null) { const selectedRoutineName = selectedRoutine?.trim() ?? null; const workspaceMode = activeMode?.trim() || "overview"; @@ -851,7 +856,15 @@ export async function getProjectWorkspaceData(projectId: string, apiUrl = resolv ); selectedTreeNode = firstCommonModulePage?.children[0] ?? null; } - const selectedObjectName = selectedRoutineName ?? selectedTreeNode?.qualified_name ?? null; + const selectedFormQualifiedName = + selectedTreeNode?.kind === "FORM" + ? selectedTreeNode.qualified_name + : selectedRoutineName && selectedRoutineName.split(".").at(-1)?.toLocaleLowerCase("ru-RU").includes("форма") + ? selectedRoutineName + : null; + const selectedObjectName = selectedFormQualifiedName + ? ownerQualifiedNameForForm(selectedFormQualifiedName) + : selectedRoutineName ?? selectedTreeNode?.qualified_name ?? null; const selectedObjectModules = selectedObjectName ? getOptionalJson( apiUrl, @@ -957,7 +970,7 @@ export async function getProjectWorkspaceData(projectId: string, apiUrl = resolv apiUrl, metadataCatalog, metadataTree, - selectedMetadataNode: selectedMetadataSearch?.results[0] ?? null, + selectedMetadataNode: selectedTreeNode, selectedObjectSchema, selectedObjectUi, selectedObjectImpact, @@ -978,6 +991,7 @@ export async function getProjectWorkspaceData(projectId: string, apiUrl = resolv editorProposedText: authoringProposedText, editorSelectedObject, editorSelectedRoutine, + editorSelectedForm: selectedFormQualifiedName, editorModules: objectModules, editorModuleName: selectedObjectModule?.name ?? snapshotModule?.name ?? null, editorSourcePath: selectedObjectModule?.source_path ?? snapshotModule?.source_path ?? null