feat: deal product comments
This commit is contained in:
		@@ -8,5 +8,6 @@ export type DealProductSchema = {
 | 
				
			|||||||
    product: ProductSchema;
 | 
					    product: ProductSchema;
 | 
				
			||||||
    services: Array<DealProductServiceSchema>;
 | 
					    services: Array<DealProductServiceSchema>;
 | 
				
			||||||
    quantity: number;
 | 
					    quantity: number;
 | 
				
			||||||
 | 
					    comment?: string;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import { FC } from "react";
 | 
					import { FC, useEffect, useState } from "react";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    DealProductSchema,
 | 
					    DealProductSchema,
 | 
				
			||||||
    DealProductServiceSchema,
 | 
					    DealProductServiceSchema,
 | 
				
			||||||
@@ -6,23 +6,14 @@ import {
 | 
				
			|||||||
    ProductSchema,
 | 
					    ProductSchema,
 | 
				
			||||||
} from "../../../../../../client";
 | 
					} from "../../../../../../client";
 | 
				
			||||||
import styles from "./ProductView.module.css";
 | 
					import styles from "./ProductView.module.css";
 | 
				
			||||||
import {
 | 
					import { ActionIcon, Box, Flex, Image, NumberInput, rem, Text, Textarea, Title, Tooltip } from "@mantine/core";
 | 
				
			||||||
    ActionIcon,
 | 
					 | 
				
			||||||
    Box,
 | 
					 | 
				
			||||||
    Flex,
 | 
					 | 
				
			||||||
    Image,
 | 
					 | 
				
			||||||
    NumberInput,
 | 
					 | 
				
			||||||
    rem,
 | 
					 | 
				
			||||||
    Text,
 | 
					 | 
				
			||||||
    Title,
 | 
					 | 
				
			||||||
    Tooltip,
 | 
					 | 
				
			||||||
} from "@mantine/core";
 | 
					 | 
				
			||||||
import ProductServicesTable from "../ProductServicesTable/ProductServicesTable.tsx";
 | 
					import ProductServicesTable from "../ProductServicesTable/ProductServicesTable.tsx";
 | 
				
			||||||
import { isNil, isNumber } from "lodash";
 | 
					import { isNil, isNumber } from "lodash";
 | 
				
			||||||
import { IconBarcode, IconEdit, IconTrash } from "@tabler/icons-react";
 | 
					import { IconBarcode, IconEdit, IconTrash } from "@tabler/icons-react";
 | 
				
			||||||
import { modals } from "@mantine/modals";
 | 
					import { modals } from "@mantine/modals";
 | 
				
			||||||
import { ServiceType } from "../../../../../../shared/enums/ServiceType.ts";
 | 
					import { ServiceType } from "../../../../../../shared/enums/ServiceType.ts";
 | 
				
			||||||
import useDealProductAndServiceTabState from "../../hooks/useProductAndServiceTabState.tsx";
 | 
					import useDealProductAndServiceTabState from "../../hooks/useProductAndServiceTabState.tsx";
 | 
				
			||||||
 | 
					import { useDebouncedValue } from "@mantine/hooks";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Props = {
 | 
					type Props = {
 | 
				
			||||||
    product: DealProductSchema;
 | 
					    product: DealProductSchema;
 | 
				
			||||||
@@ -53,11 +44,23 @@ const ProductView: FC<Props> = ({
 | 
				
			|||||||
}) => {
 | 
					}) => {
 | 
				
			||||||
    const { dealState } = useDealProductAndServiceTabState();
 | 
					    const { dealState } = useDealProductAndServiceTabState();
 | 
				
			||||||
    const isLocked = Boolean(dealState.deal?.billRequest);
 | 
					    const isLocked = Boolean(dealState.deal?.billRequest);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const [productComment, setProductComment] = useState(product.comment);
 | 
				
			||||||
 | 
					    const [debouncedProductComment] = useDebouncedValue(productComment, 600);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const onDeleteClick = () => {
 | 
					    const onDeleteClick = () => {
 | 
				
			||||||
        if (!onDelete) return;
 | 
					        if (!onDelete) return;
 | 
				
			||||||
        onDelete(product);
 | 
					        onDelete(product);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    useEffect(() => {
 | 
				
			||||||
 | 
					        if (!onChange || debouncedProductComment === product.comment) return;
 | 
				
			||||||
 | 
					        onChange({
 | 
				
			||||||
 | 
					            ...product,
 | 
				
			||||||
 | 
					            comment: debouncedProductComment,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }, [debouncedProductComment]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const onServiceDelete = (item: DealProductServiceSchema) => {
 | 
					    const onServiceDelete = (item: DealProductServiceSchema) => {
 | 
				
			||||||
        if (!onChange) return;
 | 
					        if (!onChange) return;
 | 
				
			||||||
        onChange({
 | 
					        onChange({
 | 
				
			||||||
@@ -167,6 +170,18 @@ const ProductView: FC<Props> = ({
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    placeholder={"Введите количество товара"}
 | 
					                    placeholder={"Введите количество товара"}
 | 
				
			||||||
                />
 | 
					                />
 | 
				
			||||||
 | 
					                <Textarea
 | 
				
			||||||
 | 
					                    mih={rem(140)}
 | 
				
			||||||
 | 
					                    styles={{
 | 
				
			||||||
 | 
					                        wrapper: {height:'90%'},
 | 
				
			||||||
 | 
					                        input: {height:'90%'}
 | 
				
			||||||
 | 
					                    }}
 | 
				
			||||||
 | 
					                    my={rem(10)}
 | 
				
			||||||
 | 
					                    disabled={isLocked}
 | 
				
			||||||
 | 
					                    value={productComment}
 | 
				
			||||||
 | 
					                    onChange={event => setProductComment(event.target.value)}
 | 
				
			||||||
 | 
					                    placeholder={"Введите комментарий для товара"}
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div className={styles["services-container"]}>
 | 
					            <div className={styles["services-container"]}>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user