import { useState } from "react"; import { Button } from "react-bootstrap"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faBookOpen, faCalendarDays, faCamera, faPen, faPenToSquare } from "@fortawesome/free-solid-svg-icons"; import { MealGroup } from "../../../types"; import { MealGroupAction } from "../enums"; import { formatDateString } from "../Utils"; import MealGroupForm from "./MealGroupForm"; import MealGroupRenameForm from "./MealGroupRenameForm"; import MealGroupDays from "./MealGroupDays"; import MealGroupRecipe from "./MealGroupRecipe"; import MealGroupPhotos from "./MealGroupPhotos"; type Props = { group: MealGroup, /** Všechny skupiny — přejmenování podle nich pozná sloučení s jinou. */ groupList: MealGroup[], /** Rozbalená akce; nejvýš jeden řádek seznamu má nějakou otevřenou. */ action?: MealGroupAction, onAction: (action?: MealGroupAction) => void, /** Zavolá se po doplnění, přejmenování nebo změně receptu — seznam se načte znovu a akce zavře. */ onChanged: () => void, /** Obnoví seznam a otevřenou akci nechá — po změně fotek, aby šlo přidávat dál. */ onRefresh: () => void, }; /** Kolik jídel skupiny daný údaj nemá — "u všech", nebo "3 z 5". */ const describeMissing = (missing: number, count: number): string => missing === count ? 'u všech' : `${missing} z ${count}`; /** * Řádek skupiny jídel (stejný název a zdroj) s přehledem chybějících údajů. * Nabízí recept a fotky jídla, doplnění údajů a změnu názvu a zdroje všem * jídlům skupiny a dny, kdy se jídlo jedlo, jako odkazy na přehled dne. */ const MealGroupRow = ({ group, groupList, action, onAction, onChanged, onRefresh }: Readonly) => { const [daysOpen, setDaysOpen] = useState(false); const toggle = (value: MealGroupAction) => onAction(action === value ? undefined : value); return (
{group.thumbnail && ( )}
{group.name}
{group.source && {group.source}} {group.lastDate ? {group.count}× · naposledy {formatDateString(group.lastDate)} : zatím nejedeno} {group.recipe && ( recept )} {group.missingCaloriesCount > 0 && ( bez kalorií {describeMissing(group.missingCaloriesCount, group.count)} )} {group.missingWeightCount > 0 && ( bez gramáže {describeMissing(group.missingWeightCount, group.count)} )} {group.missingNutrientsCount > 0 && ( bez živin {describeMissing(group.missingNutrientsCount, group.count)} )}
{!action && group.count > 0 && ( )} {group.count > 0 && ( )}
{(action === MealGroupAction.DOPLNIT || (!action && daysOpen)) && } {action === MealGroupAction.DOPLNIT && ( onAction(undefined)} /> )} {action === MealGroupAction.RECEPT && ( onAction(undefined)} /> )} {action === MealGroupAction.FOTKY && } {action === MealGroupAction.PREJMENOVAT && ( onAction(undefined)} /> )}
); }; export default MealGroupRow;