{ "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
\n \n \n
\n\n \n '\n }}\n />\n \n \n \n
\n