import { CardGroupSchema, CardGroupService, CardSummary } from "../../../../client"; import { FC, useEffect, useMemo, useState } from "react"; import CardSummaryItem from "../CardSummaryItem/CardSummaryItem.tsx"; import { Flex, rem, Text, TextInput, useMantineColorScheme } from "@mantine/core"; import { IconGripHorizontal } from "@tabler/icons-react"; import { useDebouncedValue } from "@mantine/hooks"; import { notifications } from "../../../../shared/lib/notifications.ts"; type Props = { cards: CardSummary[]; group: CardGroupSchema; } export const CardGroupView: FC = ({ cards, group }) => { const theme = useMantineColorScheme(); const [name, setName] = useState(group.name || ""); const [debouncedName] = useDebouncedValue(name, 200); const totalPrice = useMemo(() => cards.reduce((acc, card) => acc + card.totalPrice, 0), [cards]); const totalProducts = useMemo(() => cards.reduce((acc, card) => acc + card.totalProducts, 0), [cards]); const updateName = () => { if (debouncedName === group.name) return; CardGroupService.updateCardGroup({ requestBody: { data: { ...group, name: debouncedName, }, }, }).then(response => { if (response.ok) return; setName(group.name || ""); notifications.guess(response.ok, { message: response.message }); }); }; useEffect(() => { updateName(); }, [debouncedName]); return ( setName(event.currentTarget.value)} variant={"unstyled"} /> {cards.map(card => ( ))} Сумма: {totalPrice.toLocaleString("ru-RU")} руб. Всего товаров: {totalProducts.toLocaleString("ru-RU")} шт. ); };