Fix form selection and common form rendering
CI / python (push) Has been cancelled
CI / rust (push) Has been cancelled

This commit is contained in:
2026-05-21 17:03:32 +03:00
parent a5e0c8bf0f
commit 9f1f1a8ee1
3 changed files with 82 additions and 10 deletions
@@ -3055,13 +3055,16 @@ function FormDesignerPanel({
}
}, [objectForms, selectedFormId, selectedFormQualifiedName]);
const form =
objectForms.find((item) => item.form.lineage_id === selectedFormId) ??
objectForms.find((item) => item.form.qualified_name === selectedFormQualifiedName) ??
objectForms.find((item) => item.form.lineage_id === selectedFormId) ??
objectForms[0];
const commands = form?.commands.slice(0, 6) ?? [];
const formKey = form?.form.lineage_id ?? "draft";
const baseElements = useMemo(() => buildIdeFormElements(form), [form]);
const elements = elementDrafts[formKey] ?? baseElements;
const flatElements = useMemo(() => flattenIdeFormElements(elements), [elements]);
const sidebarElements = flatElements.slice(0, 160);
const propertyElements = flatElements.slice(0, 48);
const formTitle = titleByForm[formKey] ?? form?.form.name ?? "ФормаДокумента";
const formObjectCaption = language === "ru" ? `${formTitle} (форма 1С 8.5)` : `${formTitle} (1C 8.5 form)`;
const layout = layoutByForm[formKey] ?? "auto";
@@ -3131,10 +3134,10 @@ function FormDesignerPanel({
</div>
<div className="mt-5 border-t border-border pt-3 text-xs font-semibold uppercase text-muted-foreground">{t.formElements}</div>
<div className="mt-3 space-y-1">
{flattenIdeFormElements(elements).length === 0 ? (
{flatElements.length === 0 ? (
<div className="text-sm text-muted-foreground">{t.none}</div>
) : (
flattenIdeFormElements(elements).map((element) => (
sidebarElements.map((element) => (
<div className="flex items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-background" key={element.id}>
<OneCTreeIcon kind={element.controlKind === "table" ? "tabular" : "attribute"} />
<div className="min-w-0">
@@ -3144,6 +3147,11 @@ function FormDesignerPanel({
</div>
))
)}
{flatElements.length > sidebarElements.length ? (
<div className="px-2 py-1 text-xs text-muted-foreground">
+{flatElements.length - sidebarElements.length} {language === "ru" ? "элементов в макете" : "layout items"}
</div>
) : null}
</div>
<div className="mt-5 border-t border-border pt-3 text-xs font-semibold uppercase text-muted-foreground">{t.commands}</div>
<div className="mt-3 space-y-1">
@@ -3240,7 +3248,7 @@ function FormDesignerPanel({
</label>
</div>
<div className="grid grid-cols-2 gap-2 border-b border-border p-3">
<IdeFormMetric label="elements" value={flattenIdeFormElements(elements).length} />
<IdeFormMetric label="elements" value={flatElements.length} />
<IdeFormMetric label="commands" value={commands.length} />
</div>
<div className="border-b border-border p-3">
@@ -3261,7 +3269,7 @@ function FormDesignerPanel({
</button>
</div>
<div className="divide-y divide-border">
{flattenIdeFormElements(elements).map((element) => (
{propertyElements.map((element) => (
<div className="grid gap-2 p-3" key={`props-${element.id}`}>
<div className="truncate text-xs font-semibold">{element.name}</div>
<input className="h-8 border border-border bg-background px-2 text-sm text-foreground" value={element.caption} onChange={(event) => updateElement(element.id, { caption: event.target.value })} />
@@ -3283,6 +3291,13 @@ function FormDesignerPanel({
<input className="h-8 border border-border bg-background px-2 text-sm text-foreground" value={element.binding} onChange={(event) => updateElement(element.id, { binding: event.target.value })} />
</div>
))}
{flatElements.length > propertyElements.length ? (
<div className="p-3 text-xs text-muted-foreground">
{language === "ru"
? `Показаны первые ${propertyElements.length} свойств из ${flatElements.length}. Остальные элементы доступны в макете формы.`
: `Showing first ${propertyElements.length} properties out of ${flatElements.length}. Other items are available in the form layout.`}
</div>
) : null}
</div>
</aside>
</div>
+3
View File
@@ -819,6 +819,9 @@ export async function getBslCompletions(
function ownerQualifiedNameForForm(formQualifiedName: string) {
const parts = formQualifiedName.split(".");
if (parts[0] === "ОбщаяФорма") {
return formQualifiedName;
}
return parts.length > 1 ? parts.slice(0, -1).join(".") : formQualifiedName;
}