react-ui-basics 0.0.179 → 0.0.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ui-basics",
3
- "version": "0.0.179",
3
+ "version": "0.0.181",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
package/router/Route.js CHANGED
@@ -6,7 +6,7 @@ import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers";
6
6
  import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers";
7
7
  import React from 'react';
8
8
  import PropTypes from 'prop-types';
9
- import { setOf, allPropsExcept, isDifferent, addEventListener, removeEventListener, WINDOW, orNoop } from '../Tools.js';
9
+ import { setOf, allPropsExcept, isDifferent, addEventListener, WINDOW, removeEventListener, orNoop } from '../Tools.js';
10
10
  import { stateGSs, componentDidUpdate, render, componentDidMount, componentWillUnmount, propsGetter, setState, PureComponent } from '../ReactConstants.js';
11
11
 
12
12
  var historyEvents = ['popstate', 'pushState', 'replaceState'];
@@ -379,7 +379,7 @@ class AutocompleteSelect extends PureComponent {
379
379
  onSelect = (selectedId) => {
380
380
  const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = __props(this);
381
381
  const {filterValue, selected: currentSelection} = __state(this);
382
- const {labels = {}} = __props(this);
382
+ const {labels = {}, onFilterInputChange} = __props(this);
383
383
 
384
384
  if (selectedId == null && (!!filterValue || !required) && allowCustom && (!this.input || !this.input.check()))
385
385
  selectedId = filterValue.trim();
@@ -429,6 +429,9 @@ class AutocompleteSelect extends PureComponent {
429
429
  errored,
430
430
  });
431
431
 
432
+ if (filterValueWithCustom !== filterValue)
433
+ orNoop(onFilterInputChange)(filterValueWithCustom)
434
+
432
435
  if (isActive && this.input)
433
436
  this.input.getInput().focus()
434
437
 
@@ -0,0 +1,315 @@
1
+ import React, {Component} from 'react';
2
+ import ReactCreateElement from './ReactCreateElement';
3
+ import './DNDContainer.css'
4
+ import {
5
+ classNames,
6
+ NOOP,
7
+ orNoop,
8
+ preventDefault,
9
+ DOCUMENT,
10
+ WINDOW,
11
+ addEventListener,
12
+ removeEventListener,
13
+ setTimeout,
14
+ clearTimeout,
15
+ requestAnimationFrame,
16
+ stopPropagation,
17
+ createRef,
18
+ UNDEFINED
19
+ } from "./Tools";
20
+ import {propsGetter, render, componentDidMount} from "./ReactConstants";
21
+
22
+ const clearSelection = () => {
23
+ const getSelection = WINDOW.getSelection;
24
+ if (getSelection) {
25
+ if (getSelection().empty) { // Chrome
26
+ getSelection().empty();
27
+ } else if (getSelection().removeAllRanges) { // Firefox
28
+ getSelection().removeAllRanges();
29
+ }
30
+ } else if (DOCUMENT.selection) { // IE?
31
+ DOCUMENT.selection.empty();
32
+ }
33
+ };
34
+
35
+ export interface DNDContainerProps {
36
+ provideDraggableInitializer: (f) => void,
37
+ provideDroppableInitializer: (f) => void,
38
+ className?: string,
39
+ children?
40
+ }
41
+
42
+ interface DNDContainerState {
43
+ draggable: any
44
+ }
45
+
46
+ class DNDContainer extends Component<DNDContainerProps, DNDContainerState> {
47
+
48
+ constructor(properties) {
49
+ super(properties);
50
+ const that = this;
51
+ that.state = {
52
+ draggable: null,
53
+ };
54
+
55
+ const props = propsGetter(that);
56
+ const containerRef = createRef()
57
+
58
+ let draggable;
59
+ let data;
60
+ let scrollOffsetX;
61
+ let scrollOffsetY;
62
+
63
+ const droppables = [];
64
+ let positionListener: (e: MouseEvent) => void;
65
+ positionListener = NOOP
66
+
67
+ that[render] = () => {
68
+ const {children, className} = props();
69
+ const {draggable} = that.state;
70
+ return <div className={classNames('DNDContainer', className)} ref={containerRef}>
71
+ {children}
72
+ <div className="overlay">{draggable}</div>
73
+ </div>;
74
+ };
75
+
76
+
77
+ const onDrag = (e) => {
78
+ if (!draggable)
79
+ return;
80
+
81
+ positionListener(e);
82
+ // that[droppables].forEach(it => it.isHover(e, draggable))
83
+ };
84
+ const onDragStart = (e) => {
85
+ e.stopPropagation && stopPropagation(e)
86
+ droppables.forEach(it => it.onDragStart(e, draggable))
87
+ };
88
+ const onDragEnd = () => {
89
+ const d = draggable;
90
+ if (!d) return
91
+
92
+ if (d.element) {
93
+ let style = d.element.style;
94
+ style.position = '';
95
+ style.pointerEvents = '';
96
+ style.width = ``;
97
+ style.height = ``;
98
+ style.opacity = '';
99
+ }
100
+ d.setState({dragged: false});
101
+
102
+ that.setState({draggable: null});
103
+
104
+ droppables.forEach(it => {
105
+ it.onDragEnd();
106
+ orNoop(it.props.onDragEnd)(d)
107
+ });
108
+ data = null;
109
+ draggable = null;
110
+ };
111
+
112
+ const draggableInitializer = (item) => {
113
+ const handle = item.props.handle;
114
+ const draggableElement = (handle && item.element.childNodes[0]) || item.element;
115
+ draggableElement.draggable = true;
116
+
117
+ const dragStartListener = (e) => {
118
+ clearSelection();
119
+ const container = containerRef();
120
+ data = item.props.data;
121
+ draggable = item;
122
+ scrollOffsetX = e.pageX - e.clientX;
123
+ scrollOffsetY = e.pageY - e.clientY;
124
+ const dataTransfer = e.dataTransfer;
125
+ const itemOffset = item.element.getBoundingClientRect();
126
+
127
+ item.width = itemOffset.width;
128
+ item.height = itemOffset.height;
129
+
130
+ let clone = orNoop(item.props.copy)((it) => {
131
+ let style = it.element.style;
132
+
133
+ const offsetLeft = totalOffsetLeft(container) + (e.clientX - itemOffset.left);
134
+ const offsetTop = totalOffsetTop(container) + (e.clientY - itemOffset.top);
135
+ positionListener = (orNoop(it.createPositionListener)(e, style, itemOffset, container) || ((e) => {
136
+ if (e.pageX === 0)
137
+ return;
138
+
139
+ style.transform = 'translate(' + (e.pageX - offsetLeft) + 'px, ' + (e.pageY - offsetTop) + 'px)';
140
+ })) as (e: MouseEvent) => void;
141
+
142
+
143
+ requestAnimationFrame(() => {
144
+ if (dataTransfer && !dataTransfer.setDragImage) {
145
+ style.opacity = '0'; // hide dragged element in ie and edge
146
+ }
147
+ if (it.initDraggedStyles)
148
+ it.initDraggedStyles(style, itemOffset);
149
+ else {
150
+ style.position = 'absolute';
151
+ style.pointerEvents = 'none';
152
+ style.opacity = '1';
153
+ style.top = '0px';
154
+ style.left = '0px';
155
+ style.width = itemOffset.width + 'px';
156
+ style.height = itemOffset.height + 'px';
157
+ }
158
+
159
+ onDrag(e);
160
+ it.setState({dragged: true});
161
+ });
162
+ return it;
163
+ }, 'copy', item);
164
+
165
+ dataTransfer && dataTransfer.setData && dataTransfer.setData('text', ''); // required by firefox
166
+ dataTransfer && (dataTransfer.dropEffect = "move");
167
+ if (clone) {
168
+ if (dataTransfer && dataTransfer.setDragImage) {
169
+ clone !== item && that.setState({draggable: clone});
170
+ const img = document.createElement('img');
171
+ img.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
172
+ dataTransfer.setDragImage(img, 0, 0);
173
+ }
174
+ }
175
+ onDragStart(e);
176
+ setTimeout(() => item.setState({placeholder: true}), 1)
177
+ };
178
+ addListener(draggableElement, item, 'dragend', (e) => {
179
+ if (item.state.placeholder)
180
+ item.setState({placeholder: false}, item.forceUpdate);
181
+ onDragEnd()
182
+ });
183
+ addListener(draggableElement, item, 'dragstart', dragStartListener);
184
+
185
+ let longTouch;
186
+ let dragStarted = false;
187
+ let dragged = false;
188
+ addListener(draggableElement, item, 'touchstart', e => {
189
+ if (e.touches.length > 1)
190
+ return;
191
+
192
+ stopPropagation(e)
193
+ preventDefault(e)
194
+ dragged = dragStarted = false;
195
+ const touch = e.targetTouches[0];
196
+ longTouch = setTimeout(() => longTouch && (dragStarted = true) && (longTouch = dragStartListener(touch)), !handle ? 500 : 0)
197
+ });
198
+
199
+ addListener(draggableElement, item, 'touchmove', e => {
200
+ if (longTouch) {
201
+ longTouch = clearTimeout(longTouch);
202
+ return;
203
+ }
204
+ if (!dragStarted)
205
+ return;
206
+
207
+ if (e.touches.length > 1)
208
+ return;
209
+
210
+ preventDefault(e);
211
+ dragged = true;
212
+ const touch = e.targetTouches[0];
213
+ positionListener(touch);
214
+ droppables.forEach(it => it.isHover(touch, item))
215
+ });
216
+
217
+ addListener(draggableElement, item, 'touchend', e => {
218
+ longTouch = clearTimeout(longTouch);
219
+ if (!dragged)
220
+ return;
221
+
222
+ item.setState({placeholder: false}, item.forceUpdate);
223
+ if (e.touches.length > 0)
224
+ return;
225
+
226
+ droppables.forEach(it => it.dropIfHover());
227
+ onDragEnd();
228
+ });
229
+ }
230
+
231
+ const droppableInitializer = (item) => {
232
+ droppables.push(item);
233
+
234
+ addEventListener(item.element, 'drop', (e) => {
235
+ if (item.state.allow) {
236
+ preventDefault(e);
237
+ stopPropagation(e)
238
+ data && orNoop(item.props.onDrop)(data);
239
+ }
240
+ }, false);
241
+ addEventListener(item.element, 'dragenter', (e) => {
242
+ if (item.state.allow) {
243
+ preventDefault(e);
244
+ item.isHover(e, draggable, true)
245
+ }
246
+ });
247
+ addEventListener(item.element, 'dragleave', (e) => {
248
+ if (item.state.allow) {
249
+ preventDefault(e);
250
+ item.isHover(e, draggable, false)
251
+ }
252
+ });
253
+
254
+ item.onDragStart = (e, draggable) => {
255
+ item.bounds = item.element.getBoundingClientRect();
256
+ let allow = (orNoop(item.props.onDragStart)(e, data));
257
+ if (allow === UNDEFINED)
258
+ allow = true
259
+ item.setState({allow});
260
+ };
261
+ item.isHover = (e, draggable, hover) => {
262
+ const bounds = item.bounds;
263
+ if (!bounds)
264
+ return;
265
+
266
+ if (hover === UNDEFINED) {
267
+ let y = e.pageY - scrollOffsetY;
268
+ let x = e.pageX - scrollOffsetX;
269
+ hover = bounds.left <= x && bounds.right >= x && bounds.top <= y && bounds.bottom >= y;
270
+ }
271
+
272
+ hover && orNoop(item.props.onHover)(e, draggable);
273
+
274
+ if (hover)
275
+ !item.state.hover && item.setState({hover}, item.forceUpdate);
276
+ else
277
+ item.state.hover && item.setState({hover}, item.forceUpdate);
278
+ };
279
+ item.dropIfHover = () => {
280
+ data && item.state.hover && orNoop(item.props.onDrop)(data);
281
+ };
282
+ item.onDragEnd = () => {
283
+ orNoop(orNoop(draggable)['onDragEnd'])();
284
+ item.setState({allow: false, hover: false});
285
+ };
286
+ item.onUnmount = () => droppables.splice(droppables.indexOf(item), 1);
287
+ }
288
+
289
+ that[componentDidMount] = () => {
290
+ const {
291
+ provideDraggableInitializer,
292
+ provideDroppableInitializer,
293
+ } = props();
294
+
295
+ orNoop(provideDraggableInitializer)(draggableInitializer);
296
+ orNoop(provideDroppableInitializer)(droppableInitializer);
297
+ addEventListener(containerRef(), 'dragover', onDrag, {capture: true, passive: true})
298
+ }
299
+ }
300
+ }
301
+
302
+ export const removeListener = (el, item, type) => item[type] && removeEventListener(el, type, item[type]);
303
+ export const addListener = (el, item, type, listener) => {
304
+ removeListener(el, item, type);
305
+ addEventListener(el, type, item[type] = listener);
306
+ };
307
+
308
+ const totalOffsetTop = (el) => {
309
+ return el.getBoundingClientRect().top + (WINDOW.pageYOffset || DOCUMENT.documentElement.scrollTop);
310
+ };
311
+ const totalOffsetLeft = (el) => {
312
+ return el.getBoundingClientRect().left + (WINDOW.pageXOffset || DOCUMENT.documentElement.scrollLeft);
313
+ };
314
+
315
+ export default DNDContainer;
@@ -45,8 +45,10 @@ class Droppable extends PureComponent {
45
45
  _state[allow] && allow,
46
46
  )}
