Skip to content

Commit a6e76a5

Browse files
committed
fix: small corrections on data widget explorer
1 parent a9b5f7a commit a6e76a5

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Added `label_formatter` to `create_text_widget` to allow users to provide a function to customize the displayed label on top of text spans
66
- Added function-based `options` to let users dynamically choose options to display in the dropdown selectors (or radio)
7+
- Minor fixes to the data widget explorer and quaero demo
78

89
## v1.0.0-beta.6 (2025-02-26)
910

examples/quaero.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,4 +331,4 @@ def make_note_kind_options(note):
331331
port = args.port
332332
save_path = args.save_path
333333
host = args.host
334-
run(app(save_path=True, deduplicate=True)[0], port=port, host=host)
334+
run(app(save_path=save_path, deduplicate=True)[0], port=port, host=host)

metanno/recipes/data_widget_factory.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from pret.react import b as bold
1818
from pret.react import div
1919
from pret.render import Renderable
20+
from pret.store import transact
2021
from pret_joy import (
2122
Autocomplete,
2223
Box,
@@ -276,7 +277,7 @@ def normalize_selected_rows(
276277
continue
277278
normalized.append(idx)
278279
seen.add(idx)
279-
return normalized
280+
return sorted(normalized)
280281

281282

282283
def make_field_label(
@@ -295,6 +296,7 @@ def render_select_field(
295296
key: str,
296297
label: Any,
297298
kind: str,
299+
value: Any,
298300
data: Any,
299301
editable: bool,
300302
options: Sequence[Any],
@@ -381,6 +383,7 @@ def render_text_field(
381383
key: str,
382384
label: Any,
383385
value: Any,
386+
data: Any,
384387
editable: bool,
385388
on_field_change: Callable,
386389
min_input_width: Optional[str],
@@ -391,6 +394,7 @@ def _on_change(event=None):
391394
target = getattr(event, "target", None)
392395
on_field_change(key, getattr(target, "value", ""))
393396

397+
value = data[key]
394398
return FormControl(
395399
FormLabel(make_field_label(label, is_mixed)),
396400
Input(
@@ -409,6 +413,7 @@ def render_boolean_field(
409413
key: str,
410414
label: Any,
411415
value: Any,
416+
data: Any,
412417
editable: bool,
413418
on_field_change: Callable,
414419
min_input_width: Optional[str],
@@ -460,6 +465,7 @@ def render_field(
460465
key,
461466
label,
462467
kind,
468+
value,
463469
current_row,
464470
editable,
465471
options,
@@ -472,6 +478,7 @@ def render_field(
472478
return render_boolean_field(
473479
key,
474480
label,
481+
value,
475482
current_row,
476483
editable,
477484
on_field_change,
@@ -483,6 +490,7 @@ def render_field(
483490
key,
484491
label,
485492
value,
493+
current_row,
486494
editable,
487495
on_field_change,
488496
min_input_width,
@@ -1422,8 +1430,9 @@ def handle_field_change(key, value):
14221430
if not selected_row_indices:
14231431
view_store[current_idx][key] = value
14241432
return
1425-
for idx in selected_row_indices:
1426-
view_store[idx][key] = value
1433+
with transact(view_store):
1434+
for idx in selected_row_indices:
1435+
view_store[idx][key] = value
14271436

14281437
def get_field_state(field_key: str):
14291438
if len(selected_rows_data) == 0:
@@ -2104,12 +2113,14 @@ async def handle_add_span(label):
21042113
def on_delete():
21052114
selected_indices = get_current_selected_span_indices()
21062115
if selected_indices:
2107-
for idx in sorted(selected_indices, reverse=True):
2108-
spans_store.remove(spans_store[idx])
2116+
to_remove = sorted(selected_indices, reverse=True)
2117+
with transact(spans_store):
2118+
for idx in to_remove:
2119+
del spans_store[idx]
21092120
set_selected_span_rows([])
21102121
return
21112122
to_remove = []
2112-
for span in reversed(spans_store):
2123+
for idx, span in enumerate(spans_store):
21132124
if text_primary_key in span and str(span.get(text_primary_key)) != str(
21142125
current_doc_id
21152126
):
@@ -2118,8 +2129,9 @@ def on_delete():
21182129
if not (span["end"] <= r["begin"] or r["end"] <= span["begin"]):
21192130
to_remove.append(span)
21202131
break
2121-
for item in to_remove:
2122-
spans_store.remove(item)
2132+
with transact(spans_store):
2133+
for item in sorted(to_remove, reverse=True):
2134+
del spans_store[item]
21232135
if to_remove:
21242136
set_selected_ranges([])
21252137

0 commit comments

Comments
 (0)