{ "version": 3, "sources": ["../../src/modern/models/resources.js", "../../src/modern/components/ProjectsList/ProjectsList.js", "../../src/modern/components/ProjectsList/ProjectsListItem.js", "../../src/modern/components/ProjectsList/ProjectsListPlaceholderItem.js", "../../src/modern/components/Project/Modals.js", "../../src/modern/utils/misc.js"], "sourcesContent": ["import { getCurrentLanguage, getDefaultLanguage } from '$features/init/language'\n\nexport const getResourceUrl = (resource, size = 'full') => {\n return resource && resource.versions && resource.versions[size] && resource.versions[size].url\n}\n\nexport const getResourceWithLanguage = (\n resource,\n language = getCurrentLanguage(),\n fallbackLanguage = getDefaultLanguage()\n) => {\n if (!resource) return null\n\n if (resource[language]) {\n return resource[language]\n }\n\n if (resource[fallbackLanguage]) {\n return resource[fallbackLanguage]\n }\n\n return Object.values(resource).find(value => value !== '')\n}\n", "import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport * as cookie from '$utils/cookie'\nimport { dataUTMPageContextShape } from '$utils/prop-types'\n\nimport ProjectsListItem from './ProjectsListItem'\nimport ProjectsListPlaceholderItem from './ProjectsListPlaceholderItem'\nimport { ModalProjectRemindMe, ModalProjectNoAuth } from '../Project/Modals'\n\nconst COOKIE_MODAL_NAMESPACE = 'ul_modal_remind_me'\n\nclass ProjectsList extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n isOpen: false,\n modalShowedUp: false\n }\n }\n\n handleCloseModal = () => {\n this.setState({\n isOpen: false\n })\n }\n\n handleModal = (project, status) => {\n // we don't want to show modal for unlike event\n if (status && status === 'neutral') return\n\n const { isAuthenticated } = this.props\n const hasCookie = cookie.get(COOKIE_MODAL_NAMESPACE) === 'true'\n if (hasCookie) {\n this.setState({\n modalShowedUp: true\n })\n }\n\n // do not display modal if project ended\n // also shutdown the modal if cookie is here and\n // user is authenticated\n if ((isAuthenticated && hasCookie) || project.finished) {\n this.setState({\n isOpen: false\n })\n return\n }\n\n this.setState(\n {\n isOpen: this.state.isOpen ? false : true\n },\n () => {\n cookie.set(COOKIE_MODAL_NAMESPACE, true, { expires: +new Date(), path: '/', domain: 'ulule.com' })\n }\n )\n }\n\n onError = () => {\n const { isAuthenticated } = this.props\n\n if (!isAuthenticated) {\n this.setState({\n isOpen: true\n })\n }\n\n return\n }\n\n render() {\n const {\n dataUTMPageContext,\n nbPlaceholders,\n noCss,\n currentLanguage,\n currentCurrency,\n rates,\n isAuthenticated,\n urls,\n modalImg,\n projects,\n isLikeCompact\n } = this.props\n\n let list\n if (nbPlaceholders) {\n if (nbPlaceholders < 0) {\n list = projects && new Array(-nbPlaceholders).fill(null).concat(projects)\n } else {\n list = projects && projects.concat(new Array(nbPlaceholders).fill(null))\n }\n } else {\n list = projects\n }\n\n const defaultClasses = 'b-list b-list--inline'\n\n return (\n <ul className={`b-blink__projects ${noCss ? '' : defaultClasses}`}>\n {list &&\n list.length > 0 &&\n list.map((project, index) => {\n return (\n <li\n className={`b-list__item ${!project && 'placeholder'}`}\n key={`project-${index}`}\n data-project-id={project ? project.id : undefined}\n data-selected-project={project && project.is_featured ? 'true' : undefined}\n data-page-identifier={dataUTMPageContext && dataUTMPageContext.value}\n data-page-type={dataUTMPageContext && dataUTMPageContext.type}\n >\n {project ? (\n <ProjectsListItem\n rates={rates}\n project={project}\n currentLanguage={currentLanguage}\n currentCurrency={currentCurrency}\n action={{\n onBeforeAction: this.checkAuth,\n onSuccess: this.handleModal,\n onError: this.onError\n }}\n isAuthenticated={isAuthenticated}\n isLikeCompact={isLikeCompact}\n />\n ) : (\n <ProjectsListPlaceholderItem />\n )}\n </li>\n )\n })}\n {isAuthenticated && (\n <ModalProjectRemindMe isOpen={this.state.isOpen} onClose={this.handleCloseModal} modalImg={modalImg} />\n )}\n {!isAuthenticated && (\n <ModalProjectNoAuth\n isOpen={this.state.isOpen}\n urls={urls}\n isAuthenticated={isAuthenticated}\n handleClick={this.handleModal}\n onClose={this.handleCloseModal}\n modalImg={modalImg}\n />\n )}\n </ul>\n )\n }\n}\n\nProjectsList.defaultProps = {\n nbPlaceholders: 0,\n noCss: false,\n isLikeCompact: true\n}\n\nProjectsList.propTypes = {\n dataUTMPageContext: dataUTMPageContextShape,\n projects: PropTypes.arrayOf(PropTypes.object).isRequired,\n currentLanguage: PropTypes.string.isRequired,\n currentCurrency: PropTypes.string.isRequired,\n isLikeCompact: PropTypes.bool,\n nbPlaceholders: PropTypes.number,\n // NOTE: The noCss prop is here to ensure this component can be used both with CSS and CSS-in-JS\n // environments, until the component is fully migrated to styled-components.\n noCss: PropTypes.bool\n}\n\nexport default ProjectsList\n", "import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport { RoundButton } from '@ulule/owl-kit-components'\nimport * as duvet from '@ulule/duvet'\nimport { t, tn } from '@ulule/localize'\nimport { text } from '@owl-nest/utils'\n\nimport { getComingSoonLabel, getProgress, getShortCountdown, getFinishTrad, getStatus } from '$models/projects'\nimport { updateUserRole, saveAction } from '../../features/init/services'\n\nconst USER_ROLE_STATUS = {\n neutral: null,\n listed: 'fan',\n created: 'owner',\n backed: 'supporter',\n}\n\nconst ProjectCardWrapper = styled.div`\n display: flex;\n position: relative;\n flex-direction: column;\n width: 100%;\n min-width: 230px;\n max-width: 310px;\n`\n\nconst Button = styled(RoundButton)`\n position: relative;\n padding: 10px;\n`\n\nconst getRelatedUserRole = (userRole, isLikeCompact) => {\n switch (userRole) {\n case 'fan': {\n const fanLabel = isLikeCompact ? t('Listed') : t('Signed up for the launch')\n return {\n status: 'listed',\n label: fanLabel,\n apiAction: 'unlike',\n roundButton: {\n text: fanLabel,\n icon: 'active-heart',\n isCompact: isLikeCompact,\n },\n }\n }\n\n case 'supporter':\n return {\n status: 'backed',\n label: t('Backed'),\n apiAction: null,\n roundButton: {\n text: t('Backed'),\n icon: 'backed',\n isCompact: isLikeCompact,\n },\n }\n\n case 'owner':\n case 'editor':\n case 'moderator':\n return {\n status: 'created',\n label: t('Created'),\n apiAction: null,\n roundButton: {\n text: t('Created'),\n icon: 'created',\n isCompact: isLikeCompact,\n },\n }\n\n default: {\n const neutralLabel = isLikeCompact ? t('Add to my list') : t('Sign up for the launch')\n return {\n status: 'neutral',\n label: neutralLabel,\n apiAction: 'like',\n roundButton: {\n text: neutralLabel,\n icon: 'inactive-heart',\n isCompact: isLikeCompact,\n },\n }\n }\n }\n}\n\nconst LOCALSTORAGE_NAMESPACE = 'ul_modalShowedUp'\n\nclass ProjectsListItem extends React.Component {\n constructor(props) {\n super(props)\n const { project, isLikeCompact } = this.props\n\n if (project && project.user_role === undefined) return\n\n this.state = {\n ...getRelatedUserRole(project && project.user_role, isLikeCompact),\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const status = this.state && this.state.status\n const prevStatus = prevState && prevState.status\n if (status !== prevStatus) {\n if (this.props.project && this.props.project.user_role === undefined) return\n this.setState({\n ...getRelatedUserRole(USER_ROLE_STATUS[this.state.status], this.props.isLikeCompact),\n })\n }\n\n if (window.localStorage.getItem(LOCALSTORAGE_NAMESPACE) === 'true') {\n return {\n modalShowedUp: true,\n }\n }\n }\n\n onClick = (event) => {\n event.preventDefault()\n const { project, action, isAuthenticated } = this.props\n const { status } = this.state\n if (isAuthenticated) {\n if (status && (status === 'created' || status === 'backed')) return\n\n const newStatus = status && status === 'listed' ? 'neutral' : 'listed'\n\n this.setState({\n status: newStatus,\n })\n\n updateUserRole(project && project.id, this.state.apiAction).then(() => {\n if (window.dataLayer) {\n window.dataLayer.push({\n event: 'socialInt',\n socialNetwork: 'Ulule',\n socialAction: newStatus === 'listed' ? 'Like' : 'Unlike',\n socialTarget: project && project.absolute_url,\n ululeProjectId: project && project.id,\n })\n }\n action.onSuccess(project, newStatus)\n }, action.onError)\n return\n }\n saveAction(project.id, this.state.apiAction)\n\n action.onError()\n return\n }\n\n isProjectAlmostEnded = () => {\n const { project } = this.props\n\n const FourtyHeightHours = 48 * 3600\n const projectEndDate = +new Date(project && project.date_end).toISOString()\n const today = +new Date().toISOString()\n\n if (today - projectEndDate < FourtyHeightHours) {\n return true\n }\n\n return false\n }\n\n handleCloseModal = () => {\n this.setState({\n isOpen: false,\n })\n }\n\n render() {\n const { currentLanguage, currentCurrency, rates, project, isLikeCompact } = this.props\n const progress = getProgress(project)\n let countdownText = ''\n if (project && project.date_end) {\n countdownText = getShortCountdown(project)\n }\n const isOnline = project && project.status === 'online'\n const isProjectFinished = project && project.finished\n\n const action =\n project && project.user_role !== undefined\n ? {\n ...this.state.roundButton,\n onClick: (event) => this.onClick(event),\n }\n : undefined\n\n let textFinishProject = t('Finished')\n if (isProjectFinished) {\n textFinishProject = getFinishTrad(project.date_end)\n }\n\n return (\n <React.Fragment>\n {project && (\n <ProjectCardWrapper>\n <duvet.CardTypeSelector\n mainImage={\n project &&\n project.main_image &&\n project.main_image.versions &&\n project.main_image.versions['2x'] &&\n project.main_image.versions['2x'].url\n }\n cardType=\"classic\"\n action={action}\n overrideIsProjectOnline={isOnline}\n project={{ ...project, language: currentLanguage, main_image: { [project.lang]: project.main_image } }}\n rates={rates}\n targetCurrency={currentCurrency}\n projectTranslation={{\n backerCount: tn(\n '%s contribution',\n '%s contributions',\n (project && project.supporters_count) || 0,\n text.numberToLocaleString(project.orders_count || project.supporters_count),\n ),\n comingSoon: getComingSoonLabel(project, Boolean(window.UFE.user.is_staff)),\n extraTime: t('Extension'),\n finished: textFinishProject,\n highlights: t('Highlights'),\n progressInfo: t('%(percent)s reached', {\n percent: `${text.numberToLocaleString(progress)}%`,\n }),\n shortCountdown: countdownText,\n status:\n getStatus({\n isOnline,\n endDate: project.date_end,\n extraTime: project.is_in_extra_time,\n finished: project.finished,\n }) ?? (isOnline ? countdownText : undefined),\n }}\n />\n {!isLikeCompact && <Button {...action} isCompact={false} />}\n </ProjectCardWrapper>\n )}\n </React.Fragment>\n )\n }\n}\n\nProjectsListItem.propTypes = {\n project: PropTypes.shape({\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n subtitle: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n absolute_url: PropTypes.string.isRequired,\n date_end: PropTypes.string,\n is_featured: PropTypes.bool,\n }).isRequired,\n currentLanguage: PropTypes.string.isRequired,\n currentCurrency: PropTypes.string.isRequired,\n isLikeCompact: PropTypes.bool.isRequired,\n rates: PropTypes.object.isRequired,\n}\n\nexport default ProjectsListItem\n", "import React from 'react'\n\nconst ProjectsListPlaceholderItem = () => (\n <div className=\"b-blink__link\">\n <div className=\"b-blink__cover\" />\n <div className=\"b-blink__title\" />\n <p className=\"b-blink__meta\">\n <strong className=\"b-blink__author\" />\n <span className=\"b-blink__category\" />\n </p>\n <p className=\"b-blink__meta\">\n <span className=\"b-blink__amount\">\n <svg\n className=\"b-icon b-icon--egg-0 b-blink__egg\"\n dangerouslySetInnerHTML={{\n __html: '<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-egg-0\" />'\n }}\n />\n <span className=\"amount-text\" />\n </span>\n <span className=\"b-blink__timeleft\" />\n </p>\n </div>\n)\n\nexport default ProjectsListPlaceholderItem\n", "import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport { tc, t } from '@ulule/localize'\nimport { NotificationModal, PrimaryLink, Pastille, Title2, RegularText, CallToAction } from '@ulule/owl-kit-components'\n\nimport { mainUrlsShape } from '$utils/prop-types'\nimport { addQueryParamsToUrl } from '$utils/misc'\n\nconst StyledCallToAction = styled(CallToAction)``\nconst StyledPastille = styled(Pastille)``\n\nconst ModalContent = styled.div`\n text-align: center;\n\n ${StyledPastille} {\n margin: auto;\n transform: translateY(-90px);\n margin-bottom: -90px;\n }\n\n ${StyledCallToAction} {\n margin-top: 30px;\n }\n\n ${Title2} {\n margin-bottom: 10px;\n margin-top: 10px;\n }\n`\n\nexport const ModalProjectRemindMe = ({ isOpen, modalImg, onClose }) => (\n <NotificationModal isClosable overlay isOpen={isOpen} onClosing={onClose}>\n <ModalContent>\n <StyledPastille>\n <img\n src={modalImg && modalImg.x1}\n srcSet={`${modalImg && modalImg.x2} 2x, ${modalImg && modalImg.x3} 3x`}\n alt=\"\"\n />\n </StyledPastille>\n <Title2 align=\"center\">{t('Project listed')}</Title2>\n <RegularText>{t('You will be notified by email 48 hours before project ends.')}</RegularText>\n <StyledCallToAction onClick={onClose}>{t('Ok, thanks')}</StyledCallToAction>\n </ModalContent>\n </NotificationModal>\n)\n\nModalProjectRemindMe.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func,\n modalImg: PropTypes.shape({\n '1x': PropTypes.string,\n '2x': PropTypes.string,\n '3x': PropTypes.string\n })\n}\n\nconst addNextUrl = url => {\n const params = { next: window.location.href }\n return addQueryParamsToUrl(url, params)\n}\n\nexport const ModalProjectNoAuth = ({ isOpen, urls, modalImg, onClose }) => (\n <NotificationModal isClosable overlay isOpen={isOpen} onClosing={onClose}>\n <ModalContent>\n <StyledPastille>\n <img\n src={modalImg && modalImg.x1}\n srcSet={`${modalImg && modalImg.x2} 2x, ${modalImg && modalImg.x3} 3x`}\n alt=\"\"\n />\n </StyledPastille>\n <Title2 align=\"center\">{t('Add to my list')}</Title2>\n <RegularText>\n {tc(\n \"[login: Login] to your Ulule account to like this project.[br] You don't have an account yet ? [br][signup: Signup].\",\n {\n login: <PrimaryLink href={urls && addNextUrl(urls.signin)} />,\n signup: <PrimaryLink href={urls && addNextUrl(urls.join)} />,\n br: <br />\n }\n )}\n </RegularText>\n </ModalContent>\n </NotificationModal>\n)\n\nModalProjectNoAuth.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n urls: mainUrlsShape,\n isAuthenticated: PropTypes.bool,\n handleClick: PropTypes.func.isRequired,\n onClose: PropTypes.func,\n modalImg: PropTypes.shape({\n '1x': PropTypes.string,\n '2x': PropTypes.string,\n '3x': PropTypes.string\n })\n}\n", "const queryParams = (params) => {\n return Object.keys(params)\n .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))\n .join('&')\n}\n\nexport const addQueryParamsToUrl = (baseUrl, params) => {\n if (!params) return baseUrl\n\n const character = !baseUrl.includes('?') ? '?' : '&'\n return `${baseUrl}${character}${queryParams(params)}`\n}\n"], "mappings": "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", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "getResourceUrl", "resource", "size", "getResourceWithLanguage", "language", "getCurrentLanguage", "fallbackLanguage", "getDefaultLanguage", "value", "init_define_process_env", "init_sentry_release_injection_stub", "import_react", "import_prop_types", "init_define_process_env", "init_sentry_release_injection_stub", "import_react", "import_prop_types", "import_localize", "USER_ROLE_STATUS", "_a", "ProjectCardWrapper", "src_default", "__template", "_b", "Button", "RoundButton_default", "getRelatedUserRole", "userRole", "isLikeCompact", "fanLabel", "neutralLabel", "LOCALSTORAGE_NAMESPACE", "ProjectsListItem", "React", "props", "__publicField", "event", "project", "action", "isAuthenticated", "status", "newStatus", "updateUserRole", "saveAction", "FourtyHeightHours", "projectEndDate", "__spreadValues", "prevProps", "prevState", "prevStatus", "currentLanguage", "currentCurrency", "rates", "progress", "getProgress", "countdownText", "getShortCountdown", "isOnline", "isProjectFinished", "__spreadProps", "textFinishProject", "getFinishTrad", "CardTypeSelector", "text_exports", "getComingSoonLabel", "getStatus", "PropTypes", "ProjectsListItem_default", "init_define_process_env", "init_sentry_release_injection_stub", "import_react", "ProjectsListPlaceholderItem", "React", "ProjectsListPlaceholderItem_default", "init_define_process_env", "init_sentry_release_injection_stub", "import_react", "import_prop_types", "import_localize", "init_define_process_env", "init_sentry_release_injection_stub", "queryParams", "params", "k", "addQueryParamsToUrl", "baseUrl", "character", "_a", "StyledCallToAction", "src_default", "CallToAction", "__template", "_b", "StyledPastille", "Pastille_default", "_c", "ModalContent", "Title2", "ModalProjectRemindMe", "isOpen", "modalImg", "onClose", "React", "NotificationModal", "RegularText", "PropTypes", "addNextUrl", "url", "params", "addQueryParamsToUrl", "ModalProjectNoAuth", "urls", "PrimaryLink", "mainUrlsShape", "COOKIE_MODAL_NAMESPACE", "ProjectsList", "React", "props", "__publicField", "project", "status", "isAuthenticated", "hasCookie", "get", "set", "dataUTMPageContext", "nbPlaceholders", "noCss", "currentLanguage", "currentCurrency", "rates", "urls", "modalImg", "projects", "isLikeCompact", "list", "index", "ProjectsListItem_default", "ProjectsListPlaceholderItem_default", "ModalProjectRemindMe", "ModalProjectNoAuth", "dataUTMPageContextShape", "PropTypes", "ProjectsList_default"] }