@@ -22,6 +22,7 @@ interface ISpoolCollapsed extends ISpool {
2222 "filament.material" ?: string ;
2323}
2424
25+ // Flatten filament details so shared table helpers can sort and filter them like top-level spool fields.
2526function collapseSpool ( element : ISpool ) : ISpoolCollapsed {
2627 let filament_name : string ;
2728 if ( element . filament . vendor && "name" in element . filament . vendor ) {
@@ -37,6 +38,7 @@ function collapseSpool(element: ISpool): ISpoolCollapsed {
3738 } ;
3839}
3940
41+ // Keep spool picking self-contained: the modal owns selection state and only returns ids once the user confirms.
4042const SpoolSelectModal = ( { description, initialSelectedIds, onExport, onPrint } : Props ) => {
4143 const [ selectedItems , setSelectedItems ] = useState < number [ ] > ( initialSelectedIds ?? [ ] ) ;
4244 const [ showArchived , setShowArchived ] = useState ( false ) ;
@@ -85,7 +87,7 @@ const SpoolSelectModal = ({ description, initialSelectedIds, onExport, onPrint }
8587 [ tableProps . dataSource ] ,
8688 ) ;
8789
88- // Function to add/remove all filtered items from selected items
90+ // Bulk toggles apply to the rows currently loaded in the modal so the action matches the visible table.
8991 const selectUnselectFiltered = ( select : boolean ) => {
9092 setSelectedItems ( ( prevSelected ) => {
9193 const nextSelected = new Set ( prevSelected ) ;
@@ -100,14 +102,12 @@ const SpoolSelectModal = ({ description, initialSelectedIds, onExport, onPrint }
100102 } ) ;
101103 } ;
102104
103- // Handler for selecting/unselecting individual items
104105 const handleSelectItem = ( item : number ) => {
105106 setSelectedItems ( ( prevSelected ) =>
106107 prevSelected . includes ( item ) ? prevSelected . filter ( ( selected ) => selected !== item ) : [ ...prevSelected , item ] ,
107108 ) ;
108109 } ;
109110
110- // State for the select/unselect all checkbox
111111 const isAllFilteredSelected = dataSource . every ( ( spool ) => selectedItems . includes ( spool . id ) ) ;
112112 const isSomeButNotAllFilteredSelected =
113113 dataSource . some ( ( spool ) => selectedItems . includes ( spool . id ) ) && ! isAllFilteredSelected ;
@@ -189,7 +189,7 @@ const SpoolSelectModal = ({ description, initialSelectedIds, onExport, onPrint }
189189 onChange = { ( e ) => {
190190 setShowArchived ( e . target . checked ) ;
191191 if ( ! e . target . checked ) {
192- // Remove archived spools from selected items
192+ // Hidden archived rows should not linger in the selection once the toggle is turned back off.
193193 setSelectedItems ( ( prevSelected ) =>
194194 prevSelected . filter (
195195 ( selected ) => dataSource . find ( ( spool ) => spool . id === selected ) ?. archived !== true ,
0 commit comments