import { Box, Button, Dialog, FormControl, FormControlLabel, FormLabel, InputLabel, MenuItem, Radio, RadioGroup, Select, SelectChangeEvent, Typography, useTheme } from "@mui/material"; import { patchDiscount } from "@root/api/discounts"; import { CustomTextField } from "@root/kitUI/CustomTextField"; import { DiscountType, discountTypes } from "@root/model/discount"; import { ServiceType, SERVICE_LIST } from "@root/model/tariff"; import { closeEditDiscountDialog, updateDiscount, useDiscountStore } from "@root/stores/discounts"; import { resetPrivilegeArray, usePrivilegeStore } from "@root/stores/privilegesStore"; import { getDiscountTypeFromLayer } from "@root/utils/discount"; import usePrivileges from "@root/utils/hooks/usePrivileges"; import { enqueueSnackbar } from "notistack"; import { useEffect, useState } from "react"; export default function EditDiscountDialog() { const theme = useTheme(); const editDiscountId = useDiscountStore(state => state.editDiscountId); const discounts = useDiscountStore(state => state.discounts); const privileges = usePrivilegeStore(state => state.privileges); const [serviceType, setServiceType] = useState("templategen"); const [discountType, setDiscountType] = useState("purchasesAmount"); const [discountNameField, setDiscountNameField] = useState(""); const [discountDescriptionField, setDiscountDescriptionField] = useState(""); const [privilegeIdField, setPrivilegeIdField] = useState(""); const [discountFactorField, setDiscountFactorField] = useState("0"); const [purchasesAmountField, setPurchasesAmountField] = useState("0"); const [cartPurchasesAmountField, setCartPurchasesAmountField] = useState("0"); const [discountMinValueField, setDiscountMinValueField] = useState("0"); const discount = discounts.find(discount => discount.ID === editDiscountId); usePrivileges({ onNewPrivileges: resetPrivilegeArray }); useEffect(function setDiscountFields() { if (!discount) return; setServiceType(discount.Condition.Group); setDiscountType(getDiscountTypeFromLayer(discount.Layer)); setDiscountNameField(discount.Name); setDiscountDescriptionField(discount.Description); setPrivilegeIdField(discount.Condition.Product); setDiscountFactorField(discount.Target.Factor.toString()); setPurchasesAmountField(discount.Condition.PurchasesAmount.toString()); setCartPurchasesAmountField(discount.Condition.CartPurchasesAmount.toString()); setDiscountMinValueField(discount.Condition.PriceFrom.toString()); }, [discount]); const handleDiscountTypeChange = (event: React.ChangeEvent) => { setDiscountType(event.target.value as DiscountType); }; const handleServiceTypeChange = (event: SelectChangeEvent) => { setServiceType(event.target.value as ServiceType); }; async function handleSaveDiscount() { if (!discount) return; const purchasesAmount = parseFloat(purchasesAmountField.replace(",", ".")); const discountFactor = (100 - parseFloat(discountFactorField.replace(",", "."))) / 100; const cartPurchasesAmount = parseFloat(cartPurchasesAmountField.replace(",", ".")); const discountMinValue = parseFloat(discountMinValueField.replace(",", ".")); if (!isFinite(purchasesAmount)) return enqueueSnackbar("Поле purchasesAmount не число"); if (!isFinite(discountFactor)) return enqueueSnackbar("Поле discountFactor не число"); if (!isFinite(cartPurchasesAmount)) return enqueueSnackbar("Поле cartPurchasesAmount не число"); if (!isFinite(discountMinValue)) return enqueueSnackbar("Поле discountMinValue не число"); if (discountType === "privilege" && !privilegeIdField) return enqueueSnackbar("Привилегия не выбрана"); if (!discountNameField) return enqueueSnackbar("Поле \"Имя\" пустое"); if (!discountDescriptionField) return enqueueSnackbar("Поле \"Описание\" пустое"); if (discountFactor < 0) return enqueueSnackbar("Процент скидки не может быть больше 100"); try { const createdDiscount = await patchDiscount(discount.ID, { cartPurchasesAmount, discountFactor, discountMinValue, purchasesAmount, discountDescription: discountDescriptionField, discountName: discountNameField, startDate: new Date().toISOString(), endDate: new Date(Date.now() + 1000 * 3600 * 24 * 30).toISOString(), serviceType, discountType, privilegeId: privilegeIdField, }); updateDiscount(createdDiscount); closeEditDiscountDialog(); } catch (error) { console.log("Error patching discount", error); enqueueSnackbar("Ошибка при обновлении скидки"); } } return ( setDiscountNameField(e.target.value)} /> setDiscountDescriptionField(e.target.value)} /> Условия: setDiscountFactorField(e.target.value)} /> Тип скидки {Object.keys(discountTypes).map(type => } label={discountTypes[type as DiscountType]} sx={{ color: "white" }} /> )} {discountType === "purchasesAmount" && setPurchasesAmountField(e.target.value)} /> } {discountType === "cartPurchasesAmount" && setCartPurchasesAmountField(e.target.value)} /> } {discountType === "service" && <> setDiscountMinValueField(e.target.value)} /> } {discountType === "privilege" && <> Привилегия setDiscountMinValueField(e.target.value)} /> } ); }