{"version":3,"file":"shared_util_socialLinks-DmZhS0nE.js","sources":["../src/app/shared/components/molecules/SEO/index.tsx","../src/app/shared/utils/urls/index.ts","../src/app/shared/utils/socialLinks.ts"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Helmet } from 'react-helmet-async';\n\nimport { useAnalyticsContext } from 'app/shared/utils';\n\ninterface SEOProps {\n title: string;\n description?: string;\n image?: string;\n ogTitle?: string;\n ogDescription?: string;\n ldJson?: string | object;\n customTitleTemplate?: string;\n canonicalUrlPath?: string;\n noIndex?: boolean;\n noFollow?: boolean;\n}\n\nconst defaultSEO = {\n title: 'Secret gigs and intimate concerts',\n description:\n 'Gigs in intimate spaces around the world. Sofar Sounds is a global movement which brings the magic back to live music. Sign up today to host, play or attend.',\n image:\n '//dax2lgcd0wbaz.cloudfront.net/assets/sofar-share-13e30a152beb75c98c298a8ade6a511fe8514405783b2c38a4bdc116c1bfa2c6.jpg',\n siteName: 'Sofar Sounds',\n url: 'https://www.sofarsounds.com',\n};\n\nexport const SEO: React.FC> = ({\n title,\n description = defaultSEO.description,\n image,\n ogTitle,\n ogDescription,\n ldJson,\n customTitleTemplate,\n canonicalUrlPath,\n noIndex = false,\n noFollow = false,\n}) => {\n const titleTemplate = customTitleTemplate || `%s | ${defaultSEO.siteName}`;\n\n const { segmentPage } = useAnalyticsContext();\n useEffect(() => {\n segmentPage(title);\n }, [segmentPage, title]);\n\n const noIndexNoFollowTag = () => {\n if (noIndex && noFollow) {\n return ;\n } else if (noIndex) {\n return ;\n } else if (noFollow) {\n return ;\n }\n\n return null;\n };\n\n return (\n \n {title}\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n {noIndexNoFollowTag()}\n {ldJson && }\n\n \n {canonicalUrlPath && (\n \n )}\n \n );\n};\n\nexport default SEO;\n","export const validateUrlNoHttp = (url: string) => {\n const reg = new RegExp(\n // eslint-disable-next-line\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,18}(:[0-9]{1,5})?(\\/.*)?$/\n );\n\n return !!url.match(reg);\n};\n","import { object as YupObject, string as YupString } from 'yup';\n\nimport { get } from 'app/shared/utils/get';\nimport { validateUrlNoHttp } from 'app/shared/utils/urls';\nimport { SocialUrlKey } from 'app/shared/typings/socialUrls';\n\nexport const sofarSoundsSocialUrls: { [key: string]: string } = {\n urlFacebook: 'http://www.facebook.com/sofarsounds',\n urlYoutube: 'http://www.youtube.com/sofarsounds',\n urlTwitter: 'http://www.twitter.com/sofarsounds',\n urlInstagram: 'http://www.instagram.com/sofarsounds',\n urlSpotify:\n 'https://open.spotify.com/artist/4Xo8wtSEkrCKEVqioeNlTk?si=ZOpr-FtgQIuQM3xbvJa2wA',\n urlTiktok: 'https://www.tiktok.com/@sofarsounds',\n};\n\n// See also similar SocialUrlsConfig in backend\n\n// Order of entries below is SIGNIFICANT - i.e. the order social links are displayed in UI everywhere\nexport const artistSocialUrls: SocialUrlKey[] = [\n 'urlFacebook',\n 'urlTwitter',\n 'urlWebsite',\n 'urlSoundcloud',\n 'urlYoutube',\n 'urlInstagram',\n 'urlTiktok',\n 'urlBandcamp',\n 'urlSpotify',\n 'urlSupport',\n];\n\n// Order of entries below is SIGNIFICANT - i.e. the order social links are displayed in UI everywhere\nexport const citySocialUrls: SocialUrlKey[] = [\n 'urlFacebook',\n 'urlTwitter',\n 'urlYoutube',\n 'urlInstagram',\n 'urlVKontacte',\n 'urlSpotify',\n];\n\n// Order of entries below is SIGNIFICANT - i.e. the order social links are displayed in UI everywhere\nexport const venueSocialUrls: SocialUrlKey[] = [\n 'urlFacebook',\n 'urlTwitter',\n 'urlWebsite',\n 'urlInstagram',\n 'urlTiktok',\n];\n\n// Please keep in alpha order by key\nexport const socialUrls: {\n [key in SocialUrlKey]: {\n name: string;\n };\n} = {\n urlBandcamp: {\n name: 'Bandcamp',\n },\n urlFacebook: {\n name: 'Facebook',\n },\n urlInstagram: {\n name: 'Instagram',\n },\n urlSoundcloud: {\n name: 'SoundCloud',\n },\n urlSpotify: {\n name: 'Spotify',\n },\n urlSupport: {\n name: 'Support',\n },\n urlTiktok: {\n name: 'TikTok',\n },\n urlTwitter: {\n name: 'X (Twitter)',\n },\n urlVKontacte: {\n name: 'VKontakte',\n },\n urlWebsite: {\n name: 'Website',\n },\n urlYoutube: {\n name: 'YouTube',\n },\n};\n\nexport const getSocialUrlsFormInitialValues = (\n socialUrlKeys: string[],\n contentProps: any = {},\n dataKey = 'socialUrls'\n): { [key: string]: string } =>\n socialUrlKeys.reduce(\n (obj, key) => ({\n ...obj,\n [key]: get(contentProps, `${dataKey}.${key}`, '') || '',\n }),\n {}\n );\n\nexport const getSocialUrlsSubmitVariable = (values: any) =>\n Object.keys(socialUrls)\n .filter((key: string) => values.socialUrls.hasOwnProperty(key))\n .reduce(\n (obj, key) => ({ ...obj, [key]: values.socialUrls[key] || null }),\n {}\n );\n\nexport const getSocialUrlsFormSchema = (\n intl: any,\n alternateValidationMessageTextKeys?: any,\n useProfileValidationMessage?: boolean\n) =>\n YupObject().shape(\n Object.keys(socialUrls).reduce(\n (obj, key) => ({\n ...obj,\n [key]: YupString()\n .nullable()\n .test(\n 'isUrl',\n alternateValidationMessageTextKeys &&\n alternateValidationMessageTextKeys[key]\n ? intl.formatMessage({\n id: alternateValidationMessageTextKeys[key],\n })\n : useProfileValidationMessage\n ? intl.formatMessage(\n {\n id: 'form.fieldMustBeValidProfileUrl',\n },\n {\n field: `${socialUrls[key as SocialUrlKey].name} URL`,\n platformName: socialUrls[key as SocialUrlKey].name,\n }\n )\n : intl.formatMessage(\n {\n id: 'form.fieldMustBeValidUrl',\n },\n {\n field: `${socialUrls[key as SocialUrlKey].name} URL`,\n }\n ),\n function (value) {\n return value ? validateUrlNoHttp(value) : true;\n }\n ),\n }),\n {}\n )\n );\n"],"names":["defaultSEO","SEO","title","description","image","ogTitle","ogDescription","ldJson","customTitleTemplate","canonicalUrlPath","noIndex","noFollow","titleTemplate","segmentPage","useAnalyticsContext","useEffect","noIndexNoFollowTag","jsxs","Helmet","jsx","validateUrlNoHttp","url","reg","sofarSoundsSocialUrls","artistSocialUrls","citySocialUrls","venueSocialUrls","socialUrls","getSocialUrlsFormInitialValues","socialUrlKeys","contentProps","dataKey","obj","key","get","getSocialUrlsSubmitVariable","values","getSocialUrlsFormSchema","intl","alternateValidationMessageTextKeys","useProfileValidationMessage","YupObject","YupString","value"],"mappings":"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"}