import { useMemo, useState } from "react"; import type { ActivityCategory, CatalogEntity, CatalogKind, Workout } from "../../types"; import { categoryLabels, measurementLabels } from "../catalog/meta"; import { useCatalog } from "../catalog/hooks"; const categoryTabs: Array = ["all", "chest", "back", "legs", "shoulders", "arms", "core", "cardio"]; function categoryTabLabel(category: ActivityCategory | "all" | "arms") { if (category === "all") return "Все"; if (category === "arms") return "Руки"; return categoryLabels[category]; } export function AddExerciseDrawer({ open, token, workout, onClose, onAdd, pending, }: { open: boolean; token: string; workout: Workout; onClose: () => void; onAdd: (entity: CatalogEntity, kind: CatalogKind, closeAfter: boolean) => void; pending?: boolean; }) { const [kind, setKind] = useState("exercise"); const [search, setSearch] = useState(""); const [category, setCategory] = useState("all"); const { exercises, machines } = useCatalog(token); const addedIds = useMemo(() => { const ids = new Set(); workout.items.forEach((item) => { if (item.activity_source_id) ids.add(item.activity_source_id); if (item.exercise_id) ids.add(item.exercise_id); if (item.equipment_id) ids.add(item.equipment_id); }); return ids; }, [workout.items]); const list = useMemo(() => { const source = kind === "exercise" ? exercises.data ?? [] : machines.data ?? []; const needle = search.trim().toLowerCase(); return source.filter((entity) => { if (category === "arms" && entity.category !== "biceps" && entity.category !== "triceps") return false; if (category !== "all" && category !== "arms" && entity.category !== category) return false; if (!needle) return true; return `${entity.title} ${entity.description ?? ""}`.toLowerCase().includes(needle); }); }, [category, kind, search, exercises.data, machines.data]); if (!open) return null; return (
); }