83 lines
3.0 KiB
JavaScript
83 lines
3.0 KiB
JavaScript
import { state, saveState, genId } from '../state.js';
|
|
import { renderMainScreen } from '../render/main-screen.js';
|
|
import { showExerciseDialog } from '../modals/exercise-modal.js';
|
|
import { fetchExerciseHistory } from '../api.js';
|
|
|
|
export function addExercise(workoutId) {
|
|
const w = state.workouts.find(x => x.id === workoutId);
|
|
showExerciseDialog(w.type, (name) => {
|
|
if (!name) return;
|
|
const ex = { id: genId(), name, sets: [] };
|
|
w.exercises.push(ex);
|
|
addToRef(name, w.type);
|
|
state.expandedExerciseId = ex.id;
|
|
saveState();
|
|
renderMainScreen();
|
|
});
|
|
}
|
|
|
|
export function addToRef(name, workoutType = '') {
|
|
const normalizedName = name.trim().toLowerCase();
|
|
const exists = state.exerciseRef.find(
|
|
e => e.name.trim().toLowerCase() === normalizedName
|
|
);
|
|
if (!exists) {
|
|
state.exerciseRef.push({
|
|
id: genId(),
|
|
name: name.trim(),
|
|
workoutType,
|
|
});
|
|
} else if (!exists.workoutType && workoutType) {
|
|
exists.workoutType = workoutType;
|
|
}
|
|
}
|
|
|
|
export function toggleExercise(exerciseId) {
|
|
state.expandedExerciseId =
|
|
state.expandedExerciseId === exerciseId ? null : exerciseId;
|
|
renderMainScreen();
|
|
}
|
|
|
|
export function deleteExercise(workoutId, exerciseId) {
|
|
if (!confirm('Удалить упражнение?')) return;
|
|
const w = state.workouts.find(x => x.id === workoutId);
|
|
w.exercises = w.exercises.filter(e => e.id !== exerciseId);
|
|
saveState();
|
|
renderMainScreen();
|
|
}
|
|
|
|
export async function getExerciseHistory(exerciseName) {
|
|
// Пытаемся получить с бэкенда
|
|
try {
|
|
const history = await fetchExerciseHistory(exerciseName, state.currentClientId);
|
|
if (history && history.length > 0) {
|
|
return history.map(h => ({
|
|
date: h.date,
|
|
sets: [{ // Адаптируем формат бэкенда под формат фронта
|
|
isDropset: h.is_dropset,
|
|
weight: h.weight,
|
|
reps: h.reps,
|
|
subSets: h.is_dropset ? [{weight: h.weight, reps: h.reps}] : undefined // Упрощение для отображения
|
|
}]
|
|
}));
|
|
}
|
|
} catch (e) {
|
|
console.warn('Не удалось загрузить историю с бэкенда, используем локальную', e);
|
|
}
|
|
|
|
// Fallback на локальные данные
|
|
const normalizedName = exerciseName.trim().toLowerCase();
|
|
const history = [];
|
|
for (const w of state.workouts) {
|
|
for (const ex of w.exercises) {
|
|
if (ex.name.trim().toLowerCase() === normalizedName && ex.sets.length > 0) {
|
|
history.push({ date: w.startTime, sets: ex.sets });
|
|
}
|
|
}
|
|
}
|
|
history.sort((a, b) => new Date(b.date) - new Date(a.date));
|
|
return history.slice(0, 3);
|
|
}
|
|
|
|
window.EL = { addExercise, toggleExercise, deleteExercise };
|