Skip to content

Commit 2edda7d

Browse files
committed
row_reader RefCell<Rc> to Rc<RefCell>
single selection: implemented deselect
1 parent ede98e5 commit 2edda7d

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/components/table_content.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ where
199199

200200
let loaded_rows = create_rw_signal(LoadedRows::<Row>::new());
201201

202-
row_reader
202+
let _ = row_reader
203203
.get_loaded_rows
204-
.replace(Rc::new(move |index: usize| {
204+
.replace(Box::new(move |index: usize| {
205205
loaded_rows.with(|loaded_rows| loaded_rows[index].clone())
206206
}));
207207

@@ -714,7 +714,11 @@ fn update_selection(
714714
match selection {
715715
Selection::None => {}
716716
Selection::Single(selected_index) => {
717-
selected_index.set(Some(i));
717+
if selected_index.get_untracked() == Some(i) {
718+
selected_index.set(None);
719+
} else {
720+
selected_index.set(Some(i));
721+
}
718722
}
719723
Selection::Multiple(selected_indices) => {
720724
selected_indices.update(|selected_indices| {

src/row_reader.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
use crate::loaded_rows::RowState;
2+
use leptos::logging;
23
use std::cell::RefCell;
34
use std::rc::Rc;
45

56
/// Allows you to read the cached state of rows from inside the table component which handles
67
/// loading and caching automatically.
8+
#[derive(Clone)]
79
pub struct RowReader<Row: Clone> {
8-
pub(crate) get_loaded_rows: RefCell<Rc<dyn Fn(usize) -> RowState<Row>>>,
10+
pub(crate) get_loaded_rows: Rc<RefCell<Box<dyn Fn(usize) -> RowState<Row>>>>,
911
}
1012

1113
impl<Row: Clone> Default for RowReader<Row> {
1214
fn default() -> Self {
1315
Self {
14-
get_loaded_rows: RefCell::new(Rc::new(|_| RowState::Placeholder)),
16+
get_loaded_rows: Rc::new(RefCell::new(Box::new(|_| RowState::Placeholder))),
1517
}
1618
}
1719
}

0 commit comments

Comments
 (0)