@@ -1805,11 +1805,11 @@ function SessionList({
18051805 const [ projectContext , setProjectContext ] = useState < ContextFile [ ] > ( [ ] ) ;
18061806 const [ loading , setLoading ] = useState ( true ) ;
18071807 const [ contextTab , setContextTab ] = useState < "global" | "project" > ( "project" ) ;
1808- const [ selectMode , setSelectMode ] = useState ( false ) ;
1808+ const [ selectMode , setSelectMode ] = usePersistedState ( "lovcode:sessionSelectMode" , false ) ;
18091809 const [ selectedIds , setSelectedIds ] = useState < Set < string > > ( new Set ( ) ) ;
18101810 const [ exporting , setExporting ] = useState ( false ) ;
18111811 const [ hideEmptySessions , setHideEmptySessions ] = usePersistedState ( "lovcode-hide-empty-sessions" , false ) ;
1812- const [ userPromptsOnly , setUserPromptsOnly ] = useState ( false ) ;
1812+ const [ userPromptsOnly , setUserPromptsOnly ] = usePersistedState ( "lovcode:userPromptsOnly" , false ) ;
18131813
18141814 const filteredSessions = hideEmptySessions ? sessions . filter ( s => s . message_count > 0 ) : sessions ;
18151815
@@ -2193,8 +2193,8 @@ function ExportDialog({ open, onOpenChange, messages, processContent, defaultNam
21932193
21942194 < div className = "flex-1 overflow-auto min-h-0 mt-4" >
21952195 < div className = "text-xs text-muted mb-2" > Preview</ div >
2196- < div className = "bg-card-alt rounded-lg p-4 text-sm text-ink overflow-auto max-h-[300px] font-mono whitespace-pre-wrap" >
2197- { preview . slice ( 0 , 2000 ) } { preview . length > 2000 && '...' }
2196+ < div className = "bg-card-alt rounded-lg p-4 text-sm text-ink overflow-auto font-mono whitespace-pre-wrap" >
2197+ { preview . slice ( 0 , 5000 ) } { preview . length > 5000 && '...' }
21982198 </ div >
21992199 </ div >
22002200
@@ -2231,7 +2231,8 @@ function MessageView({
22312231 const [ markdownPreview , setMarkdownPreview ] = usePersistedState ( "lovcode:markdownPreview" , false ) ;
22322232 const [ hideIntermediate , setHideIntermediate ] = usePersistedState ( "lovcode:hideIntermediate" , false ) ;
22332233 const [ selectedIds , setSelectedIds ] = useState < Set < string > > ( new Set ( ) ) ;
2234- const [ selectMode , setSelectMode ] = useState ( false ) ;
2234+ const [ selectMode , setSelectMode ] = usePersistedState ( "lovcode:selectMode" , false ) ;
2235+ const [ selectPreset , setSelectPreset ] = usePersistedState < "all" | "user" | "none" > ( "lovcode:selectPreset" , "all" ) ;
22352236
22362237 useEffect ( ( ) => {
22372238 invoke < Message [ ] > ( "get_session_messages" , { projectId, sessionId } )
@@ -2247,6 +2248,18 @@ function MessageView({
22472248 ? messages . filter ( m => ! m . is_meta && ! m . is_tool )
22482249 : messages ;
22492250
2251+ // Auto-apply selection preset when messages load or filter changes
2252+ useEffect ( ( ) => {
2253+ if ( ! selectMode || filteredMessages . length === 0 ) return ;
2254+ if ( selectPreset === "all" ) {
2255+ setSelectedIds ( new Set ( filteredMessages . map ( m => m . uuid ) ) ) ;
2256+ } else if ( selectPreset === "user" ) {
2257+ setSelectedIds ( new Set ( filteredMessages . filter ( m => m . role === "user" ) . map ( m => m . uuid ) ) ) ;
2258+ } else {
2259+ setSelectedIds ( new Set ( ) ) ;
2260+ }
2261+ } , [ filteredMessages , selectMode , selectPreset ] ) ;
2262+
22502263 const toggleSelect = ( uuid : string ) => {
22512264 setSelectedIds ( prev => {
22522265 const next = new Set ( prev ) ;
@@ -2257,15 +2270,15 @@ function MessageView({
22572270 } ;
22582271
22592272 const selectAll = ( ) => {
2260- setSelectedIds ( new Set ( filteredMessages . map ( m => m . uuid ) ) ) ;
2273+ setSelectPreset ( "all" ) ;
22612274 } ;
22622275
22632276 const selectUserOnly = ( ) => {
2264- setSelectedIds ( new Set ( filteredMessages . filter ( m => m . role === "user" ) . map ( m => m . uuid ) ) ) ;
2277+ setSelectPreset ( "user" ) ;
22652278 } ;
22662279
22672280 const deselectAll = ( ) => {
2268- setSelectedIds ( new Set ( ) ) ;
2281+ setSelectPreset ( "none" ) ;
22692282 } ;
22702283
22712284 const getExportMessages = ( ) => {
@@ -2328,19 +2341,19 @@ function MessageView({
23282341 < div className = "flex items-center gap-2 mt-3" >
23292342 < button
23302343 onClick = { selectAll }
2331- className = " text-xs px-2 py-1 rounded bg-card-alt hover:bg-border text-muted hover:text-ink transition-colors"
2344+ className = { ` text-xs px-2 py-1 rounded transition-colors ${ selectPreset === "all" ? " bg-primary text-primary-foreground" : "bg- card-alt hover:bg-border text-muted hover:text-ink" } ` }
23322345 >
23332346 All
23342347 </ button >
23352348 < button
23362349 onClick = { selectUserOnly }
2337- className = " text-xs px-2 py-1 rounded bg-card-alt hover:bg-border text-muted hover:text-ink transition-colors"
2350+ className = { ` text-xs px-2 py-1 rounded transition-colors ${ selectPreset === "user" ? " bg-primary text-primary-foreground" : "bg- card-alt hover:bg-border text-muted hover:text-ink" } ` }
23382351 >
23392352 User
23402353 </ button >
23412354 < button
23422355 onClick = { deselectAll }
2343- className = " text-xs px-2 py-1 rounded bg-card-alt hover:bg-border text-muted hover:text-ink transition-colors"
2356+ className = { ` text-xs px-2 py-1 rounded transition-colors ${ selectPreset === "none" ? " bg-primary text-primary-foreground" : "bg- card-alt hover:bg-border text-muted hover:text-ink" } ` }
23442357 >
23452358 None
23462359 </ button >
0 commit comments