import { Box, Typography, Button, useTheme, FormControl, FormLabel, RadioGroup, FormControlLabel, Radio, InputLabel } from "@mui/material"; import MenuItem from "@mui/material/MenuItem"; import Select, { SelectChangeEvent } from "@mui/material/Select"; import { useState } from "react"; import { SERVICE_LIST, ServiceType } from "@root/model/tariff"; import { CustomTextField } from "@root/kitUI/CustomTextField"; import { usePrivilegeStore } from "@root/stores/privileges"; import { AnyDiscount } from "@root/model/cart"; import { nanoid } from "nanoid"; import { addDiscounts } from "@root/stores/discounts"; import { enqueueSnackbar } from "notistack"; const discountTypes = { "Лояльность": "purchasesAmount", "Корзина": "cartPurchasesAmount", "Сервис": "service", "Товар": "privilege", } as const; type DiscountType = keyof typeof discountTypes; export default function CreateDiscount() { const theme = useTheme(); const privileges = usePrivilegeStore(state => state.privileges); const [serviceType, setServiceType] = useState("templategen"); const [discountType, setDiscountType] = useState("Лояльность"); const [discountNameField, setDiscountNameField] = useState(""); const [discountDescription, setDiscountDescription] = 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 handleDiscountTypeChange = (event: React.ChangeEvent) => { setDiscountType(event.target.value as DiscountType); }; const handleServiceTypeChange = (event: SelectChangeEvent) => { setServiceType(event.target.value as ServiceType); }; function handleCreateDiscount() { const purchasesAmount = parseFloat(purchasesAmountField.replace(",", ".")); const discountFactor = 1 - 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 не число"); let discount: AnyDiscount; switch (discountType) { case "Лояльность": { discount = { _id: nanoid(6), name: discountNameField, description: discountDescription, disabled: false, conditionType: "purchasesAmount", condition: { purchasesAmount: purchasesAmount, }, factor: discountFactor, }; break; } case "Корзина": { discount = { _id: nanoid(6), name: discountNameField, description: discountDescription, disabled: false, conditionType: "cartPurchasesAmount", condition: { cartPurchasesAmount: cartPurchasesAmount, }, factor: discountFactor, }; break; } case "Сервис": { discount = { _id: nanoid(6), name: discountNameField, description: discountDescription, disabled: false, conditionType: "service", condition: { service: { id: serviceType, value: discountMinValue, }, }, target: { service: serviceType, factor: discountFactor, }, }; break; } case "Товар": { discount = { _id: nanoid(6), name: discountNameField, description: discountDescription, disabled: false, conditionType: "privilege", condition: { privilege: { id: privilegeIdField, value: discountMinValue, }, }, target: { products: [{ privilegeId: privilegeIdField, factor: discountFactor, }], }, }; break; } } addDiscounts([discount]); } return ( setDiscountNameField(e.target.value)} /> setDiscountDescription(e.target.value)} /> Условия: setDiscountFactorField(e.target.value)} /> Тип скидки {Object.keys(discountTypes).map(type => } label={type} /> )} {discountType === "Лояльность" && setPurchasesAmountField(e.target.value)} /> } {discountType === "Корзина" && setCartPurchasesAmountField(e.target.value)} /> } {discountType === "Сервис" && <> setDiscountMinValueField(e.target.value)} /> } {discountType === "Товар" && <> Привелегия setDiscountMinValueField(e.target.value)} /> } ); }