diff --git a/components/Profile.tsx b/components/Profile.tsx index 919e92f..d57ee72 100644 --- a/components/Profile.tsx +++ b/components/Profile.tsx @@ -46,6 +46,7 @@ const Profile: React.FC = ({ user, onLogout, lang, onLanguageChang const [showArchived, setShowArchived] = useState(false); const [editingExercise, setEditingExercise] = useState(null); const [isCreatingEx, setIsCreatingEx] = useState(false); + const [exerciseNameFilter, setExerciseNameFilter] = useState(''); const exerciseTypeLabels: Record = { [ExerciseType.STRENGTH]: t('type_strength', lang), @@ -282,6 +283,17 @@ const Profile: React.FC = ({ user, onLogout, lang, onLanguageChang {t('create_exercise', lang)} +
+ + setExerciseNameFilter(e.target.value)} + placeholder={t('type_to_filter', lang) || 'Type to filter...'} + className="w-full bg-transparent text-on-surface focus:outline-none" + /> +
+
= ({ user, onLogout, lang, onLanguageChang
{exercises .filter(e => showArchived || !e.isArchived) + .filter(e => e.name.toLowerCase().includes(exerciseNameFilter.toLowerCase())) .sort((a, b) => a.name.localeCompare(b.name)) .map(ex => (
diff --git a/services/i18n.ts b/services/i18n.ts index f765e9e..013f349 100644 --- a/services/i18n.ts +++ b/services/i18n.ts @@ -153,6 +153,8 @@ const translations = { archive: 'Archive', unarchive: 'Unarchive', show_archived: 'Show Archived', + filter_by_name: 'Filter by name', + type_to_filter: 'Type to filter...', profile_saved: 'Profile saved successfully', }, ru: { @@ -300,6 +302,8 @@ const translations = { archive: 'Архив', unarchive: 'Вернуть', show_archived: 'Показать архивные', + filter_by_name: 'Фильтр по названию', + type_to_filter: 'Введите для фильтрации...', profile_saved: 'Профиль успешно сохранен', } };