@@ -4,7 +4,6 @@ import Sortable from 'sortablejs';
44
55const defaultOptions = {
66 ref : 'list' ,
7- model : 'items' ,
87 onStart : 'handleStart' ,
98 onEnd : 'handleEnd' ,
109 onAdd : 'handleAdd' ,
@@ -20,14 +19,6 @@ let _activeWrapperComponent = null;
2019
2120const refName = 'sortableComponent' ;
2221
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-
3122const extend = ( target , ...sources ) => {
3223 if ( target === undefined || target === null ) {
3324 throw new TypeError ( 'Cannot convert undefined or null to object' ) ;
@@ -48,12 +39,12 @@ const extend = (target, ...sources) => {
4839} ;
4940
5041const SortableMixin = ( options = defaultOptions ) => ( Component ) => class extends React . Component {
51-
5242 state = {
5343 sortableInstance : null
5444 } ;
5545
5646 sortableOptions = extend ( { } , defaultOptions , options ) ;
47+ populatedOptions = { } ;
5748
5849 componentDidMount ( ) {
5950 const sortableComponent = this . refs [ refName ] ;
@@ -84,30 +75,21 @@ const SortableMixin = (options = defaultOptions) => (Component) => class extends
8475
8576 const oldIndex = evt . oldIndex ;
8677 const newIndex = evt . newIndex ;
87- let newState = { } ;
88- let remoteState = { } ;
89- let items = getModelItems ( this ) ;
78+ let items = this . props . items ;
79+ let remoteItems = [ ] ;
9080
9181 if ( name === 'onAdd' ) {
92- let remoteItems = getModelItems ( _activeWrapperComponent ) ;
82+ remoteItems = _activeWrapperComponent . props . items ;
9383 let item = remoteItems . splice ( oldIndex , 1 ) [ 0 ] ;
9484 items . splice ( newIndex , 0 , item ) ;
95-
96- remoteState [ _activeWrapperComponent . sortableOptions . model ] = remoteItems ;
9785 } else {
9886 items . splice ( newIndex , 0 , items . splice ( oldIndex , 1 ) [ 0 ] ) ;
9987 }
10088
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 ) ;
10890
10991 if ( _activeWrapperComponent !== this ) {
110- _activeWrapperComponent . refs [ refName ] . setState ( remoteState ) ;
92+ _activeWrapperComponent . props . onChange ( remoteItems ) ;
11193 }
11294 }
11395
@@ -119,22 +101,11 @@ const SortableMixin = (options = defaultOptions) => (Component) => class extends
119101 this . populatedOptions = copyOptions
120102 this . initSortable ( sortableComponent ) ;
121103 }
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 ) {
134105 const model = this . sortableOptions . model ;
135106 const prevItems = prevProps [ model ] ;
136107 const currItems = this . props [ model ] ;
137- if ( prevItems !== currItems ) {
108+ if ( prevItems !== currItems ) {
138109 this . initSortable ( this . refs [ refName ] ) ;
139110 }
140111 }
@@ -145,12 +116,12 @@ const SortableMixin = (options = defaultOptions) => (Component) => class extends
145116 this . destroySortable ( ) ;
146117 const domNode = ReactDOM . findDOMNode ( sortableComponent . refs [ this . sortableOptions . ref ] || sortableComponent ) ;
147118 const sortableInstance = Sortable . create ( domNode , this . populatedOptions ) ;
148- this . setState ( { sortableInstance} ) ;
119+ this . setState ( { sortableInstance } ) ;
149120 }
150121 destroySortable ( ) {
151122 if ( this . state . sortableInstance ) {
152123 this . state . sortableInstance . destroy ( ) ;
153- this . setState ( { sortableInstance : null } ) ;
124+ this . setState ( { sortableInstance : null } ) ;
154125 }
155126 }
156127
0 commit comments