Skip to content

Commit 3bd7c6d

Browse files
committed
New functions set/get_selected_rows
1 parent 1fa8467 commit 3bd7c6d

File tree

12 files changed

+128
-357
lines changed

12 files changed

+128
-357
lines changed

packages/dt_for_itables/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 2.0.13 (2024-09-22)
2+
3+
- We have added two functions `set_selected_rows` and `get_selected_rows` to set and retrieve selected rows
4+
15
# 2.0.12 (2024-09-08)
26

37
- We have added the datetime extension for DataTables ([#288](https://github.com/mwouts/itables/issues/288))

packages/dt_for_itables/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/dt_for_itables/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dt_for_itables",
3-
"version": "2.0.12",
3+
"version": "2.0.13",
44
"description": "DataTables bundle for itables",
55
"main": "src/index.js",
66
"typings": "src/index.d.js",

packages/dt_for_itables/src/index.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,26 @@ import 'datatables.net-select-dt/css/select.dataTables.min.css';
3434

3535
import './index.css';
3636

37+
DataTable.get_selected_rows = function (dt) {
38+
// Here the selected rows are for the datatable.
39+
// We convert them back to the full table
40+
let data_row_count = dt.rows().count();
41+
let bottom_half = data_row_count / 2;
42+
return Array.from(dt.rows({ selected: true }).indexes().map(
43+
i => (i < bottom_half ? i : i + dt.filtered_row_count)));
44+
}
45+
46+
DataTable.set_selected_rows = function (dt, selected_rows) {
47+
let data_row_count = dt.rows().count();
48+
let bottom_half = data_row_count / 2;
49+
let top_half = bottom_half + dt.filtered_row_count;
50+
let full_row_count = data_row_count + dt.filtered_row_count;
51+
selected_rows = Array.from(selected_rows.filter(i => i >= 0 && i < full_row_count && (i < bottom_half || i >= top_half)).map(
52+
i => (i < bottom_half) ? i : i - dt.filtered_row_count));
53+
dt.rows().deselect();
54+
dt.rows(selected_rows).select();
55+
}
56+
3757
export { DataTable, DateTime, jQuery };
3858

3959
export default DataTable;

packages/itables_anywidget/js/widget.ts

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,7 @@ function render({ model, el }: RenderContext<WidgetModel>) {
5252
function set_selected_rows_from_model() {
5353
// We use this variable to avoid triggering model updates!
5454
setting_selected_rows_from_model = true;
55-
56-
// The model selected rows are for the full table, so
57-
// we map them to the actual data
58-
let selected_rows = model.get('selected_rows');
59-
let full_row_count = model.get('full_row_count');
60-
let data_row_count = model.get('data').length;
61-
let bottom_half = data_row_count / 2;
62-
let top_half = full_row_count - bottom_half;
63-
selected_rows = Array.from(selected_rows.filter(i => i >= 0 && i < full_row_count && (i < bottom_half || i >= top_half)).map(
64-
i => (i < bottom_half) ? i : i - full_row_count + data_row_count));
65-
dt.rows().deselect();
66-
dt.rows(selected_rows).select();
67-
55+
DataTable.set_selected_rows(dt, model.get('selected_rows'));
6856
setting_selected_rows_from_model = false;
6957
};
7058

@@ -84,6 +72,7 @@ function render({ model, el }: RenderContext<WidgetModel>) {
8472
}
8573
dt_args['data'] = model.get('data');
8674
dt = new DataTable(table, dt_args);
75+
dt.filtered_row_count = model.get('filtered_row_count');
8776
}
8877
create_table();
8978
set_selected_rows_from_model();
@@ -98,17 +87,7 @@ function render({ model, el }: RenderContext<WidgetModel>) {
9887
if (setting_selected_rows_from_model)
9988
return;
10089

101-
let selected_rows = Array.from(dt.rows({ selected: true }).indexes());
102-
103-
// Here the selected rows are for the datatable.
104-
// We convert them back to the full table
105-
let full_row_count = model.get('full_row_count');
106-
let data_row_count = model.get('data').length;
107-
let bottom_half = data_row_count / 2;
108-
selected_rows = Array.from(selected_rows.map(
109-
i => (i < bottom_half ? i : i + full_row_count - data_row_count)));
110-
111-
model.set('selected_rows', selected_rows);
90+
model.set('selected_rows', DataTable.get_selected_rows(dt));
11291
model.save_changes();
11392
};
11493

0 commit comments

Comments
 (0)