{"version":3,"file":"static/chunks/2533-ec7c3ebc0f35f188.js","mappings":"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","sources":["webpack://_N_E/./src/api/content/shop/helpers.ts","webpack://_N_E/./src/components/SelectPurchaseOptionPopup/usePriceOptions.ts","webpack://_N_E/./src/components/SelectPurchaseOptionPopup/AllPurchase.tsx","webpack://_N_E/./src/components/SelectPurchaseOptionPopup/TestDrivePurchase.tsx","webpack://_N_E/./src/components/SelectPurchaseOptionPopup/styled.ts","webpack://_N_E/./src/components/SelectPurchaseOptionPopup/SelectPurchaseOptionPopup.tsx","webpack://_N_E/./src/entities/equipment.js","webpack://_N_E/./src/entities/price.ts","webpack://_N_E/./src/features/work-in-home-ab/components/Description/functions.tsx","webpack://_N_E/./src/features/work-in-home-ab/components/Description/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/OptionList/CustomOptionList.tsx"],"sourcesContent":["import { IShopCategory } from '~/src/api/content/shop/getShopCategories';\nimport { IShopItem, IShopProp } from '~/src/api/content/shop/getShopItems';\n\nexport enum EShopItemPropTypes {\n string = 'string',\n options = 'options',\n}\n\ninterface IOption {\n key: string,\n value: string,\n}\n\nconst getPropOptions = (category: IShopCategory | undefined, propName: string) => {\n const categoryProp = category?.props?.find(prop => prop.name === propName);\n\n if (!categoryProp || !categoryProp.options) {\n return [];\n }\n\n try {\n return JSON.parse(categoryProp.options) as IOption[];\n } catch {\n return [];\n }\n};\n\nconst getStringValue = (value: string | string[] | undefined) => typeof value === 'string' ? value : '';\n\nconst getValueFromString = (asIs: boolean, value: string | string[] | undefined) => getStringValue(value);\n\nconst getValueFromOptions = (\n options: IOption[],\n value: string | string[] | undefined,\n) => {\n if (typeof value !== 'string') {\n return '';\n }\n\n try {\n const optionKeys = JSON.parse(value);\n\n if (Array.isArray(optionKeys)) {\n const stringValue = optionKeys.reduce((acc: string[], key) => {\n const option = options.find(el => `${el.key}` === `${key}`);\n option ? acc.push(option.value) : acc;\n return acc;\n }, []);\n\n return stringValue.join(', ');\n }\n\n return '';\n } catch {\n return '';\n }\n};\n\n/* Рассчитывает значение value в зависимости от type для характеристик оборудования\n* TODO эти расчеты должны выполняться на стороне бэка и возвращаться в поле props.value. EACI (expand api content imperfection)\n*/\nexport const calculateEquipmentProps = ({ props, category }: IShopItem): IShopProp[] => {\n if (!props) {\n return [];\n }\n\n const newProps: IShopProp[] = props.map((prop) => {\n const { type: valueType, name: propName, asIs, value } = prop;\n\n let computedValue = '';\n\n if (valueType === EShopItemPropTypes.string) {\n computedValue = getValueFromString(!!asIs, value);\n }\n\n if (valueType === EShopItemPropTypes.options) {\n const options = getPropOptions(category, propName);\n computedValue = getValueFromOptions(options, value);\n }\n\n return {\n ...prop,\n value: computedValue,\n };\n });\n\n return newProps;\n};\n","import { useMemo } from 'react';\nimport orderBy from 'lodash/orderBy';\n\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\nimport { ICreditCondition } from '@r1-frontend/api-domru/payments/v1/credits/condition';\n\nimport format from '@r1-frontend/ui-react/components/costs/Cost/format';\nimport { IOptionVariant, TOption } from '@r1-frontend/ui-react/components/OptionList';\nimport { ICustomOptions } from '@r1-frontend/ui-react/components/OptionList/CustomOptionList';\nimport { RubleSymbol } from '@r1-frontend/ui-react/tokens/symbols';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { dayPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\nimport { EPriceTypes } from '@r1-frontend/shared/types/EPriceTypes';\n\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 { getPayOptions } from '~/src/features/work-in-home-ab/components/Description/functions';\nimport { sortFunctionWithRequestIdOnTop } from '~/src/helpers/functions';\n\nconst pluralizeDays = getPluralize(dayPluralize);\n\nconst getOptionLabel = (type: number, duration: number) => {\n return type === EPriceTypes.Leasing ? `Рассрочка на ${duration} мес.` : 'Полная стоимость';\n};\n\nexport const usePriceOptions = (equipment: IEquipment, creditConditions?: ICreditCondition[]) => {\n const priceOptions = useMemo(() => {\n const basePrices = getPriceOptions(\n convertShopPrices(equipment),\n null,\n false,\n (a, b) => sortFunctionWithRequestIdOnTop(a, b),\n );\n\n const fullPriceOption = basePrices.find(option => option.operType === EPriceOperationTypes.Possess);\n\n if (isCreditAbnEnabled() && equipment.isLoanAvailable && creditConditions && creditConditions.length > 0) {\n const creditOptions = creditConditions?.map(condition => ({\n id: `credit_${condition.duration}`,\n value: condition.duration,\n label: `Рассрочка на ${condition.duration} мес.`,\n price: condition.pay,\n type: EPriceTypes.Leasing,\n operType: EPriceOperationTypes.Leasing,\n sort: 999,\n }));\n\n return [...creditOptions, fullPriceOption];\n }\n\n return basePrices;\n }, [equipment, creditConditions]);\n\n const payOptions = useMemo(() => getPayOptions(priceOptions), [priceOptions]);\n\n const testDriveOptions: (ICustomOptions & { description: string }) | undefined = useMemo(() => {\n const { testDrive } = equipment;\n\n if (!testDrive) {\n return;\n }\n\n const { duration, priceDuring, pricesAfter } = testDrive;\n\n const variants: IOptionVariant[] = orderBy(pricesAfter, ['type', 'duration'], ['desc', 'desc'])\n .map(variant => {\n const { id, type, duration: variantDuration, value } = variant;\n\n const isLeasing = type === EPriceTypes.Leasing;\n\n const uniqueTestDriveVariant = priceOptions.findIndex(({ id: optionId = 0 }) => optionId === id);\n\n if (uniqueTestDriveVariant < 0) {\n priceOptions.push({\n id,\n label: getOptionLabel(type, variantDuration),\n operType: variantDuration > 0 ? EPriceOperationTypes.Leasing : EPriceOperationTypes.Possess,\n price: value,\n type,\n value: variantDuration,\n });\n }\n\n return {\n id: variantDuration,\n label: getOptionLabel(type, variantDuration),\n value,\n valueStr: format(value, isLeasing ? { monthly: true } : undefined),\n };\n });\n\n return {\n id: EPriceOperationTypes.TestDrive,\n value: `${priceDuring} ${RubleSymbol} на ${duration} ${pluralizeDays(duration)}`,\n description: `Тестируйте оборудование ${duration} ${pluralizeDays(duration)}. Условия покупки оборудования после окончания тест-драйва:`,\n variants,\n };\n }, [equipment, priceOptions]);\n\n return { priceOptions, payOptions, testDriveOptions };\n};\n","import { useState } from 'react';\n\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\nimport { ICreditCondition } from '@r1-frontend/api-domru/payments/v1/credits/condition';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport OptionList, { IProps as IOptionListProps } from '@r1-frontend/ui-react/components/OptionList';\nimport TestDriveOptions from '@r1-frontend/ui-react/components/OptionList/CustomOptionList';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { EPriceOperationTypes, IPriceOptionProps } from '~/src/entities/price';\n\nimport { ISelectedPayOption, TConfirmParams } from './types';\nimport { usePriceOptions } from './usePriceOptions';\n\ninterface IProps extends Pick {\n equipment: IEquipment,\n onConfirmSelect: (params: TConfirmParams) => void,\n creditConditions?: ICreditCondition[],\n}\n\nconst AllPurchase = ({\n equipment,\n onConfirmSelect,\n creditConditions,\n\n reverseVariants,\n onClickOptionChip,\n}: IProps): JSX.Element => {\n const { title, testDrive } = equipment;\n\n const { priceOptions, payOptions, testDriveOptions } = usePriceOptions(equipment, creditConditions);\n\n const [selectedOption, setSelectedOption] = useState();\n const [selectedPayOption, setSelectedPayOption] = useState({ optionId: '', variantId: '' });\n\n const selectOptionHandler = (optionId: string | number, variantId: string | number) => {\n setSelectedPayOption({ optionId, variantId });\n\n const priceOption = priceOptions.find(el => Number(el.value) === Number(variantId));\n setSelectedOption(priceOption);\n };\n\n const confirmSelectHandler = () => {\n onConfirmSelect({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n option: selectedOption!,\n payOption: selectedPayOption,\n testDriveOption: (testDrive && selectedPayOption.optionId === EPriceOperationTypes.TestDrive)\n ? {\n duration: testDrive.duration,\n priceDuring: testDrive.priceDuring,\n }\n : undefined,\n });\n };\n\n return (\n <>\n \n

Варианты покупки

\n {title}\n
\n\n \n \n {testDriveOptions && (\n \n )}\n \n\n \n \n \n \n );\n};\n\nexport default AllPurchase;\n","import { useState } from 'react';\n\nimport { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport OptionList, { IProps as IOptionListProps } from '@r1-frontend/ui-react/components/OptionList';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { IPriceOptionProps } from '~/src/entities/price';\nimport { EPriceOperationTypes } from '~/src/entities/price';\n\nimport { ISelectedPayOption, TConfirmParams } from './types';\nimport { usePriceOptions } from './usePriceOptions';\n\ninterface IProps extends Pick {\n equipment: IEquipment,\n onConfirmSelect: (params: TConfirmParams) => void,\n}\n\nconst TestDrivePurchase = ({\n equipment,\n onConfirmSelect,\n\n reverseVariants,\n onClickOptionChip,\n}: IProps): JSX.Element | null => {\n const { testDrive } = equipment;\n\n const { priceOptions, testDriveOptions } = usePriceOptions(equipment);\n\n const [selectedOption, setSelectedOption] = useState();\n const [selectedPayOptionId, setSelectedPayOptionId] = useState('');\n\n if (!testDrive || !testDriveOptions) {\n return null;\n }\n\n const selectOptionHandler = (optionId: string | number) => {\n setSelectedPayOptionId(optionId);\n\n const priceOption = priceOptions.find(el => Number(el.value) === Number(optionId));\n setSelectedOption(priceOption);\n };\n\n const confirmSelectHandler = () => {\n if (selectedOption) {\n onConfirmSelect({\n option: selectedOption,\n payOption: {\n optionId: EPriceOperationTypes.TestDrive,\n variantId: selectedPayOptionId,\n },\n testDriveOption: {\n duration: testDrive.duration,\n priceDuring: testDrive.priceDuring,\n },\n });\n }\n };\n\n return (\n <>\n

Выберите условия покупки оборудования после тест-драйва

\n\n \n \n \n\n \n \n \n \n );\n};\n\nexport default TestDrivePurchase;\n","import { IDefaultPopupCustomStyles } from '@r1-frontend/ui-react/components/popups/defaultPopup';\n\nexport const PopupCustomStyles: IDefaultPopupCustomStyles = {\n popup: {\n default: {\n margin: '32px',\n maxHeight: 'calc(100% - 64px)',\n },\n mobile: {\n margin: '16px',\n maxHeight: 'calc(100% - 32px)',\n },\n },\n};\n","import { IEquipment } from '@r1-frontend/api-domru/full-buy/v1/equipment/dto/Equipment.dto';\nimport { ICreditCondition } from '@r1-frontend/api-domru/payments/v1/credits/condition';\n\nimport { IProps as IOptionListProps } from '@r1-frontend/ui-react/components/OptionList';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { FullWidthListContainer, IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport AllPurchase from './AllPurchase';\nimport TestDrivePurchase from './TestDrivePurchase';\nimport { TConfirmParams } from './types';\n\nimport { PopupCustomStyles } from './styled';\n\ninterface IProps extends Pick {\n isOpen: boolean,\n equipment: IEquipment,\n\n onConfirmSelect: (params: TConfirmParams) => void,\n onClose: () => void,\n\n isOnlyTestDrive?: boolean,\n creditConditions?: ICreditCondition[],\n}\n\nexport const SelectPurchaseOptionPopup = ({ isOpen, onClose, isOnlyTestDrive = false, ...props }: IProps): JSX.Element | null => {\n if (isOnlyTestDrive && !props.equipment.testDrive) {\n return null;\n }\n\n return (\n \n \n \n {isOnlyTestDrive\n ? \n : \n }\n \n \n \n );\n};\n","import { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\nimport { EPriceTypes } from '@r1-frontend/shared/types/EPriceTypes';\n\nimport { EPriceOperationTypes } from '~/src/entities/price';\nimport { sortFunction } from '~/src/helpers/functions';\n\nexport const convertDevicePrices = (device) => {\n if (!device) {\n return [];\n }\n\n const {\n posessPrice,\n posess_price,\n promo,\n leasing,\n leasingDuration,\n leasingPrice,\n leasing_dur,\n leasing_mon_price,\n leasingDurationSec,\n leasingPriceSec,\n leasing_dur_two,\n leasing_mon_price_two,\n prices,\n } = device;\n\n const convertedPrices = [];\n\n if (Array.isArray(prices) && prices.length > 0) {\n prices.filter(item => item.type === EPriceTypes.Possess)\n .forEach(item => {\n convertedPrices.push({\n type: EPriceTypes.Possess,\n value: item.value,\n valuePromo: promo,\n });\n });\n\n prices.filter(item => item.type === EPriceTypes.Leasing)\n .forEach(item => {\n convertedPrices.push({\n type: EPriceTypes.Leasing,\n value: item.value,\n duration: item.duration,\n });\n });\n } else {\n if (posessPrice || posess_price) {\n convertedPrices.push({\n type: EPriceTypes.Possess,\n value: posessPrice || posess_price,\n valuePromo: promo,\n });\n }\n\n if (Array.isArray(leasing)) {\n leasing.forEach(leasingPriceItem => {\n convertedPrices.push({\n type: EPriceTypes.Leasing,\n value: leasingPriceItem.price,\n duration: leasingPriceItem.duration,\n });\n });\n } else {\n if (leasingDuration && leasingPrice || leasing_dur && leasing_mon_price) {\n convertedPrices.push({\n type: EPriceTypes.Leasing,\n value: leasingPrice || leasing_mon_price,\n duration: leasingDuration || leasing_dur,\n });\n }\n\n if (leasingDurationSec && leasingPriceSec || leasing_dur_two && leasing_mon_price_two) {\n convertedPrices.push({\n type: EPriceTypes.Leasing,\n value: leasingPriceSec || leasing_mon_price_two,\n duration: leasingDurationSec || leasing_dur_two,\n });\n }\n }\n }\n\n return convertedPrices;\n};\n\n/**\n *\n * @param {(import('~/src/entities/price').Price | import('~/src/entities/price').IPriceProps)[] prices}\n * @param {string | null} [domain]\n * @param {boolean} [longLabel]\n * @param {(a: any, b: any) => number} [sort]\n */\nexport const getPriceOptions = (\n prices,\n domain,\n longLabel = false,\n sort = sortFunction,\n) => {\n const options = [];\n let hasNonEmptySortField = false;\n const pluralizeMonths = getPluralize(monthPluralize);\n\n prices\n .filter(item => item.type === EPriceTypes.Leasing)\n .forEach(item => {\n options.push({\n id: item.id,\n value: item.duration,\n label: longLabel\n ? `В рассрочку на ${item.duration} ${pluralizeMonths(item.duration)} - ${item.value} ₽/мес.`\n : `Рассрочка на ${item.duration} мес.`,\n price: item.value,\n pricePromo: item.valuePromo,\n type: EPriceTypes.Leasing,\n operType: EPriceOperationTypes.Leasing,\n sort: item.sort,\n requestId: item.requestId,\n });\n\n if (item.sort) {\n hasNonEmptySortField = true;\n }\n });\n\n prices\n .filter(item => item.type === EPriceTypes.Possess)\n .forEach(item => {\n const priceItem = {\n id: item.id,\n value: 0,\n label: 'Покупка',\n price: item.value,\n pricePromo: item.valuePromo,\n type: EPriceTypes.Possess,\n operType: EPriceOperationTypes.Possess,\n sort: item.sort,\n requestId: item.requestId,\n };\n\n if (item.sort) {\n hasNonEmptySortField = true;\n }\n\n if ('ekat' === domain) {\n options.unshift(priceItem);\n } else {\n options.push(priceItem);\n }\n });\n\n if (hasNonEmptySortField) {\n options.sort(sort);\n }\n\n return options;\n};\n","import { EPriceTypes } from '@r1-frontend/shared/types/EPriceTypes';\n\nimport { sortFunction } from '~/src/helpers/functions';\n\nexport enum EPriceOperationTypes {\n Possess = 'possess',\n Leasing = 'leasing',\n TestDrive = 'test-drive',\n Credit = 'credit',\n}\n\nexport enum EPriceBuyTypes {\n Sale = 'sale',\n Leasing = 'leasing',\n}\n\nexport interface IPriceProps {\n id?: number,\n type: EPriceTypes,\n value: number,\n valuePromo?: number,\n duration?: number,\n sort?: number,\n requestId?: number,\n}\n\nexport interface IPrice extends IPriceProps {\n periodText: string,\n label: string,\n buyType: EPriceBuyTypes,\n getValue: () => number,\n}\n\nexport interface IPriceOptionProps extends Omit {\n value?: IPrice['duration'],\n price: IPrice['value'],\n pricePromo?: IPrice['valuePromo'],\n operType: EPriceOperationTypes,\n}\n\nexport interface IPriceShopDefault {\n price: number,\n duration: number,\n}\n\nexport interface IPriceShopCustom {\n date_close_promo: string,\n duration: number,\n lifetime_price: null,\n value: number,\n}\n\nexport class Price implements IPrice {\n id;\n type;\n value;\n valuePromo;\n duration;\n sort;\n requestId;\n periodText;\n label;\n buyType;\n name: string | null | undefined;\n\n constructor(props: IPriceProps) {\n this.id = props.id,\n this.type = props.type;\n this.value = props.value;\n this.valuePromo = props.valuePromo;\n this.duration = Number(props.duration);\n this.sort = props.sort;\n this.requestId = props.requestId;\n\n this.label = this.type === EPriceTypes.Leasing\n ? `Рассрочка (${this.duration} мес.)`\n : 'Покупка';\n\n this.periodText = this.type === EPriceTypes.Leasing\n ? 'в мес.'\n : '';\n\n this.buyType = this.type === EPriceTypes.Leasing\n ? EPriceBuyTypes.Leasing\n : EPriceBuyTypes.Sale;\n }\n\n getValue(): number {\n return this.valuePromo || this.value;\n }\n}\n\nexport function convertShopPrices(item: any): Price[] {\n if (!item) {\n return [];\n }\n\n return item.pricesV2 && item.pricesV2.length\n ? convertShopPricesV2(item)\n : convertShopPricesV1(item);\n}\n\nfunction convertShopPricesV1(item: any): Price[] {\n const prices = [];\n\n const pricesLeasing = new Map(\n item.prices?.leasing.map((price: IPriceShopDefault) => [price.duration, price]),\n );\n\n const pricesLeasingPromo = new Map(\n item.pricesPromo?.leasing?.map((price: IPriceShopCustom) => [price.duration, price]),\n );\n\n for (const [duration, price] of pricesLeasing) {\n prices.push(new Price({\n type: EPriceTypes.Leasing,\n value: price.price,\n valuePromo: pricesLeasingPromo?.get(duration)?.value,\n duration: price.duration,\n }));\n }\n\n if (item.prices?.possess) {\n prices.push(new Price({\n type: EPriceTypes.Possess,\n value: item.prices.possess,\n valuePromo: item.pricesPromo?.possess?.value,\n }));\n }\n\n return prices;\n}\n\nfunction convertShopPricesV2(item: any): Price[] {\n const prices = [];\n\n const pricesLeasingPromo = new Map(\n item.pricesPromo?.leasing?.map((price: IPriceShopCustom) => [price.duration, price]),\n );\n\n item.pricesV2.sort(sortFunction);\n\n for (const priceElement of item.pricesV2) {\n prices.push(new Price({\n ...priceElement,\n valuePromo:\n priceElement?.promoValue ||\n (priceElement?.duration\n ? pricesLeasingPromo?.get(priceElement.duration)?.value\n : item.pricesPromo?.possess?.value),\n }));\n }\n\n return prices;\n}\n\ninterface IGetWithConvertedPricesProps {\n prices: IPriceProps[],\n}\n\n// Фундоментальная функция, все объекты/массивы объектов нужно прогонять через неё\nexport function getWithConvertedPrices(\n elementOrArray: Array | IGetWithConvertedPricesProps,\n): Array | IGetWithConvertedPricesProps {\n if (!elementOrArray) {\n return elementOrArray;\n }\n\n return Array.isArray(elementOrArray)\n ? elementOrArray.map(element => {\n element.prices = element.prices.map((price: IPriceProps) => new Price(price)).sort(sortFunction);\n return element;\n })\n : (elementOrArray.prices = elementOrArray.prices.map((price: IPriceProps) => new Price(price)).sort(sortFunction)) &&\n elementOrArray;\n}\n","import type { IServices } from '@r1-frontend/api-domru/api-profile/v2/info/all/dto/ResponseDto';\nimport { IGetConnectPriceRequestDto } from '@r1-frontend/api-domru/api-request/v1/get-connect-price';\n\nimport { ILabelProps } from '@r1-frontend/ui-react/components/label';\nimport { TOption } from '@r1-frontend/ui-react/components/OptionList';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\n\nimport { PRODUCTS } from '~/src/constants';\nimport { EPriceOperationTypes, IPriceOptionProps } from '~/src/entities/price';\nimport type { PriceOptionProps } from '~/src/features/work-in-home-ab/types';\n\nimport { OldValue } from './styled';\n\nexport interface ISelectedElement {\n optionId: string | number,\n variantId: string | number,\n}\n\nexport const getDeliveryOptions = (\n installPrice: number,\n deliveryPrice: number,\n isAvailablePost: boolean,\n isEngineerDeliveryAvailable: boolean,\n): TOption[] => {\n const postItem = {\n id: 'post',\n label: 'Пункт выдачи Почта России',\n valueStr: '0 ₽',\n value: 0,\n };\n\n const engineerItem = {\n id: 'engineer',\n variants: [\n {\n id: 'installation',\n label: 'Доставка и настройка инженером',\n valueStr: `${installPrice} ₽`,\n value: installPrice,\n },\n {\n id: 'delivery',\n label: 'Доставка инженером',\n valueStr: `${deliveryPrice} ₽`,\n value: deliveryPrice,\n },\n ],\n };\n\n if (isAvailablePost && isEngineerDeliveryAvailable) {\n return [postItem, engineerItem];\n }\n if (isAvailablePost && !isEngineerDeliveryAvailable) {\n return [postItem];\n }\n if (!isAvailablePost && isEngineerDeliveryAvailable) {\n return [engineerItem];\n }\n return [];\n};\n\nconst createChip = (props: PriceOptionProps | IPriceOptionProps): ILabelProps | undefined =>\n props?.requestId\n ? {\n type: 'LabelsText_2',\n children:\n <>\n {'акция'}\n \n ,\n outlined: true,\n }\n : undefined;\n\nexport const getPayOptions = (priceOptions: (PriceOptionProps | IPriceOptionProps)[]): TOption[] => {\n const saleOption = priceOptions.find(el => el.operType === EPriceOperationTypes.Possess);\n\n const leasingOptions = priceOptions\n .filter(el => el.operType === EPriceOperationTypes.Leasing)\n .map(el => ({\n id: String(el.value),\n label: el.label,\n value: String(el.value),\n valueStr: `${el.price} ₽/мес`,\n chip: createChip(el),\n }));\n\n const pricePromo = saleOption?.pricePromo;\n const res: TOption[] = saleOption?.price\n ? [\n {\n id: EPriceOperationTypes.Possess,\n label: 'Полная стоимость',\n value: pricePromo || saleOption?.value || 0,\n valueStr: `${pricePromo || saleOption?.price} ₽`,\n chip: createChip(saleOption),\n additional: pricePromo\n ? {saleOption?.value || saleOption?.price}{RubleSymbol}\n : undefined,\n },\n ]\n : [];\n\n if (leasingOptions.length > 0) {\n res.push({\n id: EPriceOperationTypes.Leasing,\n variants: leasingOptions,\n });\n }\n return res;\n};\n\n/**\n * Проверяет подключен ли нужный продукт\n */\nconst checkRequiredService = (services: IServices[] | undefined, neededServiceId: number) => {\n if (neededServiceId > 0) {\n if (Array.isArray(services)) {\n const findProduct = services.find(el => el.productId === neededServiceId);\n return !!findProduct;\n }\n return false;\n }\n\n return true;\n};\n\ninterface ICheckAvailableParams {\n services: IServices[] | undefined,\n neededProductId: number,\n leftovers: number,\n showForDelivery: boolean,\n}\n\n/**\n * Проверить доступность доставки почтой\n */\nexport const checkAvailableDeliveryByPost = ({\n services,\n neededProductId,\n leftovers,\n showForDelivery,\n}: ICheckAvailableParams): boolean => {\n const isCheck = checkRequiredService(services, neededProductId);\n return showForDelivery && leftovers > 0 && isCheck;\n};\n\nexport const getProductNeedsParams = (productId: number): Omit => {\n switch (productId) {\n case PRODUCTS.internet:\n return {\n needTv: 0,\n needInt: 1,\n };\n case PRODUCTS.tv:\n return {\n needTv: 1,\n needInt: 0,\n };\n default:\n return {\n needTv: 0,\n needInt: 0,\n };\n }\n};\n","import styled, { css } from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport InputSimple, { nameDecorator, phoneDecorator } from '@r1-frontend/ui-react/components/inputSimple';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nconst InputNameDecorator = nameDecorator(InputSimple);\nconst InputPhoneDecorator = phoneDecorator(InputSimple);\n\nexport const Container = styled.div`\n background-color: ${COLORS.BgSurface};\n border-radius: 32px;\n padding: 24px;\n margin: 0 32px;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n margin: 0 32px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin: 0 24px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n margin: 0 0 36px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n margin: 0 0 28px;\n border-radius: 0;\n padding: 20px 16px;\n }\n`;\n\nexport const BannerWrapper = styled.div`\n margin: 0 32px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin: 0 24px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n margin: 0;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 0 16px;\n }\n`;\n\nexport const FormWrapper = styled.div`\n display: flex;\n width: 100%;\n gap: 16px;\n flex-direction: row;\n`;\n\nexport const InputWrapper = styled.div`\n flex-direction: row;\n flex-basis: 100%;\n justify-content: center;\n gap: 12px;\n`;\n\nconst CommonInputCss = css`\n margin-bottom: 0;\n width: calc(50% - 6px);\n\n @media (min-width: ${wideBreakpoints.sDesktop}) {\n width: calc(50% - 6px);\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 100%;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: calc(50% - 6px);\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100%;\n }\n`;\n\nexport const InputPhone = styled(InputPhoneDecorator)`\n ${CommonInputCss};\n`;\n\nexport const InputName = styled(InputNameDecorator)`\n ${CommonInputCss};\n`;\n\nexport const ButtonWrapper = styled.div`\n flex-direction: column;\n gap: 32px;\n width: 100%;\n`;\n\nexport const SubmitButton = styled(BaseButton)`\n ${FONTS.S};\n height: fit-content;\n width: 100%;\n`;\n\nexport const CallbackButton = styled(BaseButton)<{ withTopSpace: boolean }>`\n ${FONTS.S};\n height: fit-content;\n width: 100%;\n ${(props) => props.withTopSpace ? 'margin-top: 16px;' : ''}\n`;\n\nexport const TitleComponent = styled.div`\n ${FONTS.H4};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H5};\n text-align: center;\n }\n`;\n\nexport const WrappperComponent = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 16px;\n padding-bottom: 32px;\n`;\n\nexport const OldValue = styled(Paragraph4)`\n text-decoration-line: line-through;\n color: ${COLORS.TextInfo};\n margin-left: 36px;\n\n @media (max-width: ${wideBreakpoints.sMobile}) {\n margin-top: 8px;\n }\n`;\n\nexport const ComponentHeader = styled.div`\n ${FONTS.H4};\n color: ${COLORS.TextPrimary};\n margin-bottom: 0px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H5};\n margin-bottom: 4px;\n }\n`;\n","import { useMemo, useState } from 'react';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { WithVariantsOption } from '@r1-frontend/ui-react/components/OptionList';\nimport { isSelected } from '@r1-frontend/ui-react/components/OptionList/utils';\nimport { SingleArrowDown } from '@r1-frontend/ui-react/components/svg/arrows';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { NBSP } from '@r1-frontend/ui-react/tokens/symbols';\n\nimport * as ST from './styled';\n\nexport interface ICustomOptions extends Omit {\n value: string,\n}\n\ninterface IProps {\n option: ICustomOptions,\n selectedOptionId: string | number,\n selectedVariantId: string | number,\n onClickOption: (optionId: string | number, variantId: string | number) => void,\n\n reverseVariants?: boolean,\n label?: string,\n labelPrefix?: string,\n description?: string,\n}\n\nconst CustomOptionList = ({\n option,\n selectedOptionId,\n selectedVariantId,\n onClickOption,\n\n reverseVariants,\n labelPrefix = 'Далее',\n label = '',\n description,\n}: IProps): JSX.Element => {\n const { id, value, variants } = option;\n\n const [isShowVariants, setIsShowVariants] = useState(false);\n\n const selectedVariantValue = useMemo(() => {\n return variants.find(variant => variant.id === selectedVariantId)?.valueStr || variants[0].valueStr;\n }, [selectedVariantId, variants]);\n\n const handleClick = () => {\n const [firtsVariant] = variants || [undefined];\n const variantId = firtsVariant?.id || '';\n\n if (!isSelected(`${id}`, `${selectedOptionId}`)) {\n onClickOption(id, variantId);\n }\n };\n\n const toggleIsShowVariants = () => {\n setIsShowVariants(prev => isSelected(`${id}`, `${selectedOptionId}`) ? !prev : true);\n };\n\n const labelText = label ? label : `${labelPrefix}${NBSP}${selectedVariantValue}`;\n\n return (\n \n \n \n {value}\n \n {labelText}\n {variants.length && (\n \n \n \n )}\n \n \n \n\n {variants.length && isShowVariants && (\n \n {description && (\n {description}\n )}\n {variants.map(variant => (\n onClickOption(id, variant.id)}\n data-test='variant'\n >\n \n \n {variant.valueStr || variant.value}\n \n \n {variant.label}\n \n \n \n ))}\n \n )}\n \n );\n};\n\nexport default CustomOptionList;\n"],"names":["EShopItemPropTypes","string","options","calculateEquipmentProps","props","category","newProps","map","prop","type","name","value","asIs","computedValue","valueType","getStringValue","getValueFromString","propName","categoryProp","find","JSON","parse","getPropOptions","optionKeys","Array","isArray","reduce","acc","key","option","el","push","join","getValueFromOptions","pluralizeDays","getPluralize","dayPluralize","getOptionLabel","duration","EPriceTypes","usePriceOptions","equipment","creditConditions","priceOptions","useMemo","basePrices","getPriceOptions","convertShopPrices","a","b","sortFunctionWithRequestIdOnTop","fullPriceOption","operType","EPriceOperationTypes","isCreditAbnEnabled","isLoanAvailable","length","creditOptions","condition","id","label","price","pay","sort","payOptions","getPayOptions","testDriveOptions","testDrive","priceDuring","pricesAfter","variants","orderBy","variant","isLeasing","findIndex","optionId","variantDuration","valueStr","format","monthly","undefined","RubleSymbol","description","onConfirmSelect","reverseVariants","onClickOptionChip","title","useState","selectedOption","setSelectedOption","variantId","selectedPayOption","setSelectedPayOption","selectOptionHandler","priceOption","Number","TextWrapper","$lastIndent","H3","$withIndent","Paragraph4","ListContainer","$direction","$wrap","$size","OptionList","selectedOptionId","selectedVariantId","onClickOption","TestDriveOptions","ButtonGroup","Button","size","bType","onClick","payOption","testDriveOption","disabled","selectedPayOptionId","setSelectedPayOptionId","PopupCustomStyles","popup","default","margin","maxHeight","mobile","SelectPurchaseOptionPopup","isOpen","onClose","isOnlyTestDrive","DefaultPopup","justify","align","color","COLORS","customStyles","IndentContainer","$desktop","$mobile","FullWidthListContainer","TestDrivePurchase","AllPurchase","prices","domain","longLabel","sortFunction","hasNonEmptySortField","pluralizeMonths","monthPluralize","filter","item","forEach","pricePromo","valuePromo","requestId","priceItem","unshift","EPriceBuyTypes","Price","this","periodText","buyType","Leasing","Sale","getValue","pricesV2","pricesLeasingPromo","Map","pricesPromo","leasing","priceElement","promoValue","get","possess","convertShopPricesV2","pricesLeasing","convertShopPricesV1","createChip","children","InfoCircleFlip","outlined","saleOption","leasingOptions","String","chip","res","additional","OldValue","checkAvailableDeliveryByPost","services","neededProductId","leftovers","showForDelivery","isCheck","neededServiceId","productId","checkRequiredService","getProductNeedsParams","PRODUCTS","needTv","needInt","InputNameDecorator","nameDecorator","InputSimple","InputPhoneDecorator","phoneDecorator","Container","styled","wideBreakpoints","BannerWrapper","FormWrapper","InputWrapper","CommonInputCss","css","InputPhone","InputName","ButtonWrapper","SubmitButton","BaseButton","FONTS","CallbackButton","withTopSpace","TitleComponent","WrappperComponent","ComponentHeader","labelPrefix","isShowVariants","setIsShowVariants","selectedVariantValue","labelText","NBSP","ST","checked","onChange","firtsVariant","isSelected","data-test","prev","isRotate","SingleArrowDown","$color","$smaller","reverse"],"sourceRoot":""}