fix: recepty přesnuty k jídlům

feat: přidána podpora fotek
This commit is contained in:
Ondřej Anděl committed 2026-10-12 10:20:12 +02:00
1 parent efed5e6e86
commit e13f7ce8e5
39 files changed
+1266 -511

No files matched your search

@@ -123,7 +123,7 @@ export default function ActivityModal({ isOpen, date, entry, onClose, onSaved }:
? response.data.activities.entries.find(item => item.id === entry.id)
: [...response.data.activities.entries].sort((a, b) => a.createdAt.localeCompare(b.createdAt)).pop();
if (saved) {
// Šablona z jednoho cviku; víc jich jde spojit na stránce Šablony
// Šablona z jednoho cviku; víc jich jde spojit na stránce Tréninky
await createWorkoutTemplateFromActivities({
body: { date: saved.date, name: saved.name, ids: [saved.id] },
});
@@ -6,9 +6,9 @@ import { faPlay, faClockRotateLeft } from "@fortawesome/free-solid-svg-icons";
import {
MealSuggestion, MealTemplate, MealType, addMeal, applyMealTemplate, getMealHistory, getMealTemplates,
} from "../../../../types";
import { MEAL_TYPES_IN_ORDER, MEAL_TYPE_ICONS, MEAL_TYPE_NAMES, TemplateTab } from "../../enums";
import { MEAL_TYPES_IN_ORDER, MEAL_TYPE_ICONS, MEAL_TYPE_NAMES, RecipeFilter } from "../../enums";
import { describeMealSuggestion, describeMealTemplate, getMealKey, normalizeSearch, parseMultiplierInput } from "../../Utils";
import { SABLONY_URL } from "../../routes";
import { JIDLA_URL } from "../../routes";
type Props = {
isOpen: boolean,
@@ -114,7 +114,7 @@ const ApplyMealModal = ({ isOpen, date, onClose, onApplied }: Readonly<Props>) =
<div className="empty-title">Zatím nemáte co vybírat</div>
<p className="empty-description">
Každé zapsané jídlo se tu příště nabídne. Vařená jídla si můžete zapsat jako
recept na stránce Šablony.
recept u jídla na stránce Jídla.
</p>
</div>
)}
@@ -135,7 +135,7 @@ const ApplyMealModal = ({ isOpen, date, onClose, onApplied }: Readonly<Props>) =
<Form.Label>Založit jako</Form.Label>
<Form.Select
value={mealType}
title="Bez volby se jídlo z historie založí jako oběd a recept pod svým chodem"
title="Bez volby se jídlo založí jako oběd"
onChange={event => setMealType(event.target.value as MealType | '')}
>
<option value="">— výchozí —</option>
@@ -218,7 +218,7 @@ const ApplyMealModal = ({ isOpen, date, onClose, onApplied }: Readonly<Props>) =
<Modal.Footer>
<Button
variant="outline-secondary"
onClick={() => { onClose(); navigate(SABLONY_URL, { state: { tab: TemplateTab.RECEPTY } }); }}
onClick={() => { onClose(); navigate(JIDLA_URL, { state: { recipeFilter: RecipeFilter.S_RECEPTEM } }); }}
>
Spravovat recepty
</Button>
@@ -6,7 +6,7 @@ import { faPlay, faLayerGroup, faDumbbell } from "@fortawesome/free-solid-svg-ic
import { DayOverview, WorkoutItemKind, WorkoutTemplate, applyWorkoutTemplate, getWorkoutTemplates } from "../../../../types";
import { ACTIVITY_UNIT_SHORT } from "../../enums";
import { formatCalories, formatQuantityWithSets } from "../../Utils";
import { SABLONY_URL } from "../../routes";
import { TRENINKY_URL } from "../../routes";
type Props = {
isOpen: boolean,
@@ -70,7 +70,7 @@ const ApplyWorkoutModal = ({ isOpen, date, onClose, onApplied }: Readonly<Props>
<div className="empty-state">
<div className="empty-icon"><FontAwesomeIcon icon={faDumbbell} /></div>
<div className="empty-title">Zatím nemáte žádnou šablonu</div>
<p className="empty-description">Vytvořit si ji můžete na stránce Šablony.</p>
<p className="empty-description">Vytvořit si ji můžete na stránce Tréninky.</p>
</div>
)}
@@ -95,7 +95,7 @@ const ApplyWorkoutModal = ({ isOpen, date, onClose, onApplied }: Readonly<Props>
<Modal.Footer>
<Button
variant="outline-secondary"
onClick={() => { onClose(); navigate(SABLONY_URL); }}
onClick={() => { onClose(); navigate(TRENINKY_URL); }}
>
Spravovat šablony
</Button>
@@ -139,7 +139,6 @@ export default function MealModal({ isOpen, date, entry, onClose, onSaved }: Rea
setPickedSuggestion(recipe.name);
setForm(current => mergeSuggestion(current, {
name: recipe.name,
...(recipe.mealType ? { mealType: recipe.mealType } : {}),
source: recipe.source ?? '',
price: formatPriceInput(recipe.price),
pricePer100g: '',