Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 68e7fef

Browse files
committed
Drop functionality for differentiating between an initial request and the main stream
This was confusing and hard to follow. Instead, the smart data source will just call throttled directly to fire off the initial request
1 parent c299876 commit 68e7fef

File tree

4 files changed

+19
-61
lines changed

4 files changed

+19
-61
lines changed

source/components/cardContainer/dataSources/smartDataSource/smartDataActions.tests.ts

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,43 +23,6 @@ const pagingParams = {
2323

2424
describe('smart data source actions', () => {
2525
describe('toRequestStream', () => {
26-
it('should fire one request to bootstrap the data source', () => {
27-
const filters = [
28-
{
29-
type: 'one',
30-
subject: new BehaviorSubject('Filter 1'),
31-
serialize: () => filters[0].subject,
32-
},
33-
];
34-
const sorts = [
35-
{
36-
column: { label: 'col1' },
37-
direction: SortDirection.ascending,
38-
},
39-
];
40-
const throttled$ = new BehaviorSubject(false);
41-
const appliedFiltersSpy = sinon.spy();
42-
43-
toRequestStream(throttled$, Observable.of(<any>filters), Observable.of(<any>sorts), true).subscribe(appliedFiltersSpy);
44-
45-
let expected: any = {
46-
filters: { one: 'Filter 1' },
47-
sorts: [{ column: 'col1', direction: SortDirection.getFullName(SortDirection.ascending) }],
48-
paging: pagingParams,
49-
};
50-
sinon.assert.calledOnce(appliedFiltersSpy);
51-
sinon.assert.calledWith(appliedFiltersSpy, expected);
52-
appliedFiltersSpy.reset();
53-
54-
filters[0].subject.next('Filter 1 changed');
55-
56-
sinon.assert.notCalled(appliedFiltersSpy);
57-
58-
throttled$.next(true);
59-
60-
sinon.assert.notCalled(appliedFiltersSpy);
61-
});
62-
6326
it('should skip the first event on each throttle change', () => {
6427
const filters = [
6528
{

source/components/cardContainer/dataSources/smartDataSource/smartDataActions.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,10 @@ export interface ITypeWithValue {
1717

1818
export const defaultThrottleLimit: number = 200;
1919

20-
export function toRequestStream(throttled$: Observable<boolean>, filters$: Observable<IFilter<any, any>[]>, sorts$: Observable<ISort[]>, initial: boolean = false): Observable<IServerSearchParams> {
21-
let stream = throttled$.switchMap(isThrottled => isThrottled
22-
? skipIfNotInitial(throttled(filters$, sorts$), initial)
23-
: skipIfNotInitial(unthrottled(filters$, sorts$), initial));
24-
if (initial) {
25-
stream = stream.take(1);
26-
}
27-
return stream;
28-
}
29-
30-
export function skipIfNotInitial(params$: Observable<IServerSearchParams>, initial: boolean): Observable<IServerSearchParams> {
31-
if (!initial) {
32-
return params$.skip(1);
33-
}
34-
return params$;
20+
export function toRequestStream(throttled$: Observable<boolean>, filters$: Observable<IFilter<any, any>[]>, sorts$: Observable<ISort[]>): Observable<IServerSearchParams> {
21+
return throttled$.switchMap(isThrottled => isThrottled
22+
? throttled(filters$, sorts$).skip(1)
23+
: unthrottled(filters$, sorts$).skip(1));
3524
}
3625

3726
export function throttled(filters$: Observable<IFilter<any, any>[]>, sorts$: Observable<ISort[]>): Observable<IServerSearchParams> {

source/components/cardContainer/dataSources/smartDataSource/smartDataSource.service.tests.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ describe('SmartDataSource', () => {
1111
});
1212

1313
describe('init', () => {
14-
let toRequestStreamSpy: Sinon.SinonSpy;
14+
let initialRequestSpy: Sinon.SinonSpy;
1515
let initRequestStream: Subject<any>;
16+
let toRequestStreamSpy: Sinon.SinonSpy;
1617
let requestStream: Subject<any>;
1718
let getDataSetSpy: Sinon.SinonSpy;
1819
let getDataStream: Subject<any>;
@@ -23,11 +24,13 @@ describe('SmartDataSource', () => {
2324
initRequestStream = new Subject();
2425
requestStream = new Subject();
2526
getDataStream = new Subject();
26-
toRequestStreamSpy = sinon.spy((...args) => args[3] ? initRequestStream : requestStream);
27+
initialRequestSpy = sinon.spy(() => initRequestStream);
28+
toRequestStreamSpy = sinon.spy(() => requestStream);
2729
getDataSetSpy = sinon.spy(() => getDataStream);
2830
resolveReloadSpy = sinon.spy();
2931
sortList$ = new Subject();
3032

33+
source.initialRequest = initialRequestSpy;
3134
source.toRequestStream = toRequestStreamSpy;
3235
source.getDataSet = getDataSetSpy;
3336
source.resolveReload = resolveReloadSpy;
@@ -39,8 +42,8 @@ describe('SmartDataSource', () => {
3942
const data = {};
4043
source.init();
4144

42-
sinon.assert.calledOnce(toRequestStreamSpy);
43-
sinon.assert.calledWith(toRequestStreamSpy, source.throttled$, (source as any).filters$, sortList$, true);
45+
sinon.assert.calledOnce(initialRequestSpy);
46+
sinon.assert.calledWith(initialRequestSpy, (source as any).filters$, sortList$);
4447

4548
initRequestStream.next(requestData);
4649

@@ -57,7 +60,6 @@ describe('SmartDataSource', () => {
5760
const requestData = {};
5861
const data = {};
5962
source.init();
60-
toRequestStreamSpy.reset();
6163
initRequestStream.next({});
6264
getDataStream.next({});
6365
getDataSetSpy.reset();

source/components/cardContainer/dataSources/smartDataSource/smartDataSource.service.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { IServerSearchFunction, IServerSearchParams, IDataResult } from '../asyn
44
import { IFilter } from '../../filters/index';
55
import { DataSourceBase } from '../dataSourceBase.service';
66
import { ISort, SortDirection } from '../../sorts/sort';
7-
import { toRequestStream } from './smartDataActions';
7+
import { toRequestStream, throttled } from './smartDataActions';
88

99
export const defaultDebounce = 1000;
1010

@@ -22,7 +22,7 @@ export class SmartDataSource<TDataType> extends DataSourceBase<TDataType> {
2222

2323
init(): void {
2424
// initial request
25-
this.toRequestStream(this.throttled$, this.filters$, this.sorter.sortList$, true).switchMap(requestData => {
25+
this.initialRequest(this.filters$, this.sorter.sortList$).switchMap(requestData => {
2626
return this.getDataSet(requestData);
2727
}).switchMap(result => {
2828
this.resolveReload(result);
@@ -45,8 +45,12 @@ export class SmartDataSource<TDataType> extends DataSourceBase<TDataType> {
4545
this.filters$.next(value);
4646
}
4747

48-
toRequestStream(throttled$: Observable<boolean>, filters$: Observable<IFilter<any, any>[]>, sorts$: Observable<ISort[]>, initial?: boolean): Observable<IServerSearchParams> {
49-
return toRequestStream(throttled$, filters$, sorts$, initial);
48+
initialRequest(filters$: Observable<IFilter<any, any>[]>, sorts$: Observable<ISort[]>): Observable<IServerSearchParams> {
49+
return throttled(filters$, sorts$).take(1);
50+
}
51+
52+
toRequestStream(throttled$: Observable<boolean>, filters$: Observable<IFilter<any, any>[]>, sorts$: Observable<ISort[]>): Observable<IServerSearchParams> {
53+
return toRequestStream(throttled$, filters$, sorts$);
5054
}
5155

5256
startLoading(): void {

0 commit comments

Comments
 (0)