@@ -6,6 +6,7 @@ import { DockviewWorkspace, DockviewProvider } from "@/components/DockviewWorksp
66import { useStore } from "@/store/useStore" ;
77import type { Sample } from "@/types" ;
88import {
9+ ApiError ,
910 fetchDataset ,
1011 fetchSamples ,
1112 fetchSamplesBatch ,
@@ -35,12 +36,22 @@ export default function Home() {
3536 lassoTotal,
3637 lassoIsLoading,
3738 setLassoResults,
39+ clearLassoSelection,
3840 labelFilter,
3941 } = useStore ( ) ;
4042
4143 const [ loadingMore , setLoadingMore ] = useState ( false ) ;
4244 const labelFilterRef = useRef < string | null > ( labelFilter ?? null ) ;
4345
46+ const refreshDatasetMetadata = useCallback ( async ( ) => {
47+ try {
48+ const dataset = await fetchDataset ( ) ;
49+ setDatasetInfo ( dataset ) ;
50+ } catch ( refreshErr ) {
51+ console . error ( "Failed to refresh dataset metadata:" , refreshErr ) ;
52+ }
53+ } , [ setDatasetInfo ] ) ;
54+
4455 // Initial data load - runs once on mount
4556 // Store setters are stable and don't need to be in deps
4657 useEffect ( ( ) => {
@@ -74,7 +85,6 @@ export default function Home() {
7485 const fetchSelectedSamples = async ( ) => {
7586 if ( isLassoSelection ) return ;
7687 if ( selectedIds . size === 0 ) return ;
77- if ( selectionSource === "label" ) return ;
7888
7989 // Find IDs that are selected but not in our samples array
8090 const loadedIds = new Set ( samples . map ( ( s ) => s . id ) ) ;
@@ -131,6 +141,10 @@ export default function Home() {
131141 const res = await fetchLassoSelection ( {
132142 layoutKey : lassoQuery . layoutKey ,
133143 polygon : lassoQuery . polygon ,
144+ labelFilter : lassoQuery . labelFilter ?? undefined ,
145+ view3d : lassoQuery . view3d ,
146+ viewportWidth : lassoQuery . viewportWidth ,
147+ viewportHeight : lassoQuery . viewportHeight ,
134148 offset : 0 ,
135149 limit : SAMPLES_PER_PAGE ,
136150 signal : abort . signal ,
@@ -139,6 +153,18 @@ export default function Home() {
139153 setLassoResults ( res . samples , res . total , false ) ;
140154 } catch ( err ) {
141155 if ( err instanceof DOMException && err . name === "AbortError" ) return ;
156+
157+ if (
158+ err instanceof ApiError &&
159+ err . status === 404 &&
160+ typeof err . detail === "string" &&
161+ err . detail . includes ( "Layout not found" )
162+ ) {
163+ clearLassoSelection ( ) ;
164+ void refreshDatasetMetadata ( ) ;
165+ return ;
166+ }
167+
142168 console . error ( "Failed to fetch lasso selection:" , err ) ;
143169 setLassoResults ( [ ] , 0 , false ) ;
144170 }
@@ -147,7 +173,14 @@ export default function Home() {
147173 run ( ) ;
148174
149175 return ( ) => abort . abort ( ) ;
150- } , [ isLassoSelection , lassoIsLoading , lassoQuery , setLassoResults ] ) ;
176+ } , [
177+ clearLassoSelection ,
178+ isLassoSelection ,
179+ lassoIsLoading ,
180+ lassoQuery ,
181+ refreshDatasetMetadata ,
182+ setLassoResults ,
183+ ] ) ;
151184
152185 // Load more samples
153186 const loadMore = useCallback ( async ( ) => {
@@ -163,11 +196,26 @@ export default function Home() {
163196 const res = await fetchLassoSelection ( {
164197 layoutKey : lassoQuery . layoutKey ,
165198 polygon : lassoQuery . polygon ,
199+ labelFilter : lassoQuery . labelFilter ?? undefined ,
200+ view3d : lassoQuery . view3d ,
201+ viewportWidth : lassoQuery . viewportWidth ,
202+ viewportHeight : lassoQuery . viewportHeight ,
166203 offset : lassoSamples . length ,
167204 limit : SAMPLES_PER_PAGE ,
168205 } ) ;
169206 setLassoResults ( res . samples , res . total , true ) ;
170207 } catch ( err ) {
208+ if (
209+ err instanceof ApiError &&
210+ err . status === 404 &&
211+ typeof err . detail === "string" &&
212+ err . detail . includes ( "Layout not found" )
213+ ) {
214+ clearLassoSelection ( ) ;
215+ void refreshDatasetMetadata ( ) ;
216+ return ;
217+ }
218+
171219 console . error ( "Failed to load more lasso samples:" , err ) ;
172220 } finally {
173221 setLoadingMore ( false ) ;
@@ -194,8 +242,10 @@ export default function Home() {
194242 lassoQuery ,
195243 lassoSamples . length ,
196244 lassoTotal ,
245+ clearLassoSelection ,
197246 samplesLoaded ,
198247 totalSamples ,
248+ refreshDatasetMetadata ,
199249 setLassoResults ,
200250 labelFilter ,
201251 ] ) ;
0 commit comments