Skip to content

Commit a174c99

Browse files
authored
Counter widget sends double requests, the first one has viewport as undefined #10674 (#10683)
1 parent ab98f41 commit a174c99

4 files changed

Lines changed: 67 additions & 4 deletions

File tree

web/client/components/widgets/enhancers/__tests__/wpsCounter-test.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ describe('wpsChart enhancer', () => {
2323
document.body.innerHTML = '';
2424
setTimeout(done);
2525
});
26-
it('wpsChart data retrival', (done) => {
26+
it('wpsCounter data retrieval', (done) => {
2727
const Sink = wpsCounter(createSink( ({data, loading} = {}) => {
2828
if (!loading) {
2929
expect(data).toExist();
@@ -44,7 +44,7 @@ describe('wpsChart enhancer', () => {
4444
};
4545
ReactDOM.render(<Sink {...props} />, document.getElementById("container"));
4646
});
47-
it('wpsChart error management', (done) => {
47+
it('wpsCounter error management', (done) => {
4848
const Sink = wpsCounter(createSink( ({error, loading} = {}) => {
4949
if (!loading && error) {
5050
expect(error).toExist();
@@ -64,4 +64,28 @@ describe('wpsChart enhancer', () => {
6464
};
6565
ReactDOM.render(<Sink {...props} />, document.getElementById("container"));
6666
});
67+
it('wpsCounter with mapSync and dependencies', (done) => {
68+
const Sink = wpsCounter(createSink( ({data, loading} = {}) => {
69+
if (!loading) {
70+
expect(data).toExist();
71+
done();
72+
}
73+
}));
74+
const props = {
75+
mapSync: true,
76+
dependencies: {
77+
viewport: "..."
78+
},
79+
layer: {
80+
name: "test",
81+
url: 'base/web/client/test-resources/widgetbuilder/aggregate',
82+
wpsUrl: 'base/web/client/test-resources/widgetbuilder/aggregate',
83+
search: {url: 'base/web/client/test-resources/widgetbuilder/aggregate'}},
84+
options: {
85+
aggregateFunction: "Count",
86+
aggregationAttribute: "test"
87+
}
88+
};
89+
ReactDOM.render(<Sink {...props} />, document.getElementById("container"));
90+
});
6791
});

web/client/components/widgets/enhancers/wfsTable/__tests__/triggerFetch-test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,28 @@ describe('triggerFetch stream', () => {
5555
}
5656
);
5757
});
58+
it('triggerFetch with mapSync and dependencies.viewport', (done) => {
59+
const base = {
60+
layer: { name: "TEST" },
61+
mapSync: true
62+
};
63+
const propsChanges = [
64+
base, // does not trigger fetch
65+
{...base, dependencies: { viewport: true }}, // triggers fetch (p1)
66+
{...base, dependencies: { viewport: false }}, // does not trigger fetch
67+
{...base, mapSync: false, filter: "changed"} // triggers fetch (p2) (the filter changes due to the viewport)
68+
];
69+
triggerFetch(Rx.Observable.from(propsChanges))
70+
.bufferCount(4)
71+
.subscribe(
72+
([p1, p2, p3, p4]) => {
73+
expect(p1?.dependencies?.viewport).toBe(true);
74+
expect(p2).toExist();
75+
expect(p3).toNotExist();
76+
expect(p4).toNotExist();
77+
done();
78+
}
79+
);
80+
});
5881

5982
});

web/client/components/widgets/enhancers/wfsTable/triggerFetch.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,15 @@ const sameSortOptions = (o1 = {}, o2 = {}) =>
2222
* @return {Observable} Stream of props to trigger the data fetch
2323
*/
2424
export default ($props) =>
25-
$props.filter(({ layer = {} }) => layer.name )
25+
$props.filter(({ layer = {}, mapSync, dependencies }) => {
26+
// Check if mapSync is enabled (true) and dependencies.viewport is null or falsy
27+
// If this condition is true, return false to filter out the event.
28+
// This prevents an extra API call from being triggered when the viewport is not available.
29+
if (mapSync && !dependencies?.viewport) {
30+
return false;
31+
}
32+
return layer.name;
33+
} )
2634
.distinctUntilChanged(
2735
({ layer = {}, options = {}, filter, sortOptions }, newProps) =>
2836
/* getSearchUrl(layer) === getSearchUrl(layer) && */

web/client/components/widgets/enhancers/wpsCounter.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,15 @@ import { getWpsUrl } from '../../../utils/LayersUtils';
3030
*/
3131
const dataStreamFactory = ($props) =>
3232
$props
33-
.filter(({layer = {}, options}) => layer.name && getWpsUrl(layer) && options && options.aggregateFunction && options.aggregationAttribute)
33+
.filter(({layer = {}, options, dependencies, mapSync}) => {
34+
// Check if mapSync is enabled (true) and dependencies.viewport is null or falsy
35+
// If this condition is true, return false to filter out the event.
36+
// This prevents an extra API call from being triggered when the viewport is not available.
37+
if (mapSync && !dependencies?.viewport) {
38+
return false;
39+
}
40+
return layer.name && getWpsUrl(layer) && options && options.aggregateFunction && options.aggregationAttribute;
41+
})
3442
.distinctUntilChanged(
3543
({layer = {}, options = {}, filter}, newProps) =>
3644
(newProps.layer && layer.name === newProps.layer.name && layer.loadingError === newProps.layer.loadingError)

0 commit comments

Comments
 (0)