import { showModal, closeModal, stepperHtml } from './modal-base.js'; import { formatShortDate, formatSet } from '../utils.js'; let _data = {}; let _cb = null; export function showSetDialog(existingSet, history, callback) { _cb = callback; const isEdit = !!existingSet; const isDropset = existingSet?.isDropset || false; let historyHtml = ''; if (history?.length) { const rows = history.map(h => `
${formatShortDate(h.date)} ${h.sets.map(formatSet).join(', ')}
`).join(''); historyHtml = `
📊 Прошлые тренировки
${rows}
`; } showModal(``); _data = { isDropset, rating: existingSet?.rating || 3, subSets: existingSet?.subSets ? JSON.parse(JSON.stringify(existingSet.subSets)) : [], }; if (isDropset) { if (!_data.subSets.length) addSubset(); else renderSubsets(); } rating(_data.rating); } export function toggleDropset() { _data.isDropset = document.getElementById('m-set-dropset').checked; document.getElementById('m-set-normal').classList.toggle('hidden', _data.isDropset); document.getElementById('m-set-dropset-block').classList.toggle('hidden', !_data.isDropset); if (_data.isDropset && !_data.subSets.length) addSubset(); else if (_data.isDropset) renderSubsets(); } export function addSubset() { const last = _data.subSets[_data.subSets.length - 1]; _data.subSets.push({ weight: last?.weight || '', reps: last?.reps || '' }); renderSubsets(); } export function renderSubsets() { document.getElementById('m-subsets-list').innerHTML = _data.subSets.map((s, i) => `
`).join(''); } export function updateSubset(i, field, value) { _data.subSets[i][field] = value; } export function stepSubset(i, field, delta) { const current = parseFloat(_data.subSets[i][field]) || 0; const step = field === 'weight' ? 0.5 : 1; const newVal = Math.max(0, current + delta); _data.subSets[i][field] = parseFloat((Math.round(newVal / step) * step).toFixed(4)); renderSubsets(); // Перерисовываем, чтобы обновить значение в input } export function removeSubset(i) { _data.subSets.splice(i, 1); renderSubsets(); } export function rating(r) { _data.rating = r; document.querySelectorAll('#m-rating-grid .rating-btn').forEach(b => b.classList.toggle('active', +b.dataset.rating === r)); } export function submit() { if (_data.isDropset) { _data.subSets.forEach((s, i) => { const w = document.getElementById(`m-sw-${i}`); const r = document.getElementById(`m-sr-${i}`); if (w) s.weight = w.value; if (r) s.reps = r.value; }); if (!_data.subSets.length) { alert('Добавьте сбрасывание'); return; } closeModal(); _cb?.({ isDropset: true, subSets: _data.subSets.map(s => ({ weight: parseFloat(s.weight)||0, reps: parseInt(s.reps)||0 })), rating: _data.rating }); } else { const w = parseFloat(document.getElementById('m-set-weight').value); const r = parseInt(document.getElementById('m-set-reps').value); if (!w && !r) { alert('Укажите вес и повторения'); return; } closeModal(); _cb?.({ isDropset: false, weight: w||0, reps: r||0, rating: _data.rating }); } } // Обновляем экспорт в window window.SetModal = { toggleDropset, addSubset, removeSubset, rating, submit, updateSubset, stepSubset };