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