Files
gym-bro/frontend/js/logic/workout.js
T

89 lines
2.4 KiB
JavaScript

import { state, saveState, genId } from '../state.js';
import { renderMainScreen } from '../render/main-screen.js';
import { showEditWorkoutDateDialog } from '../modals/edit-workout-date-modal.js';
import { showClientSelectModal } from '../modals/client-select-modal.js';
export function startWorkout() {
// В режиме тренера — сначала выбираем клиента
if (state.mode === 'trainer') {
showClientSelectModal((clientId) => {
_createWorkout(clientId);
});
} else {
_createWorkout(null);
}
}
function _createWorkout(clientId) {
const w = {
id: genId(),
client_id: clientId,
startTime: new Date().toISOString(),
endTime: null,
type: '',
exercises: [],
cardio: [],
notes: '',
synced: false,
};
state.workouts.unshift(w);
state.expandedWorkoutId = w.id;
saveState();
renderMainScreen();
}
export function finishWorkout(workoutId) {
if (!confirm('Завершить тренировку?')) return;
const w = getWorkout(workoutId);
w.endTime = new Date().toISOString();
saveState();
renderMainScreen();
}
export function deleteWorkout(workoutId) {
if (!confirm('Удалить тренировку полностью?')) return;
state.workouts = state.workouts.filter(w => w.id !== workoutId);
saveState();
renderMainScreen();
}
export function toggleWorkout(workoutId) {
state.expandedWorkoutId =
state.expandedWorkoutId === workoutId ? null : workoutId;
renderMainScreen();
}
export function getWorkout(id) {
return state.workouts.find(w => w.id === id);
}
export function getActiveWorkout() {
return state.workouts.find(w => !w.endTime);
}
export function editWorkoutDate(workoutId) {
const w = getWorkout(workoutId);
if (!w) return;
showEditWorkoutDateDialog(w, (newDates) => {
if (!newDates) return;
w.startTime = newDates.startTime;
w.endTime = newDates.endTime;
saveState();
renderMainScreen();
});
}
export function cancelEmptyWorkout(workoutId) {
if (!confirm('Отменить эту тренировку? Все данные будут удалены.')) return;
deleteWorkout(workoutId);
}
window.WL = {
startWorkout,
finishWorkout,
deleteWorkout,
toggleWorkout,
editWorkoutDate,
cancelEmptyWorkout
};