File tree Expand file tree Collapse file tree 2 files changed +107
-0
lines changed Expand file tree Collapse file tree 2 files changed +107
-0
lines changed Original file line number Diff line number Diff line change
1
+ import {
2
+ Event ,
3
+ Store ,
4
+ Unit ,
5
+ combine ,
6
+ createEvent ,
7
+ createStore ,
8
+ is ,
9
+ sample ,
10
+ } from 'effector' ;
11
+
12
+ export function skip < T > ( {
13
+ clock,
14
+ count,
15
+ reset,
16
+ } : {
17
+ clock ?: Unit < T > ;
18
+ count : Store < number > | number ;
19
+ reset ?: Unit < T > ;
20
+ } ) : Event < T > {
21
+ const $count = is . store ( count ) ? count : createStore ( count ) ;
22
+
23
+ const $skipped = createStore ( 0 ) ;
24
+
25
+ const $canTrigger = combine (
26
+ [ $skipped , $count ] ,
27
+ ( [ skipped , count ] ) => skipped >= count ,
28
+ ) ;
29
+
30
+ clock = is . unit ( clock ) ? clock : createEvent ( ) ;
31
+
32
+ reset = is . unit ( reset ) ? reset : createEvent ( ) ;
33
+
34
+ const event = sample ( {
35
+ clock,
36
+ source : $skipped ,
37
+ filter : $canTrigger ,
38
+ fn : ( _ , params ) => params ,
39
+ } ) ;
40
+
41
+ sample ( {
42
+ clock,
43
+ source : $skipped ,
44
+ filter : $canTrigger . map ( ( canTrigger ) => ! canTrigger ) ,
45
+ fn : ( skipped ) => skipped + 1 ,
46
+ target : $skipped ,
47
+ } ) ;
48
+
49
+ sample ( {
50
+ clock : [ $count , reset ] ,
51
+ target : $skipped . reinit ,
52
+ } ) ;
53
+
54
+ return event ;
55
+ }
Original file line number Diff line number Diff line change
1
+ import {
2
+ Event ,
3
+ Store ,
4
+ Unit ,
5
+ combine ,
6
+ createEvent ,
7
+ createStore ,
8
+ is ,
9
+ sample ,
10
+ } from 'effector' ;
11
+
12
+ export function skip < T > ( {
13
+ clock,
14
+ count,
15
+ reset,
16
+ } : {
17
+ clock : Unit < T > ;
18
+ count : Store < number > | number ;
19
+ reset ?: Unit < T > ;
20
+ } ) : Event < T > {
21
+ const $count = is . store ( count ) ? count : createStore ( count ) ;
22
+
23
+ const $taken = createStore ( 0 ) ;
24
+
25
+ const $canTrigger = combine ( [ $taken , $count ] , ( [ taken , count ] ) => taken >= count ) ;
26
+
27
+ clock = is . unit ( clock ) ? clock : createEvent ( ) ;
28
+
29
+ reset = is . unit ( reset ) ? reset : createEvent ( ) ;
30
+
31
+ const event = sample ( {
32
+ clock,
33
+ source : $taken ,
34
+ filter : $canTrigger ,
35
+ fn : ( _ , params ) => params ,
36
+ } ) ;
37
+
38
+ sample ( {
39
+ clock,
40
+ source : $taken ,
41
+ filter : $canTrigger . map ( ( canTrigger ) => ! canTrigger ) ,
42
+ fn : ( taken ) => taken + 1 ,
43
+ target : $taken ,
44
+ } ) ;
45
+
46
+ sample ( {
47
+ clock : [ $count , reset ] ,
48
+ target : $taken . reinit ,
49
+ } ) ;
50
+
51
+ return event ;
52
+ }
You can’t perform that action at this time.
0 commit comments