import { Privilege, PrivilegeValueType, useThrottle } from "@frontend/kitui" import { Box, SliderProps, Typography, useMediaQuery, useTheme } from "@mui/material" import { CustomSlider } from "@root/components/CustomSlider" import NumberInputWithUnitAdornment from "@root/components/NumberInputWithUnitAdornment" import CalendarIcon from "@root/components/icons/CalendarIcon" import PieChartIcon from "@root/components/icons/PieChartIcon" import { useCartStore } from "@root/stores/cart" import { setCustomTariffsUserValue, useCustomTariffsStore } from "@root/stores/customTariffs" import { useDiscountStore } from "@root/stores/discounts" import { useUserStore } from "@root/stores/user" import { getDeclension } from "@root/utils/declension" import { useEffect, useState } from "react" const sliderSettingsByType: Record> = { день: { max: 365 }, шаблон: { max: 5000 }, МБ: { max: 5000 }, } interface Props { privilege: Privilege; } export default function TariffPrivilegeSlider({ privilege }: Props) { const theme = useTheme() const upMd = useMediaQuery(theme.breakpoints.up("md")) const userValue = useCustomTariffsStore((state) => state.userValuesMap[privilege.serviceKey]?.[privilege._id]) ?? 0 const discounts = useDiscountStore((state) => state.discounts) const currentCartTotal = useCartStore((state) => state.cart.priceAfterDiscounts) const purchasesAmount = useUserStore((state) => state.userAccount?.wallet.purchasesAmount) ?? 0 const isUserNko = useUserStore(state => state.userAccount?.status) === "nko" const [value, setValue] = useState(userValue) const throttledValue = useThrottle(value, 200) useEffect( function setStoreValue() { setCustomTariffsUserValue( privilege.serviceKey, privilege._id, throttledValue, discounts, currentCartTotal, purchasesAmount, isUserNko, ) }, [currentCartTotal, discounts, purchasesAmount, privilege._id, privilege.serviceKey, throttledValue, isUserNko] ) function handleSliderChange(measurement: string) { return (value: number | number[]) => { if (value < 30 && measurement === "день") { setValue(0) return } if (Array.isArray(value)) throw new Error("Slider uses multiple values instead of one") setValue(value) } } const quantityText = `${value} ${getDeclension(value, privilege.value)}` const quantityElement = ( {quantityText} или setValue(value)} /> ) const icon = privilege.type === "day" ? ( ) : ( ) return ( {privilege.description} {icon} {privilege.name} {upMd && quantityElement} {!upMd && quantityElement} ) }