Skip to content

Commit 018b24a

Browse files
committed
Refactor code
1 parent a4e21a3 commit 018b24a

File tree

1 file changed

+10
-39
lines changed

1 file changed

+10
-39
lines changed

src/index.jsx

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import Sortable from 'sortablejs';
44

55
const defaultOptions = {
66
ref: 'list',
7-
model: 'items',
87
onStart: 'handleStart',
98
onEnd: 'handleEnd',
109
onAdd: 'handleAdd',
@@ -20,14 +19,6 @@ let _activeWrapperComponent = null;
2019

2120
const 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-
3122
const 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

5041
const 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

Comments
 (0)