@@ -42,9 +42,10 @@ export function useDepositionGroupedData(
4242 const [ type ] = useActiveDepositionDataType ( )
4343 const { enabled = true } = options
4444
45- // Get selected dataset IDs from filter state
45+ // Get selected dataset IDs and organism names from filter state
4646 const {
4747 ids : { datasets : selectedDatasetIds } ,
48+ sampleAndExperimentConditions : { organismNames : selectedOrganismNames } ,
4849 } = useFilter ( )
4950
5051 const { fetchRunCounts = true , onError, onLoadingChange } = options
@@ -180,13 +181,19 @@ export function useDepositionGroupedData(
180181
181182 // Calculate filtered counts after filtering
182183 const filteredDatasetCount = filteredDatasets . length
183- const filteredOrganismCount = [
184+
185+ const allFilteredOrganismNames = [
184186 ...new Set (
185187 filteredDatasets
186188 . map ( ( dataset ) => dataset . organismName )
187189 . filter ( isDefined ) ,
188190 ) ,
189- ] . length
191+ ]
192+
193+ const filteredOrganismCount = filterOrganismsBySelection (
194+ allFilteredOrganismNames ,
195+ selectedOrganismNames ,
196+ ) . length
190197
191198 // Transform datasets with count data
192199 const datasetsWithCounts : DatasetWithCounts [ ] = filteredDatasets . map (
@@ -204,11 +211,22 @@ export function useDepositionGroupedData(
204211 datasets : datasetsWithCounts ,
205212 organismCounts,
206213 groupBy,
214+ selectedOrganismNames,
207215 } )
208216
217+ // Filter organism counts based on organism filters when in organism grouping mode
218+ const filteredOrganismCounts =
219+ groupBy === GroupByOption . Organism && selectedOrganismNames . length > 0
220+ ? Object . fromEntries (
221+ Object . entries ( organismCounts ) . filter ( ( [ organismName ] ) =>
222+ selectedOrganismNames . includes ( organismName ) ,
223+ ) ,
224+ )
225+ : organismCounts
226+
209227 // Consolidate all count data
210228 const counts : DepositionCounts = {
211- organisms : organismCounts ,
229+ organisms : filteredOrganismCounts ,
212230 annotations : annotationCounts ,
213231 tomograms : tomogramCounts ,
214232 runs : runCounts ,
@@ -237,36 +255,58 @@ export function useDepositionGroupedData(
237255 runCountsQuery . data ,
238256 groupBy ,
239257 selectedDatasetIds ,
258+ selectedOrganismNames ,
240259 ] )
241260
242261 return result
243262}
244263
264+ /**
265+ * Helper function to filter organism names based on selected organism names
266+ */
267+ function filterOrganismsBySelection (
268+ organismNames : string [ ] ,
269+ selectedOrganismNames : string [ ] ,
270+ ) : string [ ] {
271+ return selectedOrganismNames . length > 0
272+ ? organismNames . filter ( ( name ) => selectedOrganismNames . includes ( name ) )
273+ : organismNames
274+ }
275+
245276/**
246277 * Helper function to generate organism data based on grouping configuration
247278 */
248279function generateOrganismData ( {
249280 datasets,
250281 organismCounts,
251282 groupBy,
283+ selectedOrganismNames,
252284} : {
253285 datasets : DatasetWithCounts [ ]
254286 organismCounts : Record < string , number >
255287 groupBy : GroupByOption
288+ selectedOrganismNames : string [ ]
256289} ) : OrganismData [ ] {
257290 // Only generate organism data for organism-grouped views
258291 if ( groupBy !== GroupByOption . Organism ) {
259292 return [ ]
260293 }
261294
262295 // Extract unique organisms from datasets
263- const organismNames = [
296+ const allOrganismNames = [
264297 ...new Set (
265298 datasets . map ( ( dataset ) => dataset . organismName ) . filter ( isDefined ) ,
266299 ) ,
267300 ] . sort ( )
268301
269- return organismNames . map ( ( name ) => {
302+ // Filter organisms based on selected organism names
303+ // If no organism filters are active, return all organisms
304+ const filteredOrganismNames = filterOrganismsBySelection (
305+ allOrganismNames ,
306+ selectedOrganismNames ,
307+ )
308+
309+ return filteredOrganismNames . map ( ( name ) => {
270310 // Count datasets containing this organism
271311 const datasetCount = datasets . filter (
272312 ( dataset ) => dataset . organismName === name ,
0 commit comments