feat: total price and products count display for deals
This commit is contained in:
@ -12,7 +12,7 @@ type Props = {
|
||||
|
||||
const DealCard = ({ deal }: Props) => {
|
||||
const { selectedProject, modulesSet } = useProjectsContext();
|
||||
const { dealsCrud } = useDealsContext();
|
||||
const { dealsCrud, refetchDeals } = useDealsContext();
|
||||
const { openDrawer } = useDrawersContext();
|
||||
|
||||
const onClick = () => {
|
||||
@ -24,6 +24,7 @@ const DealCard = ({ deal }: Props) => {
|
||||
onDelete: dealsCrud.onDelete,
|
||||
project: selectedProject,
|
||||
},
|
||||
onClose: refetchDeals,
|
||||
});
|
||||
};
|
||||
|
||||
@ -51,9 +52,14 @@ const DealCard = ({ deal }: Props) => {
|
||||
{modulesSet.has(ModuleNames.CLIENTS) && (
|
||||
<Text>{deal.client?.name}</Text>
|
||||
)}
|
||||
<Text>Wb электросталь</Text>
|
||||
<Text>19 000 руб.</Text>
|
||||
<Text>130 тов.</Text>
|
||||
{modulesSet.has(ModuleNames.FULFILLMENT_BASE) && (
|
||||
<>
|
||||
<Text key={"price"}>{deal.totalPrice} руб.</Text>
|
||||
<Text key={"count"}>
|
||||
{deal.productsQuantity} тов.
|
||||
</Text>
|
||||
</>
|
||||
)}
|
||||
</Stack>
|
||||
<Group gap={"xs"}>
|
||||
<Pill className={styles["first-tag"]}>Срочно</Pill>
|
||||
|
||||
@ -11,9 +11,16 @@ import { DealSchema } from "@/lib/client";
|
||||
|
||||
const DealsTable: FC = () => {
|
||||
const isMobile = useIsMobile();
|
||||
const { selectedProject } = useProjectsContext();
|
||||
const { deals, paginationInfo, page, setPage, sortingForm, dealsCrud } =
|
||||
useDealsContext();
|
||||
const { selectedProject, modulesSet } = useProjectsContext();
|
||||
const {
|
||||
deals,
|
||||
paginationInfo,
|
||||
page,
|
||||
setPage,
|
||||
sortingForm,
|
||||
dealsCrud,
|
||||
refetchDeals,
|
||||
} = useDealsContext();
|
||||
const { openDrawer } = useDrawersContext();
|
||||
|
||||
const onEditClick = useCallback(
|
||||
@ -26,12 +33,13 @@ const DealsTable: FC = () => {
|
||||
onDelete: dealsCrud.onDelete,
|
||||
project: selectedProject,
|
||||
},
|
||||
onClose: refetchDeals,
|
||||
});
|
||||
},
|
||||
[openDrawer, dealsCrud]
|
||||
);
|
||||
|
||||
const columns = useDealsTableColumns({ onEditClick });
|
||||
const columns = useDealsTableColumns({ onEditClick, modulesSet });
|
||||
|
||||
return (
|
||||
<Stack
|
||||
|
||||
@ -4,13 +4,15 @@ import { DataTableColumn } from "mantine-datatable";
|
||||
import ActionIconWithTip from "@/components/ui/ActionIconWithTip/ActionIconWithTip";
|
||||
import useIsMobile from "@/hooks/utils/useIsMobile";
|
||||
import { DealSchema } from "@/lib/client";
|
||||
import { ModuleNames } from "@/modules/modules";
|
||||
import { utcDateTimeToLocalString } from "@/utils/datetime";
|
||||
|
||||
type Props = {
|
||||
onEditClick: (deal: DealSchema) => void;
|
||||
modulesSet: Set<ModuleNames>;
|
||||
};
|
||||
|
||||
const useDealsTableColumns = ({ onEditClick }: Props) => {
|
||||
const useDealsTableColumns = ({ onEditClick, modulesSet }: Props) => {
|
||||
const isMobile = useIsMobile();
|
||||
|
||||
return useMemo(
|
||||
@ -35,19 +37,30 @@ const useDealsTableColumns = ({ onEditClick }: Props) => {
|
||||
accessor: "id",
|
||||
title: isMobile ? "№" : "Номер",
|
||||
sortable: true,
|
||||
width: "20%",
|
||||
},
|
||||
{
|
||||
accessor: "name",
|
||||
title: "Название",
|
||||
width: "45%",
|
||||
},
|
||||
{
|
||||
title: "Дата создания",
|
||||
accessor: "createdAt",
|
||||
render: deal => utcDateTimeToLocalString(deal.createdAt),
|
||||
sortable: true,
|
||||
width: "35%",
|
||||
},
|
||||
{
|
||||
title: "Клиент",
|
||||
accessor: "client.name",
|
||||
hidden: !modulesSet.has(ModuleNames.CLIENTS),
|
||||
},
|
||||
{
|
||||
title: "Общая стоимость",
|
||||
accessor: "totalPrice",
|
||||
render: deal =>
|
||||
deal.totalPrice
|
||||
? `${deal.totalPrice.toLocaleString("ru")}₽`
|
||||
: "0₽",
|
||||
hidden: !modulesSet.has(ModuleNames.FULFILLMENT_BASE),
|
||||
},
|
||||
] as DataTableColumn<DealSchema>[],
|
||||
[onEditClick]
|
||||
|
||||
Reference in New Issue
Block a user