UNPKG

2.51 kBTypeScriptView Raw
1import * as React from 'react';
2import {StyletronComponent} from 'styletron-react';
3import {Override} from '../overrides';
4import {
5 arrayMove as arrayMoveT,
6 arrayRemove as arrayRemoveT,
7} from 'react-movable';
8
9// export {arrayMove, arrayRemove} from 'react-movable';
10
11export interface STATE_CHANGE_TYPE {
12 change: 'change';
13}
14
15export type StateReducer = (
16 stateChangeType: STATE_CHANGE_TYPE[keyof STATE_CHANGE_TYPE],
17 nextState: State,
18 currentState: State,
19) => State;
20
21export interface StatefulListProps {
22 initialState?: State;
23 stateReducer?: StateReducer;
24 removable?: boolean;
25 removableByMove?: boolean;
26 onChange?: (
27 params: {
28 newState: React.ReactNode[];
29 oldIndex: number;
30 newIndex: number;
31 },
32 ) => any;
33 overrides?: ListOverrides;
34}
35
36export const StatefulList: React.FC<StatefulListProps>;
37
38export interface State {
39 items: React.ReactNode[];
40}
41export type StatefulComponentContainerProps = StatefulListProps & {
42 initialState?: State;
43 children: React.ReactNode;
44};
45
46export class StatefulListContainer extends React.Component<
47 StatefulComponentContainerProps,
48 State
49> {
50 onChange({oldIndex, newIndex}: {oldIndex: number; newIndex: number}): void;
51 internalSetState(
52 type: STATE_CHANGE_TYPE[keyof STATE_CHANGE_TYPE],
53 changes: State,
54 ): void;
55}
56
57export interface SharedStylePropsArgT {
58 $isDragged: boolean;
59 $isSelected: boolean;
60 $isRemovable: boolean;
61 $isRemovableByMove: boolean;
62 $value: React.ReactNode;
63}
64
65export interface ListOverrides {
66 Root?: Override<SharedStylePropsArgT>;
67 List?: Override<SharedStylePropsArgT>;
68 Item?: Override<SharedStylePropsArgT>;
69 DragHandle?: Override<SharedStylePropsArgT>;
70 CloseHandle?: Override<SharedStylePropsArgT>;
71 Label?: Override<SharedStylePropsArgT>;
72}
73
74export interface ListProps {
75 removable?: boolean;
76 removableByMove?: boolean;
77 items?: React.ReactNode[];
78 onChange?: (args: {oldIndex: number; newIndex: number}) => any;
79 overrides?: ListOverrides;
80}
81
82export class List extends React.Component<ListProps> {}
83
84export const StyledRoot: StyletronComponent<any>;
85export const StyledList: StyletronComponent<any>;
86export const StyledItem: StyletronComponent<any>;
87export const StyledDragHandle: StyletronComponent<any>;
88export const StyledCloseHandle: StyletronComponent<any>;
89export const StyledLabel: StyletronComponent<any>;
90
91export const STATE_CHANGE_TYPE: STATE_CHANGE_TYPE;
92export const arrayMove: typeof arrayMoveT;
93export const arrayRemove: typeof arrayRemoveT;