f1tness_parser/frontend/js/edit-dialog.js

46 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Bootstrap modal with the training edit form
import { alert, api, h } from './common.js';
import { editForm } from './edit-form.js';
/** "Изменить" button: opens the modal, the page reloads after a save to show fresh data */
export function editButton(trainingId) {
const button = h('button', { type: 'button', class: 'btn btn-sm btn-outline-secondary' }, 'Изменить');
button.addEventListener('click', () => openEditDialog(trainingId, () => location.reload()));
return button;
}
/** Opens the form for the training; onChange() is called after it was saved or deleted. */
export async function openEditDialog(trainingId, onChange) {
const body = h('div', { class: 'modal-body' }, h('div', { class: 'text-muted' }, 'Загрузка…'));
const element = h('div', { class: 'modal fade', tabindex: '-1', 'aria-labelledby': 'edit-modal-title', 'aria-hidden': 'true' },
h('div', { class: 'modal-dialog modal-lg modal-dialog-scrollable' },
h('div', { class: 'modal-content' },
h('div', { class: 'modal-header' },
h('h2', { class: 'modal-title h5', id: 'edit-modal-title' }, 'Редактирование тренировки'),
h('button', { type: 'button', class: 'btn-close', 'data-bs-dismiss': 'modal', 'aria-label': 'Закрыть' })),
body)));
const modal = new bootstrap.Modal(element);
element.addEventListener('hidden.bs.modal', () => {
modal.dispose();
element.remove();
});
document.body.append(element);
modal.show();
try {
const [training, exerciseNames] = await Promise.all([
api(`/trainings/${trainingId}/`),
api('/exercises/'),
]);
body.replaceChildren(editForm(training, exerciseNames, {
onDone: () => { modal.hide(); onChange(); },
onCancel: () => modal.hide(),
}));
} catch (error) {
body.replaceChildren(alert('danger', error.status === 404
? 'Тренировка не найдена.'
: `Не удалось загрузить тренировку: ${error.message}`));
}
}