Skip to content

Commit ad051e8

Browse files
committed
List view: Fix infinite scrolling
Fixes condition where, on 'refresh' of list view, infinite scrolling no longer works due to leftover state prior to refresh. Now page # and end-of-list indicator are stores in DOM object, for easier cleanup
1 parent 1f7a818 commit ad051e8

1 file changed

Lines changed: 19 additions & 25 deletions

File tree

ui/scripts/ui/widgets/listView.js

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,7 @@
10351035
var subselect = uiCustom ? listViewArgs.listView.subselect : null;
10361036

10371037
if (!(data && data.length)) {
1038+
$listView.data('end-of-table', true);
10381039
if (!$tbody.find('tr').size()) {
10391040
return [
10401041
$('<tr>').addClass('empty last').append(
@@ -1502,6 +1503,7 @@
15021503
var reorder = options.reorder;
15031504
var multiSelect = options.multiSelect;
15041505
var $tbody = $table.find('tbody');
1506+
var $listView = $table.closest('.list-view');
15051507

15061508
if (!loadArgs) loadArgs = {
15071509
page: 1,
@@ -1512,11 +1514,16 @@
15121514
}
15131515
};
15141516

1517+
if (options.clearEndTable) {
1518+
$listView.data('page', 1);
1519+
$table.closest('.list-view').data('end-of-table', false);
1520+
}
1521+
15151522
if (!append) {
15161523
if (!append) $table.find('tbody tr').remove();
15171524
}
15181525

1519-
var viewArgs = $table.closest('.list-view').data('view-args');
1526+
var viewArgs = $listView.data('view-args');
15201527
var uiCustom = viewArgs.listView ? viewArgs.listView.uiCustom : false;
15211528

15221529
setLoading($table, function(setLoadingArgs) {
@@ -1539,12 +1546,6 @@
15391546
noSelect: uiCustom
15401547
});
15411548

1542-
if (args.data &&
1543-
args.data.length < pageSize &&
1544-
options.setEndTable) {
1545-
options.setEndTable();
1546-
}
1547-
15481549
setTimeout(function() {
15491550
$table.dataTable('refresh');
15501551
});
@@ -1686,16 +1687,13 @@
16861687
var $toolbar = $('<div>').addClass('toolbar').appendTo($listView);
16871688
var $table = $('<table>').appendTo($listView);
16881689
var infScrollTimer;
1689-
var page = 1;
16901690
var actions = listViewData.actions;
16911691
var reorder = listViewData.reorder;
16921692
var multiSelect = listViewData.multiSelect;
16931693
var tableHeight = $table.height();
1694-
var endTable = false;
1695-
var setEndTable = function() {
1696-
endTable = true;
1697-
}
16981694

1695+
$listView.data('end-of-table', false);
1696+
$listView.data('page', 1);
16991697

17001698
var $switcher;
17011699
if (args.sections) {
@@ -1794,7 +1792,7 @@
17941792
listViewData.preFilter,
17951793
listViewData.fields,
17961794
false, {
1797-
page: page,
1795+
page: $listView.data('page'),
17981796
filterBy: {
17991797
kind: $listView.find('select[id=filterBy]').val(),
18001798
search: {
@@ -1808,7 +1806,6 @@
18081806
context: args.context,
18091807
reorder: reorder,
18101808
detailView: listViewData.detailView,
1811-
setEndTable: setEndTable,
18121809
'multiSelect': multiSelect,
18131810
noActionCol: listViewData.noActionCol
18141811
}
@@ -1842,14 +1839,14 @@
18421839
var basicSearch = function() {
18431840
$listView.removeData('advSearch');
18441841

1845-
page = 1;
1842+
$listView.data('page', 1);
18461843
loadBody(
18471844
$table,
18481845
listViewData.dataProvider,
18491846
listViewData.preFilter,
18501847
listViewData.fields,
18511848
false, {
1852-
page: page,
1849+
page: $listView.data('page'),
18531850
filterBy: {
18541851
kind: $listView.find('select[id=filterBy]').val(),
18551852
search: {
@@ -1862,7 +1859,6 @@
18621859
context: $listView.data('view-args').context,
18631860
reorder: listViewData.reorder,
18641861
detailView: listViewData.detailView,
1865-
setEndTable: setEndTable,
18661862
'multiSelect': multiSelect,
18671863
noActionCol: listViewData.noActionCol
18681864
}
@@ -1895,15 +1891,14 @@
18951891
//advanced search
18961892
var advancedSearch = function(args) {
18971893
$listView.data('advSearch', args.data);
1898-
1899-
page = 1;
1894+
$listView.data('page', 1);
19001895
loadBody(
19011896
$table,
19021897
listViewData.dataProvider,
19031898
listViewData.preFilter,
19041899
listViewData.fields,
19051900
false, {
1906-
page: page,
1901+
page: $listView.data('page'),
19071902
filterBy: {
19081903
kind: $listView.find('select[id=filterBy]').val(),
19091904
advSearch: args.data
@@ -1913,7 +1908,6 @@
19131908
context: $listView.data('view-args').context,
19141909
reorder: listViewData.reorder,
19151910
detailView: listViewData.detailView,
1916-
setEndTable: setEndTable,
19171911
'multiSelect': multiSelect,
19181912
noActionCol: listViewData.noActionCol
19191913
}
@@ -1979,8 +1973,8 @@
19791973
var loadMoreData = $listView.scrollTop() >= ($table.height() - $listView.height()) - $listView.height() / 4;
19801974
var context = $listView.data('view-args').context;
19811975

1982-
if (loadMoreData && !endTable) {
1983-
page = page + 1;
1976+
if (loadMoreData && !$listView.data('end-of-table')) {
1977+
$listView.data('page', $listView.data('page') + 1);
19841978

19851979
var filterBy = {
19861980
kind: $listView.find('select[id=filterBy]').length > 0 ? $listView.find('select[id=filterBy]').val() : 'all'
@@ -2000,12 +1994,11 @@
20001994
listViewData.preFilter,
20011995
listViewData.fields, true, {
20021996
context: context,
2003-
page: page,
1997+
page: $listView.data('page'),
20041998
filterBy: filterBy
20051999
}, actions, {
20062000
reorder: listViewData.reorder,
20072001
detailView: listViewData.detailView,
2008-
setEndTable: setEndTable,
20092002
'multiSelect': multiSelect,
20102003
noActionCol: listViewData.noActionCol
20112004
});
@@ -2272,6 +2265,7 @@
22722265
false,
22732266
null,
22742267
listViewArgs.actions, {
2268+
clearEndTable: true,
22752269
multiSelect: listViewArgs.multiSelect,
22762270
context: this.data('view-args').context,
22772271
detailView: listViewArgs.detailView

0 commit comments

Comments
 (0)