Есть два радиобатона (пока 2 для теста, потом будет больше). Пользователь кликает по одному из них. В соответствии с выбором из заранее сформированного JSON объекта breakfasts в объект docInfo, который обрабатывает плагин PDFmaker должны подставляться соответствующие данные, которые затем после клика по кнопке "Подтвердить выбор" и "Скачать диету" (пока файл открывается в отдельной вкладке) подставляются в PDF-файл. Для этого я пытаюсь подставить переменную mealChoice после выбора value радиобатона в строки типа breakfasts.breakfasts_1[0].variant следующим образом mealChoice.variant. Так как mealChoice, например, после выбора первого радиобатона равен breakfasts.breakfasts_1[0]. Но получаю ошибку Uncaught TypeError: Cannot read property 'variant' of undefined сразу при открытии или перезагрузке страницы.
<div class="dieta">
<div class="first-week">
<h1 class="first-week__title">День 1</h1>
<div class="breakfast">Завтрак</div>
<ul class="meals-list">
<li class="meals__item">Творожные оладьи
<input type="radio" name="breakfasts_1" value="breakfasts_1">
</li>
<li class="meals__item">Овсяноблин с творогом и бананом
<input type="radio" name="breakfasts_1" value="breakfasts_2">
</li>
</ul>
</div>
<button class="dieta-accept" id="dieta-accept">Подтвердить выбор</button>
<button class="dieta-download" id="dieta-download">Скачать диету</button>
</div>
const firstWeekFirstDay = document.getElementsByName('breakfasts_1');
const openPdf = document.getElementById('dieta-download');
const dietaAccept = document.getElementById('dieta-accept');
let mealChoice;
const breakfasts = {
breakfasts_1: [
{
name: 'Творожные оладьи',
variant: 'ВАРИАНТ 1',
type: 'ЗАВТРАК',
ingridients: [
{ first: 'Творог 2% жирности', quantaty: '120 гр' },
{ second: 'Яйцо', quantaty: '1 шт' },
{ third: 'Мука рисовая', quantaty: '40 гр' },
{ fourth: 'Банан', quantaty: '100 гр' },
],
},
{
recipe:
'Творог, яйцо и банан смешать в блендере до однородной текстуры (либо размять вилкой). Добавить муку, перемешать. Выпекать как обычные оладьи с двух сторон на антипригарной сковороде.',
image: 'Картинка',
kbzhu: '405/31/7/57',
},
],
breakfasts_2: [
{
name: 'Овсяноблин с творогом и бананом',
variant: 'ВАРИАНТ 2',
type: 'ЗАВТРАК',
ingridients: [
{ first: 'Овсяные хлопья', quantaty: '40 гр' },
{ second: 'Яйцо ', quantaty: '1 шт' },
{ third: 'Творог 5% жирности', quantaty: '100 гр' },
{ fourth: 'Банан', quantaty: '80 гр' },
],
},
{
recipe:
'Овсяные хлопья измельчить в блендере (можно не измельчать, если у вас мелкие хлопья). Смешать хлопья с яйцом. Получившуюся смесь вылить на сковороду. Обжарить блинчик с двух сторон. Снять со сковороды, помазать творогом, сверху выложить банан, нарезанный кружочками. Сложить блин пополам. ',
image: 'Картинка',
kbzhu: '400/27/12/47',
},
],
};
function radioCheck() {
for (let i = 0; i < firstWeekFirstDay.length; i++) {
if (firstWeekFirstDay[i].checked) {
mealChoice = firstWeekFirstDay[i].value;
mealChoice = 'breakfasts.' + mealChoice + '[0]';
}
}
console.log(mealChoice);
}
dietaAccept.addEventListener('click', radioCheck);
let docInfo = {
info: {
title: 'Гибкая диета',
author: 'BeInShape',
subject: 'Прорамма индивидуального питания',
keywords: 'диета, фитнес, питание',
},
pageSize: 'A4',
pageOrientation: 'landscape',
pageMargins: [55, 55, 55, 60],
header: function (currentPage, pageCount) {
return {
text: currentPage.toString() + 'из' + pageCount,
alignment: 'right',
margin: [0, 30, 10, 50],
};
},
footer: [
{
text: 'Нижний колонтитул',
alignment: 'center'
},
],
content: [
{
style: 'header',
type: 'none',
ul: ['Гибкая программа', '1500 калорий', 'День 1'],
},
{
table: {
widths: [100, 150, 100, 200, '*'],
body: [['Блюдо', 'Ингредиенты', 'Количество', 'Приготовление', 'Фото']],
},
},
{
table: {
widths: ['*'],
body: [
[
{
text: breakfasts.breakfasts_1[0].type,
alignment: 'center',
},
],
],
},
},
{
table: {
widths: ['*'],
body: [
[
{
text: breakfasts.breakfasts_1[0].variant,
},
],
],
},
},
{
table: {
widths: [100, 150, 100, 200, '*'],
body: [
[
breakfasts.breakfasts_1[0].name,
breakfasts.breakfasts_1[0].ingridients[0].first +
' \n ' +
breakfasts.breakfasts_1[0].ingridients[1].second +
' \n ' +
breakfasts.breakfasts_1[0].ingridients[2].third +
' \n ' +
breakfasts.breakfasts_1[0].ingridients[3].fourth,
breakfasts.breakfasts_1[0].ingridients[0].quantaty +
' \n ' +
breakfasts.breakfasts_1[0].ingridients[1].quantaty +
' \n ' +
breakfasts.breakfasts_1[0].ingridients[2].quantaty +
' \n ' +
breakfasts.breakfasts_1[0].ingridients[3].quantaty,
breakfasts.breakfasts_1[1].recipe,
breakfasts.breakfasts_1[1].image,
],
],
},
},
{
table: {
widths: [100, '*'],
body: [
[
{
text: 'КБЖУ',
},
{
text: breakfasts.breakfasts_1[1].kbzhu,
alignment: 'right',
},
],
],
},
},
],
styles: {
header: {
fontSize: 12,
margin: [30, 0, 0, 10],
listStyle: 'none',
},
},
};
openPdf.addEventListener('click', () => {
pdfMake.createPdf(docInfo).open();
});