CalorieCalculatorJS
116 строк · 5.4 Кб
1import {2caloriesGoalDisplay,3filterInput,4productListContent,5selectedProductsContainer,6sortDirection,7sortProductListBtn,8storage,9totalCaloriesDisplay
10} from "../variables.js";11import {handleDragStart} from "./dragAndDropFunctions.js";12import currentDate from "../utils/currentDate.js";13import removeSelectedProduct from "./removeSelectedProduct.js";14import {checkDailyCaloriesLimit} from "./ProductManager.js";15import {displayChart} from "./chart.js";16
17// Отображение списка продуктов с учетом фильтрации и сортировки
18export const displayProducts = () => {19// Получение значения фильтра по имени20const filterByName = filterInput.value.toLowerCase();21// Загрузка сохраненных продуктов из localStorage22const products = JSON.parse(localStorage.getItem(storage.products)) || [];23
24// Фильтрация продуктов по имени25const filteredProducts = products.filter(product =>26product.name.toLowerCase().includes(filterByName)27);28
29// Сортировка продуктов по калориям30const sortedProducts = filteredProducts.sort((a, b) => {31const multiplier = sortDirection.ascending ? 1 : -1;32return multiplier * (a.calories - b.calories);33});34
35// Отображение отфильтрованных и отсортированных продуктов36if (sortedProducts.length === 0) {37productListContent.innerHTML = '<h3>Нет сохраненных продуктов</h3>';38} else {39productListContent.innerHTML = '';40sortedProducts.forEach(product => {41const div = document.createElement('div');42div.className = 'product-card';43div.draggable = true;44div.addEventListener('dragstart', (e) => handleDragStart(e, product.id));45div.innerHTML = `<span class="product-card-title">${product.name}</span>46<span>${product.calories} ккал</span>47<p>${product.description}</p>48<button class="delete-btn" data-product-id="${product.id}">×</button>`;49productListContent.appendChild(div);50});51}52
53// Обновление текста кнопки сортировки54sortProductListBtn.textContent = `Сортировать по калориям ${sortDirection.ascending ? '↑' : '↓'}`;55};56
57// Отображение целевых на текущую дату
58export const displayGoals = () => {59// Получение текущих целей из localStorage60let goals = JSON.parse(localStorage.getItem(storage.goals)) || [];61
62const currentGoals = goals.find(goal => goal.date === currentDate());63if (currentGoals) {64caloriesGoalDisplay.textContent = `Сегодняшняя цель по калориям: ${currentGoals.caloriesGoal} ккал`;65} else {66caloriesGoalDisplay.textContent = 'Цель не задана';67}68};69
70// Рендеринг съеденных продуктов
71export const displaySelectedProducts = () => {72// Получение выбранных продуктов из localStorage73let selectedProducts = JSON.parse(localStorage.getItem(storage.selectedProducts)) || [];74
75// Поиск записи о продуктах для текущей даты76let currentDateEntry = selectedProducts.find(entry => entry.date === currentDate());77
78// Отображение выбранных продуктов79if (currentDateEntry) {80const totalCalories = currentDateEntry.products.reduce((sum, productGroup) => {81return sum + productGroup.reduce((productSum, product) => productSum + parseInt(product.calories), 0);82}, 0);83
84// Отображение выбранных продуктов в списке85selectedProductsContainer.innerHTML = '';86
87currentDateEntry.products.forEach(productGroup => {88productGroup.forEach(product => {89const li = document.createElement('li');90li.className = 'selected-product-card';91
92li.innerHTML = `<span class="selected-product-card-title">${product.name}</span>93<span>${product.calories} ккал</span>94<button class="remove-btn" data-product-id="${product.id}">×</button>`;95
96li.querySelector('.remove-btn').addEventListener('click', () => {97removeSelectedProduct(product.id);98displaySelectedProducts();99});100
101selectedProductsContainer.appendChild(li);102});103});104
105// Отображение общей суммы калорий для текущей даты106totalCaloriesDisplay.textContent = `Сегодняшний итог: ${totalCalories} ккал`;107} else {108// Отображение сообщения, если нет выбранных продуктов109selectedProductsContainer.innerHTML = '<h3>На сегодня нет выбранных продуктов</h3>';110totalCaloriesDisplay.textContent = 'Сумма калорий: 0 ккал';111}112
113// Проверка на превышение дневного лимита калорий и отображение графика114checkDailyCaloriesLimit();115displayChart();116};