{ "version": 3, "sources": ["../../../../../../owl-nest/ulule/features/project/src/public/views/detail/components/AdviceModal.tsx", "../../../../../../owl-nest/ulule/features/project/src/public/views/detail/hooks/useReward.ts", "../../../../../../owl-nest/ulule/features/project/src/public/views/detail/components/Rewards/BaseReward.tsx"], "sourcesContent": ["import * as React from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nimport * as consent from '@owl-nest/consent'\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as env from '@owl-nest/config'\n\nimport * as UFE from '../../../../UFE'\n\ntype AdviceModalProps = {\n ctaText?: string\n description?: string\n imageSrc?: string\n link: string\n open: boolean\n setOpen: React.Dispatch>\n title: string\n videoHtml?: string\n}\n\nexport function AdviceModal({\n ctaText,\n description,\n imageSrc,\n link,\n open,\n setOpen,\n title,\n videoHtml,\n}: AdviceModalProps): React.ReactElement {\n const userConfig = env.useUserEnv()\n\n return (\n <>\n {createPortal(\n setOpen(false)}\n buttons={[\n {\n type: 'buttonAsLink',\n props: {\n href: link,\n children: ctaText ?? t('Edit'),\n },\n },\n {\n type: 'linkAsButton',\n props: {\n kind: 'secondary',\n onClick: () => setOpen(false),\n children: t('Later'),\n },\n },\n ]}\n >\n \n
\n {title}\n {description && {description}}\n {imageSrc && {''}}\n
\n {videoHtml && (\n \n )}\n
\n ,\n document.getElementById('modal-container') ?? document.body,\n )}\n \n )\n}\n\nconst Center = styled.span`\n display: block;\n margin: 0 auto;\n text-align: center;\n`\n\nconst ModalWrapper = styled.div`\n ${plume.styles.heading.S} {\n margin-bottom: 15px;\n }\n`\n\nconst Image = styled.img`\n width: 100%;\n margin-top: 11px;\n`\n", "import * as Redux from 'react-redux'\n\nimport * as models from '@owl-nest/models'\nimport * as shadow from '@owl-nest/shadow'\n\nimport * as modalAction from '../../../../actions/modal'\nimport * as projectModel from '../../../models/project'\nimport { RootState } from '../../../../reducers'\nimport { TRACKING_ACTION, TRACKING_SOURCE } from '../utils/trackerEnums'\nimport * as URLs from '../../../utils/URLs'\n\ntype TrackingExtraData = {\n source: TRACKING_SOURCE\n}\n\ntype UseRewardOptions = {\n optionValuesIds?: string[]\n trackingExtraData?: TrackingExtraData\n}\n\ntype UseReward = () => {\n handleClick: (id: number, options: UseRewardOptions) => void\n}\n\nexport const useReward: UseReward = () => {\n const dispatch = Redux.useDispatch()\n const project = Redux.useSelector((state) => state.application.project.data)\n const tracking = shadow.useTracking()\n const projectHasEnded = models.project.isFinished(project)\n\n function handleClick(id: number, { optionValuesIds, trackingExtraData }: UseRewardOptions): void {\n if (!projectHasEnded) {\n if (!models.project.isOrdersEnabled(project)) {\n dispatch(modalAction.toggleModalPaymentDisturbance(true))\n } else {\n const reward = (project.rewards ?? []).find(\n (reward) => reward.id === id || (reward.variants ?? []).some((variant) => variant.id === id),\n )\n if (reward) {\n tracking.ecommerce.track('add_to_cart', {\n currency: project.currency,\n value: reward.price,\n items: [\n {\n item_id: String(reward.id),\n item_name: models.reward.title(reward as models.reward.Reward) ?? '',\n item_brand: models.project.name(project),\n item_variant: reward.id === id ? undefined : String(id),\n price: reward.price,\n quantity: 1,\n },\n ],\n })\n }\n\n if (!models.project.isFinished(project)) {\n tracking.track({\n event: shadow.EVENT_TYPE.GENERIC,\n eventAction: TRACKING_ACTION.ADD_REWARD,\n eventCallback: () => {\n window.location.href = URLs.getCheckoutURL(project.id, { optionValuesIds, rewardID: id })\n },\n eventCategory: shadow.CATEGORY.PROJECT_PAGE,\n eventLabel: trackingExtraData?.source,\n })\n return\n }\n }\n } else {\n if (project?.post_campaign_link) {\n dispatch(modalAction.toggleModalPostCampaign(true))\n }\n }\n }\n\n return { handleClick }\n}\n", "import * as React from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport styled from 'styled-components'\n\nimport * as duvet from '@ulule/duvet'\nimport * as env from '@owl-nest/config'\nimport * as models from '@owl-nest/models'\nimport { useTracking } from '@owl-nest/shadow'\n\nimport { SIDEBAR_MAX_WIDTH } from '../../style'\n\ntype BaseRewardProps = {\n className?: string\n disabled?: boolean\n reward: models.reward.Reward\n onClick: (id: number, optionValuesIds?: string[]) => void\n trackView?: boolean\n}\n\nexport function BaseReward({\n className,\n disabled = false,\n reward,\n onClick,\n trackView,\n}: BaseRewardProps): React.ReactElement {\n const userConfig = env.useUserEnv()\n\n const tracking = useTracking()\n const { ref, inView } = useInView({\n triggerOnce: true,\n })\n\n React.useEffect(() => {\n if (inView && trackView) {\n tracking.ecommerce.track('view_item', {\n items: [\n {\n item_id: String(reward.id),\n item_name: models.reward.title(reward) ?? '',\n item_brand: models.project.name(reward.project),\n price: reward.price,\n },\n ],\n })\n }\n }, [inView])\n\n return (\n // HACK: This wrapper is only here to avoid using forwardRef. When moving to\n // React 19, please remove it and pass `className` and `ref` as props.\n // Come on, don't pretend you didn't see this comment, telling yourself\n // someone else will do it later. Be that person, now is the time to shine.\n // Thank you!\n \n {\n onClick(reward.id)\n },\n variant: (id, optionValuesIds) => {\n id && onClick(Number(id), optionValuesIds)\n },\n }}\n />\n \n )\n}\n\nconst InViewDetector = styled.div`\n max-width: ${SIDEBAR_MAX_WIDTH};\n`\n"], "mappings": "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", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "React", "import_react_dom", "AdviceModal", "ctaText", "description", "imageSrc", "link", "open", "setOpen", "title", "videoHtml", "_a", "_b", "_c", "_d", "_e", "userConfig", "useUserEnv", "Modal", "ModalWrapper", "Center", "styles_exports", "Image", "VideoLoader", "media_exports", "IMAGES", "src_default", "__template", "init_define_process_env", "init_sentry_release_injection_stub", "useReward", "dispatch", "useDispatch", "project", "useSelector", "state", "tracking", "useTracking", "projectHasEnded", "project_exports", "handleClick", "id", "optionValuesIds", "trackingExtraData", "_a", "_b", "toggleModalPostCampaign", "toggleModalPaymentDisturbance", "reward", "variant", "reward_exports", "getCheckoutURL", "init_define_process_env", "init_sentry_release_injection_stub", "React", "BaseReward", "className", "disabled", "reward", "onClick", "trackView", "userConfig", "useUserEnv", "tracking", "useTracking", "ref", "inView", "useInView", "_a", "reward_exports", "project_exports", "InViewDetector", "RewardCard_exports", "id", "optionValuesIds", "src_default", "__template", "SIDEBAR_MAX_WIDTH"] }