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(value: number | number[]) { 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} ); }