{"version":3,"file":"static/chunks/7113-ce43021aca4411ee.js","mappings":"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","sources":["webpack://_N_E/./src/components/Equipment/internet/DeviceGridItem.tsx","webpack://_N_E/../../packages/shared/src/helpers/truncate.ts","webpack://_N_E/../../packages/ui-react/src/components/List/Characteristics/Characteristics.tsx","webpack://_N_E/../../packages/ui-react/src/components/List/Characteristics/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/List/Characteristics/index.ts","webpack://_N_E/../../packages/ui-react/src/components/costs/DescribedCost/DescribedCost.tsx","webpack://_N_E/../../packages/ui-react/src/components/costs/DescribedCost/styled.tsx","webpack://_N_E/../../packages/ui-react/src/components/costs/DescribedCost/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/typography/formatting/index.tsx","webpack://_N_E/../../packages/ui-react/src/organisms/Card/StaticDesktopRouter/Desktop.tsx","webpack://_N_E/../../packages/ui-react/src/organisms/Card/StaticDesktopRouter/StaticDesktopRouter.tsx","webpack://_N_E/../../packages/ui-react/src/organisms/Card/StaticDesktopRouter/styled.tsx","webpack://_N_E/../../packages/ui-react/src/organisms/Card/StaticDesktopRouter/index.tsx"],"sourcesContent":["import React, { memo, useCallback, useMemo, useState } from 'react';\nimport Router from 'next/router';\n\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\n\nimport { Label } from '@r1-frontend/ui-react/components/label';\nimport StaticDesktopRouter from '@r1-frontend/ui-react/organisms/Card/StaticDesktopRouter/index';\nimport { truncate } from '@r1-frontend/shared/helpers/truncate';\nimport { EPriceTypes } from '@r1-frontend/shared/types/EPriceTypes';\n\nimport { fullBuyEquipAnalyticsBase } from '~/src/analytics';\nimport { calculateEquipmentProps } from '~/src/api/content/shop/helpers';\nimport { SelectPurchaseOptionPopup } from '~/src/components/SelectPurchaseOptionPopup';\nimport { TConfirmParams, TTestDriveData } from '~/src/components/SelectPurchaseOptionPopup/types';\nimport { getPriceOptions } from '~/src/entities/equipment';\nimport { convertShopPrices, EPriceOperationTypes, IPriceOptionProps } from '~/src/entities/price';\nimport { isCreditAbnEnabled } from '~/src/features/work-in-home-ab/components/Description/components/Credit/constants/abnVariants';\nimport { sortFunctionWithRequestIdOnTop } from '~/src/helpers/functions';\n\ninterface IDeviceGridItem {\n item: IEquipment,\n baseRoute: string,\n isCharacteristics: boolean,\n}\n\nconst DeviceGridItem = ({ item, baseRoute, isCharacteristics = true }: IDeviceGridItem) => {\n const [testDriveData, setTestDriveData] = useState();\n const [indexOfSelected, setIndexOfSelected] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n\n const isAbTestCreditEnabled = useMemo(() => isCreditAbnEnabled(), []);\n\n const priceOptions = useMemo(() => {\n // TODO добавить возможность передавать параметры обьектом\n const options: IPriceOptionProps[] = getPriceOptions(\n convertShopPrices(item),\n null,\n false,\n sortFunctionWithRequestIdOnTop,\n );\n\n if (item.testDrive) {\n item.testDrive.pricesAfter.forEach(variant => {\n const { id, type, duration: variantDuration, value } = variant;\n\n const isLeasing = type === EPriceTypes.Leasing;\n\n const uniqueTestDriveVariant = options.findIndex(({ id: optionId = 0 }) => optionId === id);\n\n if (uniqueTestDriveVariant < 0) {\n options.push({\n id,\n label: isLeasing ? `Рассрочка на ${variantDuration} мес.` : 'Полная стоимость',\n operType: variantDuration > 0 ? EPriceOperationTypes.Leasing : EPriceOperationTypes.Possess,\n price: value,\n type,\n value: variantDuration,\n });\n }\n });\n }\n\n return options;\n }, [item]);\n\n const route = useMemo(() => {\n const routePath = `${baseRoute}/${item.alias ? item.alias : item.id}`.replace('//', '/');\n const testDriveQuery = testDriveData\n ? `&testDrive=1&duration=${priceOptions[indexOfSelected].value}`\n : '';\n\n return `${routePath}?withOption=${indexOfSelected}${testDriveQuery}`;\n }, [baseRoute, item, indexOfSelected, testDriveData, priceOptions]);\n\n const category = item.category?.name;\n\n /**\n * Метод вынесен наружу, потому что он будет открывать модальное окно с превью.\n * На данный момент нужен, чтобы не превращать иконку в ссылку - сделано для SEO\n *\n * @param item\n */\n const onDetail = useCallback(() => {\n if (category) {\n fullBuyEquipAnalyticsBase.clickedToOrder({\n equipmentTitle: item?.title,\n category,\n leasing: (priceOptions[indexOfSelected].value ?? 0),\n cost: priceOptions[indexOfSelected].price,\n });\n }\n Router.push(route);\n }, [category, route, item?.title, priceOptions, indexOfSelected]);\n\n const onClose = () => {\n setIsOpen(false);\n };\n\n const onOpen = () => {\n setIsOpen(true);\n };\n\n const changePrice = ({ option, testDriveOption }: TConfirmParams) => {\n const indexOfOption = priceOptions.findIndex(({ id }) => id === option.id);\n\n if (~indexOfOption) {\n setIndexOfSelected(indexOfOption);\n }\n setTestDriveData(testDriveOption);\n setIsOpen(false);\n };\n\n const prepareCharacteristics = useMemo(() => {\n // @ts-ignore https://ticket.ertelecom.ru/browse/WEB-42809\n const props = calculateEquipmentProps(item);\n\n return props\n .filter((characteristic) => {\n if (typeof characteristic.value === 'string' || Array.isArray(characteristic.value)) {\n return characteristic.value.length <= 22;\n }\n return false;\n })\n .slice(0, 3)\n .map(item => ({ ...item, value: String(item.value) }));\n }, [item.props]);\n\n const labels = item.labels.map(item => );\n\n const { price, oldPrice, period } = useMemo(() => {\n const { priceDuring, duration } = testDriveData || {};\n const { price: _price, pricePromo, value } = priceOptions[indexOfSelected];\n const fullCost = priceOptions[priceOptions.length - 1].price;\n const finalPrice = isAbTestCreditEnabled ? fullCost : (priceDuring ?? pricePromo ?? _price);\n return {\n price: finalPrice,\n oldPrice: (!priceDuring && pricePromo) ? _price : undefined,\n period: duration ?? value ?? 0,\n };\n }, [indexOfSelected, priceOptions, testDriveData]);\n\n return (\n <>\n \n \n \n );\n};\n\nexport default memo(DeviceGridItem);\n","// обрезать строку с многоточием при привышении заданного количества символом visibleLength\n// до выноса называлась ellipsis\nexport const truncate = (string: string | undefined, visibleLength: number) => {\n if (!string) {\n return '';\n }\n\n return string.length > visibleLength && visibleLength !== 0\n ? `${string.slice(0, visibleLength).trim()}...`\n : string;\n};\n","import { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\n\nexport type TCharacteristicsProps = {\n title: string,\n value: string,\n\n Component?: (props: any) => JSX.Element,\n componentProps?: any,\n};\n\nconst Characteristics = ({\n title,\n value,\n\n Component = Paragraph4,\n componentProps,\n\n ...props\n}: TCharacteristicsProps): JSX.Element => {\n return (\n
\n {title}\n
\n {value}\n
\n );\n};\n\nexport default Characteristics;\n","import styled from 'styled-components';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport Characteristics from './Characteristics';\n\nexport const StyledCharacteristics = styled(Characteristics)`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n flex-wrap: nowrap;\n max-width: 100%;\n overflow: hidden;\n \n color: ${COLORS.TextHint};\n \n & > * {\n white-space: nowrap;\n }\n \n & :nth-child(2) {\n flex-basis: 12px;\n flex-grow: 1;\n flex-shrink: 0;\n line-height: 100%;\n border-bottom: .5px dashed ${COLORS.TextDisabled};\n margin: 0 2px;\n }\n`;\n","import { StyledCharacteristics as Characteristics } from './styled';\n\nexport default Characteristics;\n","import { useMemo } from 'react';\n\nimport Cost from '@r1-frontend/ui-react/components/costs/Cost';\nimport { TCostProps } from '@r1-frontend/ui-react/components/costs/Cost/Cost';\nimport { SingleArrowDown } from '@r1-frontend/ui-react/components/svg/arrows';\nimport { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { dayPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport * as ST from './styled';\n\ntype TDescribedCostProps = {\n previousCost?: TCostProps['children'],\n installmentPeriod?: number | null,\n isReverse?: boolean,\n isTestDrive?: boolean,\n isCredit?: boolean,\n onClick?: () => void,\n DescriptionWrapper?: (props: any) => JSX.Element,\n CostWrapper?: (props: any) => JSX.Element,\n\n className?: string,\n} & Pick;\n\nconst DescribedCost = ({\n children,\n previousCost,\n installmentPeriod = 1,\n isTestDrive = false,\n onClick,\n isCredit,\n\n DescriptionWrapper = (props) => ,\n CostWrapper = (props) =>

,\n\n className,\n\n ...props\n}: TDescribedCostProps) => {\n if (installmentPeriod && installmentPeriod < 1) {\n throw Error('The \"installment period\" property cannot be zero.');\n }\n\n const pluralizeDays = getPluralize(dayPluralize);\n\n const hasCreditProp = typeof isCredit !== 'undefined';\n\n const description = useMemo(() => {\n const testDriveText = <>Тест-драйв на {installmentPeriod} {pluralizeDays(installmentPeriod ?? 1)};\n if ((installmentPeriod && installmentPeriod > 1) || isCredit) {\n const installmentText = (hasCreditProp) ? 'Доступна рассрочка' : `Рассрочка ${installmentPeriod} мес.`;\n return isTestDrive ? testDriveText : installmentText;\n }\n\n return 'Полная стоимость';\n }, [installmentPeriod, isTestDrive, isCredit]);\n\n return (\n
\n \n {description}\n {!!onClick && }\n \n \n 1)}>\n {children}\n \n {previousCost && (\n \n 1)} isPreviously>\n {previousCost}\n \n \n )}\n \n
\n );\n};\n\nexport default DescribedCost;\n","import { CSSProperties } from 'react';\nimport styled from 'styled-components';\n\nimport Cost from '@r1-frontend/ui-react/components/costs/Cost';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Svg from '@r1-frontend/ui-react/components/svg/Svg';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport DescribedCost from './DescribedCost';\n\nconst StyledDescribedCost = styled(DescribedCost)<{ isReverse?: boolean, align?: CSSProperties['alignItems'] }>`\n flex-direction: ${({ isReverse }) => isReverse ? 'column-reverse' : 'column'};\n align-items: ${({ align = 'flex-start' }) => align};\n cursor: ${({ onClick }) => onClick ? 'pointer' : 'initial'};\n\n ${Cost} + ${Paragraph4} {\n margin-left: 8px;\n }\n`;\n\nexport const Installment = styled.div`\n display: flex;\n color: ${COLORS.TextInfo};\n flex-wrap: nowrap;\n\n i {\n margin-left: 4px;\n line-height: 0;\n align-self: center;\n\n & > ${Svg} {\n width: 12px;\n height: 12px;\n }\n }\n\n span {\n @media (max-width: ${wideBreakpoints.mobile}) {\n display: none;\n }\n }\n`;\n\nexport default StyledDescribedCost;\n","import DescribedCost from '@r1-frontend/ui-react/components/costs/DescribedCost/styled';\n\nexport default DescribedCost;\n","import styled, { CSSProperties } from 'styled-components';\n\ntype TPreProps = {\n $whiteSpace?: CSSProperties['whiteSpace'],\n $withIndent?: boolean,\n}\n\nexport const Pre = styled.pre`\n white-space: ${({ $whiteSpace = 'pre' }) => $whiteSpace};\n margin: ${({ $withIndent = true }) => $withIndent ? 'revert' : '0'};\n`;\n","import Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { DescribedCost } from '@r1-frontend/ui-react/components/costs';\nimport Characteristics from '@r1-frontend/ui-react/components/List/Characteristics';\nimport { TCharacteristicsProps } from '@r1-frontend/ui-react/components/List/Characteristics/Characteristics';\nimport { Pre } from '@r1-frontend/ui-react/components/typography/formatting';\nimport { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4, Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport * as S from './styled';\n\ninterface IDesktopRouterCard {\n characteristics: TCharacteristicsProps[] | string,\n title: string | JSX.Element,\n description: string | JSX.Element,\n entityUriPath: string,\n price: number,\n period: number,\n onCostClick?: () => void,\n onButtonClick: () => void,\n\n isTestDrive?: boolean,\n isCredit?: boolean,\n previousPrice?: number,\n buttonName?: string,\n}\n\nconst DesktopRouterCard = ({\n title,\n description,\n characteristics,\n entityUriPath,\n price,\n period,\n isTestDrive,\n isCredit,\n previousPrice,\n buttonName = 'Заказать',\n onCostClick,\n onButtonClick,\n}: IDesktopRouterCard): JSX.Element => {\n return (\n <>\n \n \n {description}\n

{title}

\n \n {typeof characteristics === 'string'\n ? \n \n \n : <>\n {characteristics.map(characteristic => (\n \n ))}\n \n }\n \n
\n \n

}\n DescriptionWrapper={(props) =>
}\n >\n {price}\n \n \n {buttonName}\n \n \n \n \n );\n};\n\nexport default DesktopRouterCard;\n","import { ReactNode } from 'react';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\n\nimport { TCharacteristicsProps } from '@r1-frontend/ui-react/components/List/Characteristics/Characteristics';\nimport { IndentContainer, RounderContainer, withRadius } from '@r1-frontend/ui-react/experimental/containers';\n\nimport DesktopRouterCard from './Desktop';\n\nimport { ImageWrapper, LabelWrapper } from './styled';\n\nexport type TStaticDesktopRouter = {\n image: string,\n title: string | JSX.Element,\n description: string | JSX.Element,\n characteristics: TCharacteristicsProps[] | string,\n price: number,\n period: number,\n entityUriPath: string,\n onButtonClick: () => void,\n onCostClick?: () => void,\n\n isTestDrive?: boolean,\n isCredit?: boolean,\n labels?: ReactNode[],\n previousPrice?: number,\n className?: string,\n buttonName?: string,\n}\n\nconst StaticDesktopRouter = ({ labels, ...props }: TStaticDesktopRouter): JSX.Element => {\n return (\n
\n \n \n \n {labels}\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default withRadius(StaticDesktopRouter, { $desktop: 32, $mobile: 24 });\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport RounderContainer from '@r1-frontend/ui-react/experimental/containers/RounderContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport StaticDesktopRouter from './StaticDesktopRouter';\n\nexport const StaticDesktop = styled(StaticDesktopRouter)`\n position: relative;\n display: block;\n background-color: ${COLORS.BgSurface};\n\n width: 304px;\n height: 354px;\n \n transition: .3s;\n\n :hover{\n box-shadow: rgba(0, 0, 0, 0.07) 0px 6px 12px;\n }\n\n & > ${IndentContainer} > ${RounderContainer} {\n background-color: ${COLORS.TextWhite};\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: auto;\n }\n`;\n\nexport const ImageWrapper = styled.div`\n position: relative;\n padding: 4px 0 12px 0;\n width: 100%;\n & img {\n width: auto !important;\n max-height: 112px;\n margin: auto;\n }\n`;\n\nexport const DescriptionBlock = styled.div`\n height: 64px;\n`;\n\nexport const LabelWrapper = styled.div`\n display: flex;\n flex-direction: row;\n gap: 8px;\n position: absolute;\n z-index: 1;\n top: 4px;\n left: 8px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n top: 6px;\n left: 12px;\n }\n`;\n\nexport const DesktopFooter = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: flex-end;\n`;\n\nexport const Block = styled.div`\n display: block;\n`;\n","import { StaticDesktop as StaticDesktopRouter } from './styled';\n\nexport default StaticDesktopRouter;\n"],"names":["DeviceGridItem","item","baseRoute","isCharacteristics","useState","testDriveData","setTestDriveData","indexOfSelected","setIndexOfSelected","isOpen","setIsOpen","isAbTestCreditEnabled","useMemo","isCreditAbnEnabled","priceOptions","options","getPriceOptions","convertShopPrices","sortFunctionWithRequestIdOnTop","testDrive","pricesAfter","forEach","variant","id","type","duration","value","isLeasing","EPriceTypes","uniqueTestDriveVariant","findIndex","optionId","push","label","variantDuration","operType","EPriceOperationTypes","price","route","routePath","alias","replace","testDriveQuery","category","name","onDetail","useCallback","fullBuyEquipAnalyticsBase","equipmentTitle","title","leasing","cost","Router","prepareCharacteristics","calculateEquipmentProps","filter","characteristic","Array","isArray","length","slice","map","String","props","labels","Label","bgColor","color","textColor","colorText","priceDuring","pricePromo","fullCost","_price","oldPrice","undefined","period","StaticDesktopRouter","image","imageWebp","images","truncate","description","characteristics","body","previousPrice","onButtonClick","onCostClick","buttonName","entityUriPath","isTestDrive","isCredit","isLoanAvailable","SelectPurchaseOptionPopup","equipment","onConfirmSelect","option","testDriveOption","indexOfOption","onClose","memo","string","visibleLength","trim","Component","Paragraph4","componentProps","div","as","styled","Characteristics","COLORS","children","previousCost","installmentPeriod","onClick","DescriptionWrapper","$smaller","CostWrapper","H4","$inline","$withIndent","className","Error","pluralizeDays","getPluralize","dayPluralize","hasCreditProp","testDriveText","span","installmentText","ST","i","SingleArrowDown","Cost","isMonthly","Boolean","$color","isPreviously","StyledDescribedCost","DescribedCost","isReverse","align","Installment","Svg","wideBreakpoints","Pre","$whiteSpace","ListContainer","$size","$direction","Paragraph5","href","S","dangerouslySetInnerHTML","__html","Button","bType","size","data-test","withRadius","IndentContainer","$united","RounderContainer","$desktop","$mobile","ImageWrapper","LabelWrapper","LazyLoadImage","src","alt","height","DesktopRouterCard","StaticDesktop","DescriptionBlock","DesktopFooter","Block"],"sourceRoot":""}