UNPKG

2.69 kBTypeScriptView Raw
1import * as React from 'react';
2
3export type Axis = 'x' | 'y' | 'xy';
4
5export type Offset = number | string;
6
7export interface SortStart {
8 node: Element;
9 index: number;
10 collection: Offset;
11}
12
13export interface SortOver {
14 index: number;
15 oldIndex: number;
16 newIndex: number;
17 collection: Offset;
18}
19
20export interface SortEnd {
21 oldIndex: number;
22 newIndex: number;
23 collection: Offset;
24}
25
26export type SortEvent = React.MouseEvent<any> | React.TouchEvent<any>;
27
28export type SortEventWithTag = SortEvent & {
29 target: {
30 tagName: string;
31 };
32};
33
34export type SortStartHandler = (sort: SortStart, event: SortEvent) => void;
35
36export type SortMoveHandler = (event: SortEvent) => void;
37
38export type SortEndHandler = (sort: SortEnd, event: SortEvent) => void;
39
40export type SortOverHandler = (sort: SortOver, event: SortEvent) => void;
41
42export type ContainerGetter = (
43 element: React.ReactElement<any>,
44) => HTMLElement | Promise<HTMLElement>;
45
46export type HelperContainerGetter = () => HTMLElement;
47
48export interface Dimensions {
49 width: number;
50 height: number;
51}
52
53export interface SortableContainerProps {
54 axis?: Axis;
55 lockAxis?: Axis;
56 helperClass?: string;
57 transitionDuration?: number;
58 pressDelay?: number;
59 pressThreshold?: number;
60 distance?: number;
61 shouldCancelStart?: (event: SortEvent | SortEventWithTag) => boolean;
62 updateBeforeSortStart?: SortStartHandler;
63 onSortStart?: SortStartHandler;
64 onSortMove?: SortMoveHandler;
65 onSortEnd?: SortEndHandler;
66 onSortOver?: SortOverHandler;
67 useDragHandle?: boolean;
68 useWindowAsScrollContainer?: boolean;
69 hideSortableGhost?: boolean;
70 lockToContainerEdges?: boolean;
71 lockOffset?: Offset | [Offset, Offset];
72 getContainer?: ContainerGetter;
73 getHelperDimensions?: (sort: SortStart) => Dimensions;
74 helperContainer?: HTMLElement | HelperContainerGetter;
75}
76
77export interface SortableElementProps {
78 index: number;
79 collection?: Offset;
80 disabled?: boolean;
81}
82
83export interface Config {
84 withRef: boolean;
85}
86
87export type WrappedComponentFactory<P> = (props: P) => JSX.Element;
88
89export type WrappedComponent<P> =
90 | React.ComponentClass<P>
91 | WrappedComponentFactory<P>;
92
93export function SortableContainer<P>(
94 wrappedComponent: WrappedComponent<P>,
95 config?: Config,
96): React.ComponentClass<P & SortableContainerProps>;
97
98export function SortableElement<P>(
99 wrappedComponent: WrappedComponent<P>,
100 config?: Config,
101): React.ComponentClass<P & SortableElementProps>;
102
103export function SortableHandle<P>(
104 wrappedComponent: WrappedComponent<P>,
105 config?: Config,
106): React.ComponentClass<P>;
107
108export function arrayMove<T>(
109 collection: T[],
110 previousIndex: number,
111 newIndex: number,
112): T[];