1
1
import xs , { Stream } from 'xstream' ;
2
2
import delay from 'xstream/extra/delay' ;
3
3
import { DOMSource , VNode } from '@cycle/dom' ;
4
+ import { adapt } from '@cycle/run/lib/adapt' ;
4
5
5
6
import { SortableOptions , Transform , EventDetails } from './definitions' ;
6
7
import { applyDefaults , addKeys } from './helpers' ;
@@ -15,29 +16,30 @@ export { SortableOptions, Transform, EventHandler, EventDetails } from './defini
15
16
* @param {SortableOptions } options @see {SortableOptions}
16
17
* @return {Transform<VNode, VNode> } A function to be composed with a view VNode stream
17
18
*/
18
- export function makeSortable ( dom : DOMSource , options ? : SortableOptions ) : Transform < VNode , VNode >
19
+ export function makeSortable < T > ( dom : DOMSource , options ? : SortableOptions ) : ( s : T ) => T
19
20
{
20
- return sortable => sortable
21
+ return sortable => adapt (
22
+ ( xs . fromObservable ( sortable as any ) as Stream < VNode > )
21
23
. map ( node => {
22
24
const defaults : SortableOptions = applyDefaults ( options || { } , node ) ;
23
25
24
- const mousedown$ : Stream < MouseEvent > = dom . select ( defaults . handle )
25
- . events ( 'mousedown' ) as Stream < MouseEvent > ;
26
+ const mousedown$ : Stream < MouseEvent > = xs . fromObservable ( dom . select ( defaults . handle ) . events ( 'mousedown' ) ) as Stream < MouseEvent > ;
26
27
27
28
const mouseup$ : Stream < MouseEvent > = mousedown$
28
- . mapTo ( dom . select ( 'body' ) . events ( 'mouseup' ) . take ( 1 ) )
29
+ . mapTo ( xs . fromObservable ( dom . select ( 'body' ) . events ( 'mouseup' ) . take ( 1 ) ) )
29
30
. flatten ( ) as Stream < MouseEvent > ;
30
31
31
32
const mousemove$ : Stream < MouseEvent > = mousedown$
32
- . mapTo ( dom . select ( 'body' ) . events ( 'mousemove' ) )
33
+ . mapTo ( xs . fromObservable ( dom . select ( 'body' ) . events ( 'mousemove' ) ) )
33
34
. flatten ( )
34
35
. compose ( emitBetween ( mousedown$ , mouseup$ ) ) as Stream < MouseEvent > ;
35
36
36
37
const event$ : Stream < MouseEvent > = xs . merge ( mousedown$ , mouseup$ , mousemove$ ) ;
37
38
38
39
return event$ . fold ( ( acc , curr ) => handleEvent ( acc , curr , defaults ) , node ) ;
39
40
} )
40
- . flatten ( ) ;
41
+ . flatten ( )
42
+ ) ;
41
43
}
42
44
43
45
/**
0 commit comments