1717from pret .react import b as bold
1818from pret .react import div
1919from pret .render import Renderable
20+ from pret .store import transact
2021from 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
282283def 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