47
47
  onDragOver={e => {
48
- preventDefault(e);
49
- stopPropagation(e);
48
+ if (_state[allow]) {
49
+ preventDefault(e);
50
+ stopPropagation(e);
51
+ }
50
52
  }}
51
53
  ref={ref('element', that)}>
52
54
  {_props[ReactConstants[4]]}
@@ -35,7 +35,7 @@ export interface DatePickerProps {
35
35
  value: Date
36
36
  minDate?: Date
37
37
  formatter: (date: Date) => string
38
- parser: (date: string) => Date
38
+ parser: (input: string) => Date
39
39
  onChange: (e) => void
40
40
  dayOfWeekToString: (day: number) => string | JSX.Element
41
41
  monthToString: (day: number) => string | JSX.Element
@@ -54,22 +54,24 @@ class DatePicker extends React.Component<DatePickerProps, DatePickerState> {
54
54
 
55
55
  constructor(props: DatePickerProps) {
56
56
  super(props);
57
- const date = props.value || new Date();
57
+ const value = props.value;
58
58
  this.state = {
59
59
  focused: false,
60
- value: date,
61
- text: props.formatter(date),
62
- selectedMonth: DateTools.dateOf(date).resetTime().set(1, DateTools.TimeUnit.DAY),
60
+ value,
61
+ text: props.formatter(value),
62
+ selectedMonth: DateTools.dateOf(value || new Date()).resetTime().set(1, DateTools.TimeUnit.DAY),
63
63
  };
64
64
  }
65
65
 
66
66
  componentDidUpdate(prevProps, prevState, snapshot) {
67
- if (this.props.value !== prevProps.value)
67
+ if (this.props.value !== prevProps.value) {
68
+ const value = this.props.value
68
69
  this.setState({
69
- value: this.props.value,
70
- selectedMonth: DateTools.dateOf(this.props.value).resetTime().set(1, DateTools.TimeUnit.DAY),
71
- text: this.props.formatter(this.props.value)
70
+ value,
71
+ selectedMonth: DateTools.dateOf(value || new Date()).resetTime().set(1, DateTools.TimeUnit.DAY),
72
+ text: this.props.formatter(value)
72
73
  })
74
+ }
73
75
  };
74
76
 
75
77
  componentDidMount() {
@@ -117,8 +119,8 @@ class DatePicker extends React.Component<DatePickerProps, DatePickerState> {
117
119
  const text = e.target.value;
118
120
  try {
119
121
  const date = parser(text);
120
- if (date instanceof Date && !Number.isNaN(date.getTime())) {
121
- if (date && value.getTime() !== date.getTime())
122
+ if (date && date instanceof Date && !Number.isNaN(date.getTime())) {
123
+ if (!value || !DateTools.equals(value, date))
122
124
  this.onChange(date);
123
125
  }
124
126
  this.setState({text})
@@ -1,263 +0,0 @@
1
- import ReactConstants from "./../ReactConstants";
2
- import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields";
3
- import React, {Component} from 'react';
4
- import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers";
5
- import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers";
6
- import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers";
7
- import './DNDContainer.css';
8
- import ReactCreateElement from './ReactCreateElement';
9
- import './DNDContainer.css'
10
- import {classNames, NOOP, orNoop, preventDefault, ref, DOCUMENT, WINDOW, addEventListener, removeEventListener, setTimeout, clearTimeout, requestAnimationFrame} from "./Tools";
11
-
12
- const clearSelection = () => {
13
- const getSelection = WINDOW.getSelection;
14
- if (getSelection) {
15
- if (getSelection().empty) { // Chrome
16
- getSelection().empty();
17
- } else if (getSelection().removeAllRanges) { // Firefox
18
- getSelection().removeAllRanges();
19
- }
20
- } else if (DOCUMENT.selection) { // IE?
21
- DOCUMENT.selection.empty();
22
- }
23
- };
24
-
25
- const droppables = 'ds';
26
- const positionListener = 'pl';
27
-
28
- class DNDContainer extends Component {
29
-
30
- constructor(props) {
31
- super(props);
32
-
33
- this.state = {
34
- draggable: null,
35
- };
36
-
37
- this[droppables] = [];
38
- this[positionListener] = NOOP;
39
- }
40
-
41
- render() {
42
- const {children, className} = __props(this);
43
- const {draggable} = __state(this);
44
- return <div className={classNames('DNDContainer', className)} ref={ref('container', this)}>
45
- {children}
46
- <div className="overlay">{draggable}</div>
47
- </div>;
48
- };
49
-
50
- componentDidMount() {
51
- const {
52
- provideDraggableInitializer,
53
- provideDroppableInitializer,
54
- } = __props(this);
55
-
56
- orNoop(provideDraggableInitializer)(this.draggableInitializer);
57
- orNoop(provideDroppableInitializer)(this.droppableInitializer);
58
- addEventListener(this.container, 'dragover', this.onDrag, {capture: true, passive: true})
59
- };
60
-
61
- draggableInitializer = (item) => {
62
- const handle = __props(item).handle;
63
- const draggableElement = (handle && item.element.childNodes[0]) || item.element;
64
- draggableElement.draggable = true;
65
-
66
- const dragStartListener = (e) => {
67
- clearSelection();
68
- const container = this.container;
69
- this.data = __props(item).data;
70
- this.draggable = item;
71
- this.scrollOffsetX = __pageX(e) - e.clientX;
72
- this.scrollOffsetY = __pageY(e) - e.clientY;
73
- const dataTransfer = e.dataTransfer;
74
- const itemOffset = item.element.getBoundingClientRect();
75
-
76
- item.width = __width(itemOffset);
77
- item.height = __height(itemOffset);
78
-
79
- let clone = orNoop(__props(item).copy)((it) => {
80
- let style = it.element.style;
81
-
82
- const offsetLeft = totalOffsetLeft(container) + (e.clientX - __left(itemOffset));
83
- const offsetTop = totalOffsetTop(container) + (e.clientY - __top(itemOffset));
84
- this[positionListener] = orNoop(it.createPositionListener)(e, style, itemOffset, container) || ((e) => {
85
- if (__pageX(e) === 0)
86
- return;
87
-
88
- style.transform = 'translate(' + (__pageX(e) - offsetLeft) + 'px, ' + (__pageY(e) - offsetTop) + 'px)';
89
- });
90
-
91
-
92
- requestAnimationFrame(() => {
93
- if (dataTransfer && !dataTransfer.setDragImage) {
94
- style.opacity = '0'; // hide dragged element in ie and edge
95
- }
96
- if (it.initDraggedStyles)
97
- it.initDraggedStyles(style, itemOffset);
98
- else {
99
- style.position = 'absolute';
100
- style.pointerEvents = 'none';
101
- style.opacity = '1';
102
- style.top = '0px';
103
- style.left = '0px';
104
- style.width = __width(itemOffset) + 'px';
105
- style.height = __height(itemOffset) + 'px';
106
- }
107
-
108
- this.onDrag(e);
109
- it.setState({dragged: true});
110
- });
111
- return it;
112
- }, 'copy', item);
113
-
114
- dataTransfer && dataTransfer.setData && dataTransfer.setData('text', ''); // required by firefox
115
- dataTransfer && (dataTransfer.dropEffect = "move");
116
- if (clone) {
117
- if (dataTransfer && dataTransfer.setDragImage) {
118
- clone !== item && this.setState({draggable: clone});
119
- const img = document.createElement('img');
120
- img.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
121
- dataTransfer.setDragImage(img, 0, 0);
122
- }
123
- }
124
- this.onDragStart(e);
125
- setTimeout(() => item.setState({placeholder: true}), 1)
126
- };
127
- addListener(draggableElement, item, 'dragend', (e) => {
128
- item.setState({placeholder: false});
129
- this.onDragEnd()
130
- });
131
- addListener(draggableElement, item, 'dragstart', dragStartListener);
132
-
133
- let longTouch;
134
- let dragStarted = false;
135
- let dragged = false;
136
- addListener(draggableElement, item, 'touchstart', e => {
137
- if (e.touches.length > 1)
138
- return;
139
-
140
- dragged = dragStarted = false;
141
- const touch = e.targetTouches[0];
142
- longTouch = setTimeout(() => longTouch && (dragStarted = true) && (longTouch = dragStartListener(touch)), !handle ? 500 : 0)
143
- });
144
-
145
- addListener(draggableElement, item, 'touchmove', e => {
146
- if (longTouch) {
147
- longTouch = clearTimeout(longTouch);
148
- return;
149
- }
150
- if (!dragStarted)
151
- return;
152
-
153
- if (e.touches.length > 1)
154
- return;
155
-
156
- preventDefault(e);
157
- dragged = true;
158
- const touch = e.targetTouches[0];
159
- this[positionListener](touch);
160
- this[droppables].forEach(it => it.isHover(touch, item))
161
- });
162
-
163
- addListener(draggableElement, item, 'touchend', e => {
164
- longTouch = clearTimeout(longTouch);
165
- if (!dragged)
166
- return;
167
-
168
- item.setState({placeholder: false});
169
- if (e.touches.length > 0)
170
- return;
171
-
172
- this[droppables].forEach(it => it.dropIfHover());
173
- this.onDragEnd();
174
- });
175
- };
176
-
177
-
178
- droppableInitializer = (item) => {
179
- this[droppables].push(item);
180
-
181
- addEventListener(item.element, 'drop', (e) => {
182
- preventDefault(e);
183
- __data(this) && orNoop(__props(item).onDrop)(__data(this));
184
- }, false);
185
-
186
- item.onDragStart = (e, draggable) => {
187
- item.bounds = item.element.getBoundingClientRect();
188
- item.setState({allow: true});
189
- orNoop(__props(item).onDragStart)(e, draggable);
190
- };
191
- item.isHover = (e, draggable) => {
192
- const bounds = item.bounds;
193
- if (!bounds)
194
- return;
195
-
196
- let y = __pageY(e) - this.scrollOffsetY;
197
- let x = __pageX(e) - this.scrollOffsetX;
198
- let hover = __left(bounds) <= x && bounds.right >= x && __top(bounds) <= y && bounds.bottom >= y;
199
-
200
- hover && orNoop(__props(item).onHover)(e, draggable);
201
-
202
- if (hover)
203
- !__state(item).hover && item.setState({hover});
204
- else
205
- __state(item).hover && item.setState({hover});
206
- };
207
- item.dropIfHover = () => {
208
- __data(this) && __state(item).hover && orNoop(__props(item).onDrop)(__data(this));
209
- };
210
- item.onDragEnd = () => {
211
- orNoop(orNoop(this.draggable).onDragEnd)();
212
- item.setState({allow: false, hover: false});
213
- };
214
- item.onUnmount = () => this[droppables].splice(this[droppables].indexOf(item), 1);
215
- };
216
-
217
- onDrag = (e) => {
218
- if (!this.draggable)
219
- return;
220
-
221
- this[positionListener](e);
222
- this[droppables].forEach(it => it.isHover(e, this.draggable))
223
- };
224
- onDragStart = (e) => {
225
- this[droppables].forEach(it => it.onDragStart(e, this.draggable))
226
- };
227
- onDragEnd = () => {
228
- const draggable = this.draggable;
229
- if (draggable.element) {
230
- let style = draggable.element.style;
231
- style.position = '';
232
- style.pointerEvents = '';
233
- style.width = ``;
234
- style.height = ``;
235
- style.opacity = '';
236
- }
237
- draggable.setState({dragged: false});
238
-
239
- this.setState({draggable: null});
240
-
241
- this[droppables].forEach(it => {
242
- it.onDragEnd();
243
- orNoop(__props(it).onDragEnd)(this.draggable)
244
- });
245
- this.data = null;
246
- this.draggable = null;
247
- };
248
- }
249
-
250
- export const removeListener = (el, item, type) => item[type] && removeEventListener(el, type, item[type]);
251
- export const addListener = (el, item, type, listener) => {
252
- removeListener(el, item, type);
253
- addEventListener(el, type, item[type] = listener);
254
- };
255
-
256
- const totalOffsetTop = (el) => {
257
- return el.getBoundingClientRect().top + (WINDOW.pageYOffset || DOCUMENT.documentElement.scrollTop);
258
- };
259
- const totalOffsetLeft = (el) => {
260
- return el.getBoundingClientRect().left + (WINDOW.pageXOffset || DOCUMENT.documentElement.scrollLeft);
261
- };
262
-
263
- export default DNDContainer;