UNPKG

11.9 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const rxjs_1 = require("rxjs");
4const index_1 = require("./index");
5const _ = require("lodash");
6class ReactiveCollection {
7 constructor(value = []) {
8 this.pushed = new rxjs_1.ReplaySubject(1);
9 this.popped = new rxjs_1.ReplaySubject(1);
10 this.shifted = new rxjs_1.ReplaySubject(1);
11 this.unshifted = new rxjs_1.ReplaySubject(1);
12 this.removed = new rxjs_1.ReplaySubject(1);
13 this.rotated = new rxjs_1.ReplaySubject(1);
14 this.array = new index_1.ReactiveProperty(value);
15 this.subs = [
16 this.subscribeToPush(pushed => {
17 const v = this.value;
18 v.push(pushed);
19 this.value = v;
20 }),
21 this.subscribeToUnshift(unshifted => {
22 const v = this.value;
23 v.unshift(unshifted);
24 this.value = v;
25 }),
26 ];
27 }
28 get value() {
29 return this.array.value;
30 }
31 set value(value) {
32 this.array.value = value;
33 }
34 dispose() {
35 this.subs.forEach(sub => sub.unsubscribe());
36 }
37 subscribeToPush(observer) {
38 return this.pushed
39 .observeOn(rxjs_1.Scheduler.asap)
40 .subscribeOn(rxjs_1.Scheduler.asap)
41 .subscribe(observer);
42 }
43 subscribeToPop(observer) {
44 return this.popped
45 .observeOn(rxjs_1.Scheduler.asap)
46 .subscribeOn(rxjs_1.Scheduler.asap)
47 .subscribe(observer);
48 }
49 subscribeToShift(observer) {
50 return this.shifted
51 .observeOn(rxjs_1.Scheduler.asap)
52 .subscribeOn(rxjs_1.Scheduler.asap)
53 .subscribe(observer);
54 }
55 subscribeToUnshift(observer) {
56 return this.unshifted
57 .observeOn(rxjs_1.Scheduler.asap)
58 .subscribeOn(rxjs_1.Scheduler.asap)
59 .subscribe(observer);
60 }
61 subscribeToRemove(observer) {
62 return this.removed
63 .observeOn(rxjs_1.Scheduler.asap)
64 .subscribeOn(rxjs_1.Scheduler.asap)
65 .subscribe(observer);
66 }
67 subscribeToRotate(observer) {
68 return this.rotated
69 .observeOn(rxjs_1.Scheduler.asap)
70 .subscribeOn(rxjs_1.Scheduler.asap)
71 .subscribe(observer);
72 }
73 push(value) {
74 this.pushed.next(value);
75 return this;
76 }
77 pop(value) {
78 const v = this.value;
79 const popped = v.pop();
80 this.popped.next(popped);
81 this.value = v;
82 return popped;
83 }
84 shift() {
85 const v = this.value;
86 const shifted = v.shift();
87 this.shifted.next(shifted);
88 this.value = v;
89 return shifted;
90 }
91 unshift(value) {
92 this.unshifted.next(value);
93 return this;
94 }
95 remove(value) {
96 const v = this.value;
97 const removed = v.splice(v.indexOf(value));
98 this.value = v;
99 this.removed.next(removed[0]);
100 return this;
101 }
102 rotate() {
103 const value = this.value;
104 const shifted = value.shift();
105 value.push(shifted);
106 this.rotated.next(shifted);
107 this.value = value;
108 return shifted;
109 }
110 rotateEach(action) {
111 _.range(this.value.length).forEach(i => {
112 action(this.rotate());
113 });
114 }
115 mapCollection(selector) {
116 return new ReactiveCollection(this.value.map(selector));
117 }
118 filterCollection(selector) {
119 return new ReactiveCollection(this.value.filter(selector));
120 }
121 forEach(action) {
122 this.value.forEach(action);
123 return this;
124 }
125 subscribe(observer) {
126 return this.array.subscribe(observer);
127 }
128 filter(selector) {
129 return this.array.filter(selector);
130 }
131 map(selector) {
132 return this.array.map(selector);
133 }
134 debounceWithTimeout(dueTime, scheduler) {
135 return this.array.throttleTime(dueTime, scheduler);
136 }
137 debounceWithSelector(selector) {
138 return this.array.throttle(selector);
139 }
140 bufferTime(timeSpan, scheduler) {
141 return this.array.bufferTime(timeSpan, scheduler);
142 }
143 bufferCount(count, skip) {
144 return this.array.bufferCount(count, skip);
145 }
146 bufferTimeCount(timeSpan, count, skip, scheduler) {
147 return this.array.bufferTimeCount(timeSpan, count, skip, scheduler);
148 }
149 zip(other) {
150 return this.array.zip(other);
151 }
152 asObservable() {
153 return this.array.asObservable();
154 }
155 asObserver() {
156 return this.array.asObserver();
157 }
158 asSubject() {
159 return this.array.asSubject();
160 }
161 asBehaviourSubject() {
162 return this.array.asBehaviourSubject();
163 }
164}
165exports.ReactiveCollection = ReactiveCollection;
166//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWFjdGl2ZS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBUWM7QUFHZCxtQ0FBMkM7QUFFM0MsNEJBQTRCO0FBRTVCO0lBb0JFLFlBQVksUUFBYSxFQUFFO1FBbkJuQixXQUFNLEdBQXFCLElBQUksb0JBQWEsQ0FBSSxDQUFDLENBQUMsQ0FBQztRQUNuRCxXQUFNLEdBQXFCLElBQUksb0JBQWEsQ0FBSSxDQUFDLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQXFCLElBQUksb0JBQWEsQ0FBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxjQUFTLEdBQXFCLElBQUksb0JBQWEsQ0FBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxZQUFPLEdBQXFCLElBQUksb0JBQWEsQ0FBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxZQUFPLEdBQXFCLElBQUksb0JBQWEsQ0FBSSxDQUFDLENBQUMsQ0FBQztRQWUxRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0JBQWdCLENBQU0sS0FBSyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtnQkFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztnQkFDL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFD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
\No newline at end of file