From cc39d13b1c6c65f5da2089d22872e9c23a71c1f3 Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Mon, 12 May 2025 00:42:49 +0400 Subject: [PATCH] fix: modal for place qr code cards, deal services editing --- src/modals/modals.ts | 2 + .../CardServicesTable/CardServicesTable.tsx | 3 +- .../place/components/PlaceActions.tsx | 9 +--- .../place/modals/SelectPlaceQrType.tsx | 46 +++++++++++++++++++ .../WarehouseManagementTabContext.tsx | 17 ++++--- 5 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 src/pages/AdminPage/tabs/WarehouseManagement/place/modals/SelectPlaceQrType.tsx diff --git a/src/modals/modals.ts b/src/modals/modals.ts index bf78175..4549cd1 100644 --- a/src/modals/modals.ts +++ b/src/modals/modals.ts @@ -44,6 +44,7 @@ import CreateProjectModal import CardTagModal from "../pages/CardsPage/drawers/ProjectEditDrawer/tabs/Tags/modals/CardTagModal.tsx"; import PlaceTypeModal from "../pages/AdminPage/tabs/WarehouseManagement/placeType/modals/PlaceTypeModal.tsx"; import PlaceModal from "../pages/AdminPage/tabs/WarehouseManagement/place/modals/PlaceModal.tsx"; +import SelectPlaceQrType from "../pages/AdminPage/tabs/WarehouseManagement/place/modals/SelectPlaceQrType.tsx"; export const modals = { enterDeadline: EnterDeadlineModal, @@ -86,4 +87,5 @@ export const modals = { cardTagModal: CardTagModal, placeTypeModal: PlaceTypeModal, placeModal: PlaceModal, + selectPlaceQrType: SelectPlaceQrType, }; diff --git a/src/modules/cardModules/cardEditorTabs/ProductAndServiceTab/components/CardServicesTable/CardServicesTable.tsx b/src/modules/cardModules/cardEditorTabs/ProductAndServiceTab/components/CardServicesTable/CardServicesTable.tsx index 51a85ff..9359a0b 100644 --- a/src/modules/cardModules/cardEditorTabs/ProductAndServiceTab/components/CardServicesTable/CardServicesTable.tsx +++ b/src/modules/cardModules/cardEditorTabs/ProductAndServiceTab/components/CardServicesTable/CardServicesTable.tsx @@ -12,6 +12,7 @@ import { RootState } from "../../../../../../redux/store.ts"; import useCardProductAndServiceTabState from "../../hooks/useProductAndServiceTabState.tsx"; import LockCheckbox from "../../../../../../components/LockCheckbox/LockCheckbox.tsx"; import { useDebouncedCallback } from "@mantine/hooks"; +import { isDealLocked } from "../../../../../../pages/CardsPage/utils/isDealPaid.ts"; type RestProps = { onKitAdd?: (kit: GetServiceKitSchema) => void; @@ -31,7 +32,7 @@ const CardServicesTable: FC = ({ const authState = useSelector((state: RootState) => state.auth); const { cardState } = useCardProductAndServiceTabState(); - const isLocked = Boolean(cardState.card?.billRequests) || Boolean(cardState.card?.group?.billRequests); + const isLocked = isDealLocked(cardState.card); const [currentService, setCurrentService] = useState< CardServiceSchema | undefined diff --git a/src/pages/AdminPage/tabs/WarehouseManagement/place/components/PlaceActions.tsx b/src/pages/AdminPage/tabs/WarehouseManagement/place/components/PlaceActions.tsx index 01ba4b3..3ac0dac 100644 --- a/src/pages/AdminPage/tabs/WarehouseManagement/place/components/PlaceActions.tsx +++ b/src/pages/AdminPage/tabs/WarehouseManagement/place/components/PlaceActions.tsx @@ -1,5 +1,5 @@ import { PlaceSchema } from "../../../../../../client"; -import { IconBoxAlignBottom, IconPlaylistAdd, IconQrcode, IconTrash } from "@tabler/icons-react"; +import { IconPlaylistAdd, IconQrcode, IconTrash } from "@tabler/icons-react"; import { ActionIcon, Flex, Tooltip } from "@mantine/core"; import React, { ReactNode } from "react"; import { useWarehouseManagementTabContext } from "../../placeType/contexts/WarehouseManagementTabContext.tsx"; @@ -37,14 +37,9 @@ const PlaceActions = ({ place }: Props) => { const actions = [ getAction( "Распечатать QR-код", - () => generateQrCode(place, false), + () => generateQrCode(place), , ), - getAction( - "Распечатать QR-код ", - () => generateQrCode(place, true), - , - ), getAction( "Добавить", () => onCreatePlace(place), diff --git a/src/pages/AdminPage/tabs/WarehouseManagement/place/modals/SelectPlaceQrType.tsx b/src/pages/AdminPage/tabs/WarehouseManagement/place/modals/SelectPlaceQrType.tsx new file mode 100644 index 0000000..8ae3f99 --- /dev/null +++ b/src/pages/AdminPage/tabs/WarehouseManagement/place/modals/SelectPlaceQrType.tsx @@ -0,0 +1,46 @@ +import { ContextModalProps } from "@mantine/modals"; +import { PlaceSchema } from "../../../../../../client"; +import { Stack } from "@mantine/core"; +import InlineButton from "../../../../../../components/InlineButton/InlineButton.tsx"; +import { IconBoxAlignBottom, IconQrcode } from "@tabler/icons-react"; + +type Props = { + place: PlaceSchema; +} + + +const SelectPlaceQrType = ({ + context, + id, + innerProps, + }: ContextModalProps) => { + const { place } = innerProps; + + const closeModal = () => { + context.closeContextModal(id); + }; + + const generateQrCode = (isShort: boolean) => { + const pdfWindow = window.open( + `${import.meta.env.VITE_API_URL}/wms/place/pdf/${place.id}/${isShort}`, + ); + if (!pdfWindow) return; + pdfWindow.print(); + closeModal(); + }; + + return ( + + generateQrCode(false)}> + + Целая наклейка + + generateQrCode(true)}> + + Половина наклейки + + + ); +}; + +export default SelectPlaceQrType; diff --git a/src/pages/AdminPage/tabs/WarehouseManagement/placeType/contexts/WarehouseManagementTabContext.tsx b/src/pages/AdminPage/tabs/WarehouseManagement/placeType/contexts/WarehouseManagementTabContext.tsx index ef56aaa..413c206 100644 --- a/src/pages/AdminPage/tabs/WarehouseManagement/placeType/contexts/WarehouseManagementTabContext.tsx +++ b/src/pages/AdminPage/tabs/WarehouseManagement/placeType/contexts/WarehouseManagementTabContext.tsx @@ -14,7 +14,7 @@ type WarehouseManagementTabContextState = { placeCrud: PlaceCrud; places: PlaceSchema[]; onCreatePlace: (place?: PlaceSchema) => void; - generateQrCode: (place: PlaceSchema, isShort: boolean) => void; + generateQrCode: (place: PlaceSchema) => void; }; const WarehouseManagementTabContext = createContext( @@ -59,12 +59,15 @@ const useWarehouseManagementTabContextState = () => { .catch(err => console.log(err)); }; - const generateQrCode = (place: PlaceSchema, isShort: boolean) => { - const pdfWindow = window.open( - `${import.meta.env.VITE_API_URL}/wms/place/pdf/${place.id}/${isShort}`, - ); - if (!pdfWindow) return; - pdfWindow.print(); + const generateQrCode = (place: PlaceSchema) => { + modals.openContextModal({ + modal: "selectPlaceQrType", + withCloseButton: false, + centered: true, + innerProps: { + place, + }, + }); }; return {