Skip to content

Commit 87e988f

Browse files
committed
feat(parseobservablemarble): support expanding timeframe
1 parent 6d931fe commit 87e988f

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

src/marbles/parseObservableMarble.ts

+24-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ const parseObservableMarble = <T>(
1919
const frameOffset = subscriptionIndex < 0 ? 0 : subscriptionIndex;
2020

2121
const values = Array.from(marble).filter(token => token !== ObservableMarbleToken.NOOP).slice(frameOffset).reduce((
22-
acc: { currentOffset: number; messages: Array<TestMessage<T>>; simultaneousGrouped: boolean },
22+
acc: {
23+
currentOffset: number;
24+
messages: Array<TestMessage<T>>;
25+
simultaneousGrouped: boolean;
26+
expanding: boolean;
27+
expandingValue: Array<string>;
28+
},
2329
token: any
2430
) => {
2531
let message: TestMessage<T> | null = null;
@@ -35,6 +41,14 @@ const parseObservableMarble = <T>(
3541
message = new TestMessageValue<T>(acc.currentOffset, Notification.createComplete());
3642
break;
3743
case ObservableMarbleToken.TIMEFRAME_EXPAND:
44+
if (acc.expandingValue.length === 0 && !acc.expanding) {
45+
acc.expandingValue.splice(0);
46+
acc.expanding = true;
47+
} else if (acc.expandingValue.length > 0 && acc.expanding) {
48+
acc.expanding = false;
49+
const expandedFrame = parseInt(acc.expandingValue.join(''), 10);
50+
acc.currentOffset += expandedFrame * frameTimeFactor;
51+
}
3852
break;
3953
case ObservableMarbleToken.SIMULTANEOUS_START:
4054
acc.simultaneousGrouped = true;
@@ -46,8 +60,12 @@ const parseObservableMarble = <T>(
4660
case SubscriptionMarbleToken.SUBSCRIBE:
4761
break;
4862
default:
49-
const customValue = value && value[token] ? value[token] : token;
50-
message = new TestMessageValue<T>(acc.currentOffset, Notification.createNext<T>(customValue));
63+
if (acc.expanding) {
64+
acc.expandingValue.push(token);
65+
} else {
66+
const customValue = value && value[token] ? value[token] : token;
67+
message = new TestMessageValue<T>(acc.currentOffset, Notification.createNext<T>(customValue));
68+
}
5169
}
5270

5371
if (!!message) {
@@ -61,7 +79,9 @@ const parseObservableMarble = <T>(
6179
}, {
6280
currentOffset: frameOffset,
6381
messages: [],
64-
simultaneousGrouped: false
82+
simultaneousGrouped: false,
83+
expanding: false,
84+
expandingValue: []
6585
});
6686

6787
return values.messages;

0 commit comments

Comments
 (0)