Tree
Многоуровневый раскрывающийся список в виде дерева с возможностью выбора (selection) и выделения (checkbox).
Обязательным параметром является только массив items. Формат следующий:
type TreeItem = {
/**
* Уникальный идентификатор элемента.
*/
key: React.Key;
/**
* Заголовок элемента.
*/
title?: React.ReactNode | ((data: TreeItem) => React.ReactNode);
/**
* Classname для текущего элемента.
*/
className?: string;
/**
* Стиль для текущего элемента.
*/
style?: React.CSSProperties;
/**
* Флаг выключения элемента.
* @default false
*/
disabled?: boolean;
/**
* Иконка для текущего элемента.
*/
icon?: React.ReactNode;
/**
* Дочерние items.
*/
children?: TreeItem[];
/**
* Контент справа.
*/
contentRight?: React.ReactNode;
};
Примеры
- Uncontrolled
- Controlled
- Virtual
Для включения виртуализации обязательными являются 2 свойства: height и itemHeight.
Также есть опциональный флаг для явного отключения/включения виртуализации: virtual.
Drag'n'Drop
Для включения режима Drag and Drop нужно включить свойство draggable. Также имеется ряд обработчиков, однако наиболее важным из них является onDrop.
Для более индивидуальной настройки логики работы механизма Drag'n'Drop данный обработчик настраивается на стороне клиента. Примеры ниже будут более наглядными:
- Default
- Allow drop
Данный пример базовый, покрывающий наиболее распространенные сценарии использования. Также присутствует возможность создавать из крайних элементов группы, вкладывая в них другие элементы.
Если нужно запретить создавать группы из крайних элементов, нужно воспользоваться свойством allowDrop.
Пример с autoExpandParent
Иногда может возникнуть необходимость раскрыть дерево до нужного ключа пробросив только его в поле expanded. В стандартном сценарии ничего не произойдет, т.к. вышестоящие уровни будут закрыты.
Поэтому данное поведение можно реализовать с помощью свойства autoExpandParent.