import { FC } from "react"; import { DealService, DealSummary } from "../../../client"; import styles from "./DealSummaryCard.module.css"; import { ActionIcon, Badge, CopyButton, Flex, Image, Indicator, IndicatorProps, Popover, rem, Text, ThemeIcon, Tooltip, } from "@mantine/core"; import { useDealPageContext } from "../../../pages/LeadsPage/contexts/DealPageContext.tsx"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCheck } from "@fortawesome/free-solid-svg-icons"; import { DealStatus } from "../../../shared/enums/DealStatus.ts"; import { IconCheck, IconLayoutGridRemove, IconTrash } from "@tabler/icons-react"; import { useContextMenu } from "mantine-contextmenu"; import useDealSummaryState from "./useDealSummaryState.tsx"; type Props = { dealSummary: DealSummary; color?: string }; const DealSummaryCard: FC = ({ dealSummary, color }) => { const { showContextMenu } = useContextMenu(); const { setSelectedDeal } = useDealPageContext(); const { onDelete, onComplete, onDeleteFromGroup } = useDealSummaryState(); const onDealSummaryClick = () => { DealService.getDealById({ dealId: dealSummary.id }).then(deal => { setSelectedDeal(deal); }); }; const getIndicatorProps = (): IndicatorProps => { if (!dealSummary.deliveryDate) return { disabled: true }; const deliveryDate = new Date(dealSummary.deliveryDate); const currentDate = new Date(); const diff = deliveryDate.getTime() - currentDate.getTime(); const diffDays = Math.ceil(diff / (1000 * 3600 * 24)); if (dealSummary.status < DealStatus.IN_DELIVERY) { if (diffDays <= 2 && diffDays > 1) { return { color: "yellow", }; } if (diffDays <= 1) { return { color: "red", }; } return { disabled: false, }; } return { disabled: true }; }; const isPaid = () => { return dealSummary.billRequest?.paid || dealSummary.group?.billRequest?.paid; } return (
onDeleteFromGroup(dealSummary), title: "Убрать из группы", icon: , }] : [], { key: "complete", onClick: () => onComplete(dealSummary), title: "Завершить", icon: , }, { key: "delete", onClick: () => onDelete(dealSummary), title: "Удалить", icon: , }, ])} onClick={() => onDealSummaryClick()} className={styles["container"]} style={{ backgroundColor: color }} > {dealSummary.clientName} {dealSummary.name} {dealSummary.shipmentWarehouseName || "Склад не указан"} {dealSummary.totalPrice.toLocaleString("ru-RU")} руб,{" "} {dealSummary.totalProducts.toLocaleString("ru-RU")} тов. {dealSummary.deliveryDate && ( Доставка: {(new Date(dealSummary.deliveryDate)).toLocaleDateString("ru-RU")} )} {dealSummary.receivingSlotDate && ( Слот: {(new Date(dealSummary.receivingSlotDate)).toLocaleDateString("ru-RU")} )} {({ copy, copied }) => (
{ e.stopPropagation(); copy(); }} className={styles["flex-item"]}> ID: {dealSummary.id}
ID сделки скопирован
)}
{isPaid() && ( )}
); }; export default DealSummaryCard;