@@ -4,7 +4,6 @@ import Sortable from 'sortablejs';
4
4
5
5
const defaultOptions = {
6
6
ref : 'list' ,
7
- model : 'items' ,
8
7
onStart : 'handleStart' ,
9
8
onEnd : 'handleEnd' ,
10
9
onAdd : 'handleAdd' ,
@@ -20,14 +19,6 @@ let _activeWrapperComponent = null;
20
19
21
20
const refName = 'sortableComponent' ;
22
21
23
- const getModelItems = ( wrapperComponent ) => {
24
- const model = wrapperComponent . sortableOptions . model ;
25
- const sortableComponent = wrapperComponent . refs [ refName ] ;
26
- const { state = { } , props = { } } = sortableComponent ;
27
- const items = state [ model ] || props [ model ] || [ ] ;
28
- return items . slice ( ) ; // returns a shallow copy of the items array
29
- } ;
30
-
31
22
const extend = ( target , ...sources ) => {
32
23
if ( target === undefined || target === null ) {
33
24
throw new TypeError ( 'Cannot convert undefined or null to object' ) ;
@@ -48,12 +39,12 @@ const extend = (target, ...sources) => {
48
39
} ;
49
40
50
41
const SortableMixin = ( options = defaultOptions ) => ( Component ) => class extends React . Component {
51
-
52
42
state = {
53
43
sortableInstance : null
54
44
} ;
55
45
56
46
sortableOptions = extend ( { } , defaultOptions , options ) ;
47
+ populatedOptions = { } ;
57
48
58
49
componentDidMount ( ) {
59
50
const sortableComponent = this . refs [ refName ] ;
@@ -84,30 +75,21 @@ const SortableMixin = (options = defaultOptions) => (Component) => class extends
84
75
85
76
const oldIndex = evt . oldIndex ;
86
77
const newIndex = evt . newIndex ;
87
- let newState = { } ;
88
- let remoteState = { } ;
89
- let items = getModelItems ( this ) ;
78
+ let items = this . props . items ;
79
+ let remoteItems = [ ] ;
90
80
91
81
if ( name === 'onAdd' ) {
92
- let remoteItems = getModelItems ( _activeWrapperComponent ) ;
82
+ remoteItems = _activeWrapperComponent . props . items ;
93
83
let item = remoteItems . splice ( oldIndex , 1 ) [ 0 ] ;
94
84
items . splice ( newIndex , 0 , item ) ;
95
-
96
- remoteState [ _activeWrapperComponent . sortableOptions . model ] = remoteItems ;
97
85
} else {
98
86
items . splice ( newIndex , 0 , items . splice ( oldIndex , 1 ) [ 0 ] ) ;
99
87
}
100
88
101
- newState [ this . sortableOptions . model ] = items ;
102
-
103
- if ( copyOptions . stateHandler ) {
104
- sortableComponent [ copyOptions . stateHandler ] ( newState ) ;
105
- } else {
106
- sortableComponent . setState ( newState ) ;
107
- }
89
+ this . props . onChange ( items ) ;
108
90
109
91
if ( _activeWrapperComponent !== this ) {
110
- _activeWrapperComponent . refs [ refName ] . setState ( remoteState ) ;
92
+ _activeWrapperComponent . props . onChange ( remoteItems ) ;
111
93
}
112
94
}
113
95
@@ -119,22 +101,11 @@ const SortableMixin = (options = defaultOptions) => (Component) => class extends
119
101
this . populatedOptions = copyOptions
120
102
this . initSortable ( sortableComponent ) ;
121
103
}
122
- componentWillReceiveProps ( nextProps ) {
123
- const sortableComponent = this . refs [ refName ] ;
124
- const model = this . sortableOptions . model ;
125
- const items = nextProps [ model ] ;
126
-
127
- if ( items ) {
128
- let newState = { } ;
129
- newState [ model ] = items ;
130
- sortableComponent . setState ( newState ) ;
131
- }
132
- }
133
- componentDidUpdate ( prevProps ) {
104
+ componentDidUpdate ( prevProps , prevState ) {
134
105
const model = this . sortableOptions . model ;
135
106
const prevItems = prevProps [ model ] ;
136
107
const currItems = this . props [ model ] ;
137
- if ( prevItems !== currItems ) {
108
+ if ( prevItems !== currItems ) {
138
109
this . initSortable ( this . refs [ refName ] ) ;
139
110
}
140
111
}
@@ -145,12 +116,12 @@ const SortableMixin = (options = defaultOptions) => (Component) => class extends
145
116
this . destroySortable ( ) ;
146
117
const domNode = ReactDOM . findDOMNode ( sortableComponent . refs [ this . sortableOptions . ref ] || sortableComponent ) ;
147
118
const sortableInstance = Sortable . create ( domNode , this . populatedOptions ) ;
148
- this . setState ( { sortableInstance} ) ;
119
+ this . setState ( { sortableInstance } ) ;
149
120
}
150
121
destroySortable ( ) {
151
122
if ( this . state . sortableInstance ) {
152
123
this . state . sortableInstance . destroy ( ) ;
153
- this . setState ( { sortableInstance : null } ) ;
124
+ this . setState ( { sortableInstance : null } ) ;
154
125
}
155
126
}
156
127
0 commit comments