@@ -3,6 +3,7 @@ import { ExerciseStats } from '../../../types';
33import { analyzeExerciseTrendCore , ExerciseTrendStatus , summarizeExerciseHistory } from '../../../utils/analysis/exerciseTrend' ;
44import type { ExerciseTrendMode } from '../../../utils/storage/localStorage' ;
55import { analyzeExerciseTrend , type StatusResult } from '../trend/exerciseTrendUi' ;
6+ import type { ExerciseMuscleData } from '../../../utils/muscle/mapping' ;
67
78export type ExerciseListSortMode = 'recent' | 'trend' ;
89
@@ -40,13 +41,15 @@ export interface UseExerciseFiltersProps {
4041 weightUnit : 'kg' | 'lbs' ;
4142 exerciseTrendMode : ExerciseTrendMode ;
4243 effectiveNow : Date ;
44+ muscleDataMap ?: Map < string , ExerciseMuscleData > ;
4345}
4446
4547export function useExerciseFilters ( {
4648 stats,
4749 weightUnit,
4850 exerciseTrendMode,
4951 effectiveNow,
52+ muscleDataMap,
5053} : UseExerciseFiltersProps ) : UseExerciseFiltersReturn {
5154 const [ searchTerm , setSearchTerm ] = useState ( '' ) ;
5255 const [ trendFilter , setTrendFilter ] = useState < ExerciseTrendStatus | null > ( null ) ;
@@ -149,7 +152,16 @@ export function useExerciseFilters({
149152 // Filtered and sorted exercises
150153 const filteredExercises = useMemo ( ( ) =>
151154 stats
152- . filter ( s => s . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) )
155+ . filter ( s => {
156+ const term = searchTerm . toLowerCase ( ) ;
157+ if ( s . name . toLowerCase ( ) . includes ( term ) ) return true ;
158+ const m = muscleDataMap ?. get ( s . name . toLowerCase ( ) ) ;
159+ if ( ! m ) return false ;
160+ return (
161+ ( m . primary_muscle && m . primary_muscle . toLowerCase ( ) . includes ( term ) ) ||
162+ ( m . secondary_muscle && m . secondary_muscle . toLowerCase ( ) . includes ( term ) )
163+ ) ;
164+ } )
153165 . filter ( s => {
154166 if ( ! trendFilter ) return true ;
155167 if ( ! trainingStructure . eligibleNames . has ( s . name ) ) return false ;
0 commit comments