Files
stroy-bot-monorepo/src/webparts/stroyBot/pages/objects/ObjectsTree.tsx
T
Тимур Городецкий d2852df976 refactor: remove drag and drop from the objects tree
Decided during manual testing: the legacy drop-inside zone had zero
height, so drops only worked before/after a node and moves happened by
accident. Sections are re-parented via Edit, as before.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 10:07:06 +05:00

56 lines
1.9 KiB
TypeScript

import * as React from 'react';
import { Button } from '@tnsu/ui-kit';
import { EmptyState } from '../../shared/components/EmptyState';
import { IMenuAnchor } from '../_tree/ContextMenu';
import { countNodes } from '../_tree/treeRules';
import { ObjectNode, ObjectTree } from './objectsTypes';
import { IObjectTreeView } from './useObjectTreeView';
import { ObjectTreeNode } from './ObjectTreeNode';
import { OBJECTS_TEXTS } from './texts';
import styles from './ObjectsPage.module.scss';
interface Props {
tree: ObjectTree;
canEdit: boolean;
view: IObjectTreeView;
onOpenMenu: (node: ObjectNode, anchor: IMenuAnchor) => void;
onAddRoot: () => void;
}
/** Панель «N объектов / Развернуть / Свернуть» и дерево объектов (или «Объекты не найдены»). */
export const ObjectsTree: React.FC<Props> = ({ tree, canEdit, view, onOpenMenu, onAddRoot }) => (
<>
<div className={styles.toolbar}>
<span className={styles.totalCount}>{OBJECTS_TEXTS.toolbar.total(countNodes(tree.roots))}</span>
<div className={styles.toolbarActions}>
<Button variant="secondary" size="sm" onClick={view.expandAll}>
{OBJECTS_TEXTS.toolbar.expandAll}
</Button>
<Button variant="secondary" size="sm" onClick={view.collapseAll}>
{OBJECTS_TEXTS.toolbar.collapseAll}
</Button>
</div>
</div>
{tree.roots.length === 0 && (
<EmptyState
icon="folder"
title={OBJECTS_TEXTS.empty}
action={
canEdit && (
<Button variant="primary" onClick={onAddRoot}>
{OBJECTS_TEXTS.emptyAdd}
</Button>
)
}
/>
)}
<div className={styles.tree}>
{tree.roots.map((node) => (
<ObjectTreeNode key={node.id} node={node} canEdit={canEdit} view={view} onOpenMenu={onOpenMenu} />
))}
</div>
</>
);