{"version":3,"file":"modern.category.DvfQ8Dcl.js","names":[],"sources":["../../src/modern/models/categories.js","../../src/modern/features/categories/styles.js","../../src/modern/features/categories/components/TaggedProjectList.js","../../src/modern/features/categories/components/CategoryPartner.js","../../src/modern/features/categories/index.js"],"sourcesContent":["const scoreMatch = (tag, lang, country) => {\n const langMatch = tag.languages && tag.languages.includes(lang)\n const countryMatch = tag.countries && tag.countries.includes(country)\n\n if (langMatch && countryMatch) {\n return 4\n }\n\n if (countryMatch && !tag.languages.length) {\n return 3\n }\n\n if (langMatch && !tag.countries.length) {\n return 2\n }\n\n if (!tag.countries.length && !tag.languages.length) {\n return 1\n }\n\n return 0\n}\n\nexport const categoryName = (category, lang) => {\n if (category && category.name && category.name[lang]) {\n return category && category.name && category.name[lang]\n }\n\n return category && category.slug\n}\n\nexport const categoryDescription = (category, lang) => {\n if (category && category.description && category.description[lang]) {\n return category && category.description && category.description[lang]\n }\n\n return ''\n}\n\n/**\n * Get a list of unique categories which are filtered by lang & country.\n * This function group all item with the same id (slug).\n * Then, it applies a matching score in function of params lang and country for each grouped item.\n * Finally, it takes the item with the best score.\n * @param {Object[]} list\n * @param {string} lang - selected language\n * @param {string} country - selected country\n * @returns {Object[]}\n * */\nexport const filterCategories = (list = [], lang = '', country = '') => {\n if (!lang || !country || list.length === 0) return []\n\n const matches = {}\n\n list.forEach(item => {\n const uniqueId = item.tag.slug\n const score = scoreMatch(item, lang, country)\n const previousMatch = matches[uniqueId]\n\n if (score && (!previousMatch || previousMatch.score < score)) {\n matches[uniqueId] = { score, item }\n }\n })\n\n return Object.keys(matches)\n .map(tagId => {\n const tagItem = Object.assign({}, matches[tagId].item)\n // Update absolute_url value with current country to avoid redirection\n tagItem.tag.absolute_url = `${tagItem.tag.absolute_url}?country=${country}`\n\n return tagItem\n })\n .sort((prevTag, nextTag) => {\n if (!prevTag.searchbar_position) return 1\n if (!nextTag.searchbar_position) return -1\n if (prevTag.searchbar_position > nextTag.searchbar_position) return 1\n if (prevTag.searchbar_position < nextTag.searchbar_position) return -1\n return 0\n })\n}\n","import { styled } from 'next-yak'\nimport { CallToAction, COLORS, FONTS, SecondaryLink, Title1, Title2 } from '@ulule/owl-kit-components'\n\nimport { rem } from '$utils/styles'\n\nconst DEFAULT_GRID_BASIS = 1146\nconst HEIGHT_SHIFT = 220\nconst SPACING = 16\n\n/**\n * HEADER LAYOUT\n */\n\nexport const CategoryPageCover = styled.div`\n background-color: ${(props) => props.theme.colors.accent || props.theme.colors.primary};\n border-bottom: 4px solid ${(props) => props.theme.colors.primary};\n min-height: ${() => rem(300)};\n\n @media screen and (min-width: 768px) {\n background-image: ${(props) => `url(${props.background})`};\n background-repeat: no-repeat;\n min-height: ${() => rem(350)};\n background-position: center;\n }\n`\n\nexport const CategoryPageHeader = styled.header``\n\nexport const CategoryPageTitleContainer = styled.div`\n margin: 12% auto ${() => `-${rem(68)}`};\n max-width: ${() => rem(DEFAULT_GRID_BASIS)};\n padding: 0 ${() => rem(SPACING)};\n position: relative;\n\n @media screen and (min-width: 768px) {\n margin: auto;\n }\n`\n\n/**\n * HEADER COMPONENTS\n */\n\nexport const CategoryPageLogo = styled.img`\n bottom: ${(props) => (props.withSubtitle ? rem(HEIGHT_SHIFT - SPACING) : rem(HEIGHT_SHIFT - SPACING * 4))};\n margin: 0;\n max-width: 90%;\n position: absolute;\n`\n\nexport const CategoryPageTitle = styled.h1`\n bottom: ${() => rem(HEIGHT_SHIFT - SPACING)};\n color: ${COLORS.PRIMARY_GREY_000};\n font-family: ${FONTS.SECONDARY_FONT};\n font-size: ${() => rem(48)};\n margin: 0;\n position: absolute;\n`\n\nexport const CategoryPageSubtitle = styled(Title1)`\n bottom: ${() => rem(HEIGHT_SHIFT - SPACING * 4)};\n color: ${COLORS.PRIMARY_GREY_000};\n position: absolute;\n`\n\n/**\n * BODY LAYOUT\n */\n\nexport const CategoryPageContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n margin: auto;\n margin-bottom: ${() => rem(52)};\n margin-top: ${() => `-${rem(120)}`};\n max-width: ${() => rem(DEFAULT_GRID_BASIS)};\n padding: 0 ${() => rem(SPACING)};\n\n @media (min-width: 768px) {\n flex-direction: row;\n }\n`\n\nexport const CategoryPageProjectListWrapper = styled.div`\n background-color: white;\n border-radius: 6px;\n margin-bottom: ${() => rem(22)};\n padding: ${() => rem(32)} ${() => rem(16)};\n width: 100%;\n\n @media screen and (min-width: 768px) {\n margin-bottom: 0;\n margin-right: ${() => rem(12)};\n }\n`\n\nexport const CategoryPageRightAside = styled.aside`\n margin: 0 auto;\n max-width: ${() => rem(360)};\n width: 100%;\n`\n\n/**\n * BODY COMPONENTS\n */\n\nexport const CategoryPageInfoCardTitle = styled(Title2)`\n font-size: ${() => rem(22)};\n line-height: ${() => rem(32)};\n margin-bottom: ${() => rem(22)};\n`\n\nexport const CategoryPageInfoCard = styled.div`\n background: #ffffff;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: ${() => rem(20)} ${() => rem(14)};\n width: 100%;\n\n ${CategoryPageInfoCardTitle} {\n text-align: center;\n\n strong {\n color: ${(props) => props.theme.colors.primary || COLORS.PRIMARY_BLUE_500};\n text-transform: uppercase;\n }\n }\n\n @media (min-width: 768px) {\n padding: ${() => rem(23)};\n padding-bottom: ${() => rem(20)};\n }\n`\n\nexport const CategoryPageInfoCardCTA = styled(CallToAction)`\n background-color: ${(props) => props.theme.colors.primary || COLORS.PRIMARY_BLUE_500};\n margin-top: ${() => rem(20)};\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary || COLORS.PRIMARY_BLUE_500};\n opacity: 0.9;\n }\n`\n\nexport const CategoryPageTaggedProjectList = styled.div`\n /* HACK: TODO: If you are reading this and the 'ProjectList' component\n ** has been migrated to SC, please use it here instead of the generic ul/li.\n */\n ul {\n position: relative;\n display: flex;\n flex-flow: row wrap;\n justify-content: center;\n list-style: none;\n margin: ${() => `-${rem(SPACING * 0.5)}`};\n padding: 0;\n\n li {\n box-sizing: border-box;\n display: flex;\n flex: 0 1 auto;\n justify-content: center;\n margin: 0;\n padding: ${() => rem(SPACING / 2)};\n width: 33%;\n\n @media screen and (max-width: 1139px) {\n width: 50%;\n }\n\n @media screen and (max-width: 899px) {\n width: 100%;\n }\n\n @media screen and (max-width: 767px) {\n width: 50%;\n }\n\n @media screen and (max-width: 498px) {\n width: 100%;\n }\n }\n }\n`\n\nexport const CategoryPageTaggedProjectsFooter = styled.footer`\n margin-top: ${() => rem(32)};\n text-align: center;\n`\n\nexport const CategoryPageTaggedProjectsHeader = styled.header`\n display: flex;\n justify-content: space-between;\n margin-bottom: ${() => rem(32)};\n width: 100%;\n\n @media screen and (max-width: 767px) {\n justify-content: center;\n }\n\n /* Sorting bar title */\n & > div {\n display: block;\n }\n\n strong {\n color: ${(props) => props.theme.colors.primary};\n display: block;\n font-size: 26px;\n margin-bottom: ${() => rem(4)};\n margin-right: ${() => rem(10)};\n }\n\n /* Filter dropdown */\n & > span {\n display: none;\n max-height: ${() => rem(42)};\n\n @media screen and (min-width: 768px) {\n display: inline-flex;\n }\n }\n`\n\nexport const CategoryPageTaggedProjectsNoResults = styled.div`\n text-align: center;\n`\n\nexport const CategoryPageTaggedProjectsNoResultsText = styled.div`\n margin-top: ${() => rem(24)};\n`\n\nexport const CategoryPageTaggedProjectsResetFilters = styled(SecondaryLink)`\n align-items: center;\n display: inline-flex;\n height: ${() => rem(50)};\n\n > div:first-child {\n color: ${COLORS.PRIMARY_GREY_500};\n margin-right: ${() => rem(5)};\n transform: rotate(-180deg);\n transition: transform 200ms ease-out;\n }\n\n &:hover {\n > div:first-child {\n transition: transform 400ms ease-in;\n transform: rotate(180deg);\n }\n }\n`\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { t, tc } from '@owl-nest/localize'\nimport { DropdownFilter, LoadMoreButton, Icon } from '@ulule/owl-kit-components'\n\nimport { projectShape } from '$utils/prop-types'\n\nimport ProjectList from '$components/ProjectsList/ProjectsList'\nimport SortingBar from '$features/discover/components/sortingbar'\nimport { withProjectResults, DEFAULT_LIMIT } from '$hocs/ProjectSearchResults'\n\nimport * as S from '../styles'\n\nconst CURRENCY_RATES = window.CURRENCIES && { ...window.CURRENCIES.RATES }\nconst { noResults: NO_RESULTS_IMAGE, remindMe: REMIND_ME_IMAGE } = { ...window.CATEGORY_PAGE_TAGGED_PROJECTS_ASSETS }\nconst EMPTY_FILTERS = {}\nconst EMPTY_RESULTS = []\n\nconst TaggedProjectList = ({\n categoryName,\n categorySlug,\n currentFilters = EMPTY_FILTERS,\n currentCurrency,\n currentLanguage,\n currentSorting = null,\n errorFetchingMore = false,\n filters = [],\n isFetching = true,\n isFetchingMore = false,\n loadMoreProjects,\n moreProjectsToFetch = false,\n noProjectWithInitialParams = false,\n projectCount = 0,\n results = EMPTY_RESULTS,\n sorting,\n updateFilter,\n updateSorting,\n userIsAuthenticated = false,\n}) => {\n return noProjectWithInitialParams ? null : (\n \n \n updateSorting({ value })}\n withBigTitle\n />\n {\n updateFilter(filters[0].name, event.target.value)\n }}\n options={filters[0].options}\n useDefault\n value={currentFilters.statuses[0]}\n />\n \n\n {!projectCount && !isFetching ? (\n // TODO: Eventually put in common with the channel page\n \n
\n \n {tc('[strong: No results]. We invite you to change your search criteria.', { strong: })}\n \n updateFilter('statuses', 'all')}>\n \n {t('Reinitialize filters')}\n \n \n ) : (\n \n \n \n )}\n\n {moreProjectsToFetch && (\n \n \n \n )}\n \n )\n}\n\nTaggedProjectList.propTypes = {\n categoryName: PropTypes.string.isRequired,\n currentFilters: PropTypes.objectOf(PropTypes.array),\n currentCurrency: PropTypes.string.isRequired,\n currentLanguage: PropTypes.string.isRequired,\n currentSorting: PropTypes.string,\n errorFetchingMore: PropTypes.bool,\n filters: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n options: PropTypes.arrayOf(PropTypes.shape({})),\n position: PropTypes.number,\n }),\n ).isRequired,\n isFetching: PropTypes.bool,\n isFetchingMore: PropTypes.bool,\n loadMoreProjects: PropTypes.func.isRequired,\n moreProjectsToFetch: PropTypes.bool,\n noProjectWithInitialParams: PropTypes.bool,\n projectCount: PropTypes.number,\n results: PropTypes.arrayOf(projectShape),\n sorting: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ).isRequired,\n updateFilter: PropTypes.func.isRequired,\n updateSorting: PropTypes.func.isRequired,\n userIsAuthenticated: PropTypes.bool,\n}\n\nexport default withProjectResults(TaggedProjectList)\n","import * as React from 'react'\nimport * as PropTypes from 'prop-types'\nimport { styled } from 'next-yak'\n\nimport { COLORS, RoleTag, styles as S } from '@ulule/owl-kit-components/next'\nimport { getResourceUrl } from '$models/resources'\n\nimport { t } from '@owl-nest/localize'\n\nimport * as Styles from '../styles'\n\nconst Wrapper = styled(Styles.CategoryPageInfoCard)`\n margin: 16px 0;\n`\n\nconst OurPicks = styled(RoleTag)`\n display: block;\n margin: 0 auto 20px auto;\n`\n\nconst Heading = styled(S.heading.S)`\n text-align: center;\n`\n\nconst PartnerLogo = styled.img`\n max-width: 50%;\n margin: 20px auto;\n`\n\nconst CallToAction = styled(S.button.CallToAction)`\n margin: 20px 0 10px 0;\n color: ${(props) => props.newColor};\n border-color: ${(props) => props.newColor};\n\n &:hover {\n background-color: ${(props) => props.newColor};\n color: ${COLORS.PRIMARY_GREY_000};\n border-color: ${(props) => props.newColor};\n }\n`\n\nconst CategoryPartner = ({ categoryName, color, description, link, logo, partnerName }) => {\n const logoUrl = getResourceUrl(logo)\n return (\n \n {t('Right now')}\n \n {t('Launch your %(category)s project with the support of %(partner)s', {\n category: categoryName,\n partner: partnerName,\n })}\n \n \n \n \n {t('Learn more')}\n \n \n )\n}\n\nCategoryPartner.propTypes = {\n categoryName: PropTypes.string,\n description: PropTypes.string,\n logo: PropTypes.shape({\n value: PropTypes.string.isRequired,\n versions: PropTypes.shape({\n full: PropTypes.shape({\n height: PropTypes.string,\n url: PropTypes.string.isRequired,\n width: PropTypes.string,\n }).isRequired,\n }),\n }),\n link: PropTypes.string,\n color: PropTypes.string,\n partnerName: PropTypes.string,\n}\n\nexport default CategoryPartner\n","import * as React from 'react'\nimport * as ReactDOM from 'react-dom/client'\nimport PropTypes from 'prop-types'\nimport { YakThemeProvider } from 'next-yak'\n\nimport { t, tc } from '@owl-nest/localize'\nimport { COLORS, styles as S } from '@ulule/owl-kit-components/next'\n\nimport { getCurrentLanguage } from '$features/init/language'\nimport { getCurrentCurrency } from '$features/init/currency'\nimport { getResourceUrl } from '$models/resources'\nimport config from '$utils/config'\nimport { categoryDescription } from '$models/categories'\n\nimport TaggedProjectList from './components/TaggedProjectList'\nimport CategoryPartner from './components/CategoryPartner'\n\nimport * as AppStyle from './styles'\n\nconfig.set({\n category: { ...window.CATEGORY_DATA },\n searchData: { ...window.CATEGORY_PAGE_SEARCH_DATA },\n})\n\nconst EMPTY_CATEGORY = {}\n\nconst CategoryPage = ({ category = EMPTY_CATEGORY, currentCurrency, currentLanguage, presaleCreationUrl }) => {\n const {\n accent_color: accentColor,\n background,\n bg_color: bgColor,\n id,\n name,\n partner,\n slug,\n subtitle,\n title,\n } = category\n const currentUser = window.UFE && window.UFE.user\n const titleImage = getResourceUrl(title)\n const { is_authenticated: userIsAuthenticated } = currentUser\n\n const theme = {\n colors: {\n accent: accentColor,\n primary: bgColor || COLORS.PRIMARY_BLUE_500,\n },\n }\n\n const initialSearchSettings = {\n filters: {\n categories: [id],\n statuses: ['all'],\n },\n ignoreQueryParams: false,\n sorting: 'popular',\n }\n const searchData = config.get('searchData')\n\n return (\n \n \n \n \n \n {titleImage ? (\n \n ) : (\n {name}\n )}\n {subtitle && {subtitle}}\n \n \n\n \n \n \n \n\n \n \n \n {tc('You have a[br][strong: %(category)s] project?', {\n strong: ,\n br:
,\n category: name,\n })}\n \n {!partner && (\n \n )}\n \n {t('Launch my project')}\n \n \n {partner && (\n \n )}\n \n \n \n \n )\n}\n\nCategoryPage.propTypes = {\n category: PropTypes.shape({\n accent_color: PropTypes.string,\n background: PropTypes.shape({\n versions: PropTypes.shape({\n full: PropTypes.shape({\n height: PropTypes.number,\n url: PropTypes.string,\n width: PropTypes.number,\n }),\n }),\n }),\n bg_color: PropTypes.string,\n cta_description: PropTypes.string,\n description: PropTypes.string,\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n name: PropTypes.string.isRequired,\n title: PropTypes.shape({\n value: PropTypes.string.isRequired,\n versions: PropTypes.shape({\n full: PropTypes.shape({\n height: PropTypes.string,\n url: PropTypes.string.isRequired,\n width: PropTypes.string,\n }).isRequired,\n }),\n }),\n }),\n currentCurrency: PropTypes.string.isRequired,\n currentLanguage: PropTypes.string.isRequired,\n presaleCreationUrl: PropTypes.string.isRequired,\n}\n\nconst renderApp = (currency, language) => {\n const categoryAppContainer = document.getElementById('react-category-app')\n const { presaleCreationUrl } = categoryAppContainer && categoryAppContainer.dataset\n\n const root = ReactDOM.createRoot(categoryAppContainer)\n root.render(\n ,\n )\n}\n\n// Initialize application after fetching geolocation in init.es6.js\n// TODO: @ludovic: init a React application with portals to\n// render faster elements that not required location\nwindow.addEventListener('js:location:loaded', async () => {\n const currentLanguage = getCurrentLanguage()\n\n let currentCurrency\n try {\n currentCurrency = await getCurrentCurrency()\n } catch (error) {\n console.error(error)\n }\n\n renderApp(currentCurrency, currentLanguage)\n})\n"],"mappings":"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"}