@docsvision/webclient
Version:
Type definitions for DocsVision WebClient scripts and extensions.
178 lines (176 loc) • 9.65 kB
TypeScript
import { ISortableItem } from "@docsvision/webclient/Helpers/Sortable/Data/ClientModels/ISortableItem";
import React from "react";
/** @internal Свойства для {@link Sortable} */
export interface ISortableProps {
/** дочерние элементы {@link SortableItem}, которые необходимо перемещать */
items: ISortableItem<any>[];
/** Вызывается при изменении порядка дочерних элементов */
onReorder: (newOrder: string[], sortedItems: ISortableItem<any>[]) => void;
/** Порядок следования элементов в виде упорядоченного массива их идентификаторов (идентификаторы элементов, отсортированные в нужном порядке) */
order: string[];
/** Ось сортировки {@link http://api.jqueryui.com/sortable/#option-axis} */
axis?: 'x' | 'y';
/** Указывает, какой блок выступает границами сортировки {@link http://api.jqueryui.com/sortable/#option-containment} */
containment?: HTMLElement | JQuery | 'parent' | 'document' | 'window' | string;
/** Стиль курсора во время изменения порядка элементов {@link http://api.jqueryui.com/sortable/#option-cursor} */
cursor?: string;
/** Отключение сортировки {@link http://api.jqueryui.com/sortable/#option-disabled} */
disabled?: boolean;
/** Должен ли хелпер иметь размер {@link http://api.jqueryui.com/sortable/#option-forceHelperSize} */
forceHelperSize?: boolean;
/** Должен ли плейсхолдер иметь размер {@link http://api.jqueryui.com/sortable/#option-forcePlaceholderSize} */
forcePlaceholderSize?: boolean;
/**
* Указывает селектор внутри дочернего элемента, за который можно будет его таскать (по умолчанию таскается весь дочерний элемент)
* {@link http://api.jqueryui.com/sortable/#option-handle}
*/
handle?: string;
/** Прозрачность перетаскиваемого элемента {@link http://api.jqueryui.com/sortable/#option-opacity} */
opacity?: number;
/** Если true, то страница скроллится, когда перетаскиваемый элемент на её краю {@link http://api.jqueryui.com/sortable/#option-scroll} */
scroll?: boolean;
/**
* Как далеко должна быть мышка от края (в пикселях), чтобы при перетаскивании страница скролилась бы (см. scroll)
* {@link http://api.jqueryui.com/sortable/#option-scrollSensitivity}
*/
scrollSensitivity?: number;
/** Скорость скролла окна при перетаскивании (см. scroll) {@link http://api.jqueryui.com/sortable/#option-scrollSpeed} */
scrollSpeed?: number;
/**
* Указывает режим, который регулирует, передвинулся ли перетаскиваемый элемент за другой элемент или нет
* {@link http://api.jqueryui.com/sortable/#option-tolerance}
*/
tolerance?: 'intersect' | 'pointer';
/** ZIndex перетаскиваемого элемента {@link http://api.jqueryui.com/sortable/#option-zIndex} */
zIndex?: number;
/** Остановить сортировку, если перетаскиваемый элемент вне родителя */
draggableInParent?: boolean;
/**
* HTML тэг, который будет отрендерен в качестве родительского узла.
*
* Включает режим без рендеринга служебных тегов. Требует от вызывающей стороны соблюдения следующих условий:
* - rootComponent должен использовать forwardRef
* - Метод
*/
rootComponent?: React.ReactNode;
}
/**
* @review
* @internal Помогает с сортировкой дочерних элементов, путём их перетаскивания.
*
* Пример использования:
*
* interface IMyItem {
* id: string;
* value: string;
* }
*
* ...
*
* constructor() {
* this.state.myItems = [
* {id: '1', value: 'Первый элемент'},
* {id: '2', value: 'Второй элемент'}
* ];
* this.state.myOrder = undefined;
* }
*
* render() {
* return <Sortable order={this.state.myOrder}
* onReorder={(newOrder: string[], sortedItems: ISortableItem<IMyValue>[]) => {
* this.state.myOrder = newOrder;
* this.forceUpdate();
* }} items={this.state.myItems.map(item => ({
* id: item.id,
* data: item,
* render: (data) => <div>{data.value}</div>
* }))} />
* }
*
*/
export declare class Sortable extends React.Component<ISortableProps, undefined> {
/** Контейнер для элементов. */
el: HTMLElement;
/** Была ли отменена сортировка. */
protected wasCancelled: boolean;
/** Идентификатор элемента для JQuery-sortable */
static readonly ITEM_ID = "data-sortable-id";
/** Значение по умолчанию для свойства {@link ISortableProps.axis} */
static readonly DEFAULT_AXIS = "y";
/** Значение по умолчанию для свойства {@link ISortableProps.containment} */
static readonly DEFAULT_CONTAINMENT = "parent";
/** Значение по умолчанию для свойства {@link ISortableProps.cursor} */
static readonly DEFAULT_CURSOR = "auto";
/** Значение по умолчанию для свойства {@link ISortableProps.forceHelperSize} */
static readonly DEFAULT_FORCE_HELPER_SIZE = false;
/** Значение по умолчанию для свойства {@link ISortableProps.forcePlaceholderSize} */
static readonly DEFAULT_FORCE_PLACEHOLDER_SIZE = false;
/** Значение по умолчанию для свойства {@link ISortableProps.handle} */
static readonly DEFAULT_HANDLE = false;
/** Значение по умолчанию для свойства {@link ISortableProps.opacity} */
static readonly DEFAULT_OPACITY = 1;
/** Значение по умолчанию для свойства {@link ISortableProps.scroll} */
static readonly DEFAULT_SCROLL = true;
/** Значение по умолчанию для свойства {@link ISortableProps.scrollSensitivity} */
static readonly DEFAULT_SCROLL_SENSITIVITY = 20;
/** Значение по умолчанию для свойства {@link ISortableProps.scrollSpeed} */
static readonly DEFAULT_SCROLL_SPEED = 20;
/** Значение по умолчанию для свойства {@link ISortableProps.tolerance} */
static readonly DEFAULT_TOLERANCE = "pointer";
/** Значение по умолчанию для свойства {@link ISortableProps.zIndex} */
static readonly DEFAULT_ZINDEX = 1000;
/** @internal */
componentDidMount(): void;
/** @internal */
UNSAFE_componentWillReceiveProps(nextProps: ISortableProps): void;
/** @internal */
componentWillUnmount(): void;
/** @internal */
UNSAFE_componentWillUpdate(nextProps: ISortableProps): void;
/** @internal */
componentDidUpdate(): void;
private cancelSortable;
/**
* Эквивалентны ли списки элементов SortableItem
* @param items1 Первый список
* @param items2 Второй список
* @returns Равны или нет
*/
protected isItemsEqual(items1: ISortableItem<any>[], items2: ISortableItem<any>[]): boolean;
/**
* Заставляет пересчитать размер this.props.containment
*/
protected updateContainmentSize(): void;
/**
* Получить опции для плагина
* @param props Свойства компонента
*/
protected getSortablePluginOptions(props: ISortableProps): {
axis: "x" | "y";
containment: string | HTMLElement | JQuery<HTMLElement>;
cursor: string;
disabled: boolean;
forceHelperSize: boolean;
forcePlaceholderSize: boolean;
handle: string | boolean;
opacity: number;
scroll: boolean;
scrollSensitivity: number;
scrollSpeed: number;
tolerance: "intersect" | "pointer";
zIndex: number;
};
/**
* Сортирует элементы по порядку
* @param items Элементы
* @param order Идентификаторы элементов, отсортированные в нужном порядке
*/
protected sortItems(items: ISortableItem<any>[], order?: string[]): ISortableItem<any>[];
protected renderRow: (item: ISortableItem<any>) => JSX.Element;
/**
* Возвращает отсортированных потомков
*/
protected getChildren(): React.ReactNode[];
/** @internal */
render(): JSX.Element;
}