{"version":3,"sources":["containers/HomePage/Testimonial.js","../index.js","components/ParallaxHero/config.js","components/ParallaxHero/index.js","containers/HomePage/index.js","../node_modules/lodash/map.js","../node_modules/lodash/_baseMap.js","actions/artistAction.js","actions/collectionAction.js","../node_modules/lodash/findIndex.js","components/SubscriptionHeading/index.js"],"names":["Testimonial","quote","name","jobTitle","photo","companyName","className","src","alt","defaultProps","isInViewport","element","options","getBoundingClientRect","top","bottom","left","right","settings","extend","tolerance","viewport","window","isVisibleFlag","$viewport","jquery","length","console","warn","const","$viewportHeight","height","$viewportWidth","width","typeofViewport","toString","viewportRect","scrollBarWidth","el","css","append","remove","getScrollbarWidth","Math","round","parseFloat","getSelectorArgs","argsString","args","split","isNaN","trim","expr","pseudos","createPseudo","currElement","currObj","index","meta","fn","this","filter","i","run","arguments","Array","SyntaxError","forEach","arg","slice","call","t","BG_WIDTHS","FG_WIDTHS","CDN_BASE","imgixUrl","url","w","q","getImgixUrl","srcSet","widths","map","join","HERO_SLIDES","id","slide","bgUrl","fgUrl","bg","bgSrcSet","fg","fgSrcSet","PARALLAX","FLOAT","ParallaxHero","children","useState","activeIndex","setActiveIndex","matchMedia","matches","reduced","setReduced","hydrated","setHydrated","layerRefs","useRef","target","x","y","current","rafId","gyroBaseline","lastInput","floatMix","pointerActive","setLayerRef","useCallback","part","useEffect","mq","onChange","addEventListener","addListener","removeEventListener","removeListener","requestIdleCallback","timeout","cancelIdleCallback","setTimeout","clearTimeout","setInterval","HOLD_MS","clearInterval","cancelled","onMouseMove","e","clientX","innerWidth","clientY","innerHeight","performance","now","onPointerLeave","onOrientation","gyroMaxDeg","beta","gamma","base","clamp","v","max","min","detachInput","passive","document","documentElement","DeviceOrientationEvent","attachGyro","requestPermission","requestOnce","then","state","catch","once","bgTravel","fgTravel","spring","scale","requestAnimationFrame","tick","idle","mix","fx","sin","fy","cos","tx","ty","cx","cy","layer","style","transform","cancelAnimationFrame","padStyle","pad","position","slides","ref","sizes","draggable","loading","HomePage","props","activeCollectionID","artistAvatars","activeCollection","categories","collections","collectionTracks","breakpoint1","breakpoint2","breakpoint3","handleClick","bind","checkVideos","setTrackPlayer","handleCollectionClick","handlePlayPause","handleNextCollection","setState","fetchHomeCollection","response","results","homepage_collections","$","scroll","pageLoad","$laptopVid","laptopOffset","$brandVid","brandOffset","is","hasClass","addClass","play","off","track","collectionID","setCurrentTrack","trackID","versionID","track_url","addActiveTrack","currentContext","current_engagement_group","isAudioReady","addPrimaryTrack","trackId","versionId","trackIndex","versionIndex","wavesurfer","setPlayerPosition","playActiveTrack","setPlaying","playerActive","activeTrack","collectionName","a","addTracks","tracks","newTracks","item","findIndex","track_version","showVersion","addTrackWave","current_context","fetchCollectionTrack","theArray","filterCollectionTracks","newCollectionTracks","prevState","event","stopPropagation","footerPlayer","playerTrack","primaryTrack","isEmpty","player","isPlaying","isDestroyed","pause","setPause","pausedActiveTrack","getCollectionTracks","handleTogglePlay","handleChangeTrack","trackWaves","nextTrackId","nextVersionId","nextTrackWave","lastTrackIndex","currentTrackIndex","_","playing","addNewEngagement","sliderSettings","arrows","slidesToShow","slidesToScroll","infinite","dots","responsive","breakpoint","testimonials","rel","href","content","A","to","categoryName","active","onClick","collection","slug","track_to_homepage_collection","role","thumbnail_image","image_aws_url","artistTile","imageUrl","muted","playsInline","poster","type","loop","testimonial","React","Component","connect","get","subscriptionData","dispatch","pos","setTrackPosition","addCollectionTrackWave","currentTrack","contextId","browseType","engagementInfo","direction","onChangeTrack","onTogglePlay","arrayMap","require","baseIteratee","baseMap","isArray","module","exports","iteratee","baseEach","isArrayLike","result","value","key","fetchArtist","artistId","fetch","conditionallyGetCdnApi","method","res","json","err","fetchCategories","Promise","resolve","reject","payload","fetchCategoryArtists","categoryId","letter","page","fetchLatestArtists","fetchLetters","fetchArtistStatementList","data","authToken","sessionStorage","getItem","API","body","JSON","stringify","token","headers","artist_details","artistEarningsArray","fetchPortfolioList","fetchEarnigsList","fetchArtistAccount","fetchArtistSubmissions","fetchSubscriptionUsageReport","statementID","updateArtistAccount","updatePaypalEmail","paypalEmail","paypal_email","requestPayment","getLatestStatement","getPaymentDetails","artistEarningReportId","error","log","fetchCollection","collectionId","fetchCategoryCollections","fetchLatestCollections","fetchAllCollections","energy","vocal","sort","styleFilters","fetchCollections","fetchStyleCollections","JsonStyleFilters","baseFindIndex","toInteger","nativeMax","array","predicate","fromIndex","SubscriptionHeading","name1","name2","planName","substr","indexOf","prevProps"],"mappings":"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","file":"static/js/35.chunk.js?hash=19dbb30d","sourcesContent":["import classname from 'classnames';\nimport React, {Fragment} from 'react';\nimport PropTypes from 'prop-types';\nimport A from '../../components/A';\nimport SubscriptionHeading from '../../components/SubscriptionHeading';\nimport _ from 'lodash';\n\nconst Testimonial = ({ quote,\n name,\n jobTitle,\n photo,\n companyName }) => {\n\n return (\n
\n
\n { typeof quote === 'object' &&\n quote\n }\n { typeof quote === 'string' &&\n {quote}\n }\n
\n
\n {\"\"}\n
\n
\n

{name}

\n

{jobTitle}{ companyName && - {companyName}}

\n
\n
\n
\n );\n};\n\nTestimonial.propTypes = {\n quote: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object\n ]),\n name: PropTypes.string,\n photo: PropTypes.string,\n jobTitle: PropTypes.string,\n companyName: PropTypes.string,\n};\n\nTestimonial.defaultProps = {\n quote: \"\",\n name: \"\",\n photo: \"\",\n jobTitle: \"\",\n companyName: \"\",\n};\n\nexport default Testimonial;\n","import $ from 'jquery'\n\n/**\n * @author Mudit Ameta\n * @license https://github.com/zeusdeux/isInViewport/blob/master/license.md MIT\n */\n\n// expose isInViewport as a custom pseudo-selector\n$.extend($.expr.pseudos || $.expr[':'], {\n // if $.expr.createPseudo is available, use it\n 'in-viewport': $.expr.createPseudo\n ? $.expr.createPseudo(argsString => currElement => isInViewport(currElement, getSelectorArgs(argsString)))\n : (currObj, index, meta) => isInViewport(currObj, getSelectorArgs(meta[3]))\n})\n\n\n// expose isInViewport as a function too\n// this lets folks pass around actual objects as options (like custom viewport)\n// and doesn't tie 'em down to strings. It also prevents isInViewport from\n// having to look up and wrap the dom element corresponding to the viewport selector\n$.fn.isInViewport = function(options) {\n return this.filter((i, el) => isInViewport(el, options))\n}\n\n$.fn.run = run\n\n// lets you chain any arbitrary function or an array of functions and returns a jquery object\nfunction run(args) {\n if (arguments.length === 1 && typeof args === 'function') {\n args = [args]\n }\n\n if (!(args instanceof Array)) {\n throw new SyntaxError('isInViewport: Argument(s) passed to .do/.run should be a function or an array of functions')\n }\n\n args.forEach(arg => {\n if (typeof arg !== 'function') {\n console.warn('isInViewport: Argument(s) passed to .do/.run should be a function or an array of functions')\n console.warn('isInViewport: Ignoring non-function values in array and moving on')\n } else {\n [].slice.call(this).forEach(t => arg.call($(t)))\n }\n })\n\n return this\n}\n\n\n// gets the width of the scrollbar\nfunction getScrollbarWidth(viewport) {\n // append a div that has 100% width to get true width of viewport\n const el = $('
').css({\n width: '100%'\n })\n viewport.append(el)\n\n // subtract true width from the viewport width which is inclusive\n // of scrollbar by default\n const scrollBarWidth = viewport.width() - el.width()\n\n // remove our element from DOM\n el.remove()\n return scrollBarWidth\n}\n\n\n// Returns true if DOM element `element` is in viewport\nfunction isInViewport(element, options) {\n let {top, bottom, left, right} = element.getBoundingClientRect()\n\n let settings = $.extend({\n tolerance: 0,\n viewport: window\n }, options)\n let isVisibleFlag = false\n let $viewport = settings.viewport.jquery ? settings.viewport : $(settings.viewport)\n\n if (!$viewport.length) {\n console.warn('isInViewport: The viewport selector you have provided matches no element on page.')\n console.warn('isInViewport: Defaulting to viewport as window')\n $viewport = $(window)\n }\n\n const $viewportHeight = $viewport.height()\n let $viewportWidth = $viewport.width()\n const typeofViewport = $viewport[0].toString()\n\n // if the viewport is other than window recalculate the top,\n // bottom,left and right wrt the new viewport\n // the [object DOMWindow] check is for window object type in PhantomJS\n if ($viewport[0] !== window && typeofViewport !== '[object Window]' && typeofViewport !== '[object DOMWindow]') {\n // use getBoundingClientRect() instead of $.Offset()\n // since the original top/bottom positions are calculated relative to browser viewport and not document\n const viewportRect = $viewport[0].getBoundingClientRect()\n\n // recalculate these relative to viewport\n top = top - viewportRect.top\n bottom = bottom - viewportRect.top\n left = left - viewportRect.left\n right = right - viewportRect.left\n\n // get the scrollbar width from cache or calculate it\n isInViewport.scrollBarWidth = isInViewport.scrollBarWidth || getScrollbarWidth($viewport)\n\n // remove the width of the scrollbar from the viewport width\n $viewportWidth -= isInViewport.scrollBarWidth\n }\n\n // handle falsy, non-number and non-integer tolerance value\n // same as checking using isNaN and then setting to 0\n // bitwise operators deserve some love too you know\n settings.tolerance = ~~Math.round(parseFloat(settings.tolerance))\n\n if (settings.tolerance < 0) {\n settings.tolerance = $viewportHeight + settings.tolerance // viewport height - tol\n }\n\n // the element is NOT in viewport iff it is completely out of\n // viewport laterally or if it is completely out of the tolerance\n // region. Therefore, if it is partially in view then it is considered\n // to be in the viewport and hence true is returned. Because we have adjusted\n // the left/right positions relative to the viewport, we should check the\n // element's right against the viewport's 0 (left side), and the element's\n // left against the viewport's width to see if it is outside of the viewport.\n\n if (right <= 0 || left >= $viewportWidth) {\n return isVisibleFlag\n }\n\n // if the element is bound to some tolerance\n isVisibleFlag = settings.tolerance ? top <= settings.tolerance && bottom >= settings.tolerance : bottom > 0 && top <= $viewportHeight\n\n return isVisibleFlag\n}\n\n\n// get the selector args from the args string proved by Sizzle\nfunction getSelectorArgs(argsString) {\n if (argsString) {\n const args = argsString.split(',')\n\n // when user only gives viewport and no tolerance\n if (args.length === 1 && isNaN(args[0])) {\n args[1] = args[0]\n args[0] = void 0\n }\n\n return {\n tolerance: args[0] ? args[0].trim() : void 0,\n viewport: args[1] ? $(args[1].trim()) : void 0\n }\n }\n return {}\n}\n","import { getImgixUrl } from \"../../utils/helpers\";\n\n// imgix: format negotiation (WebP/AVIF) + compression. imgix preserves alpha\n// on the singer cutout PNGs. Quality per layer.\nconst BG_QUALITY = 70;\nconst FG_QUALITY = 80;\n\n// Responsive width ladders (px) offered via srcset. The hero is full-bleed, so\n// the browser needs viewport-width × devicePixelRatio — covers 1x large\n// desktops through ~4K / retina.\nconst BG_WIDTHS = [1280, 1920, 2560, 3200, 3840];\nconst FG_WIDTHS = [1080, 1600, 2160, 2880, 3840];\n\n// Fallback `src` widths for browsers without srcset support.\nconst BG_FALLBACK_W = 1920;\nconst FG_FALLBACK_W = 1600;\n\nconst CDN_BASE = \"https://cdn.musicvine.com/images/parallax\";\n\nconst imgixUrl = (url, w, q) =>\n getImgixUrl(url, `?auto=format,compress&w=${w}&q=${q}`);\n\nconst srcSet = (url, widths, q) =>\n widths.map((w) => `${imgixUrl(url, w, q)} ${w}w`).join(\", \");\n\n// Slides in display order (header1..header5).\nexport const HERO_SLIDES = [\n { id: \"header1\", alt: \"Guitarist performing on stage in warm orange light\" },\n { id: \"header2\", alt: \"Guitarist and crowd bathed in blue light\" },\n { id: \"header3\", alt: \"Female singer performing under a pink spotlight\" },\n { id: \"header4\", alt: \"Guitarist performing on stage\" },\n { id: \"header5\", alt: \"Male singer performing under blue light\" },\n].map((slide) => {\n const bgUrl = `${CDN_BASE}/${slide.id}_background.png`;\n const fgUrl = `${CDN_BASE}/${slide.id}_singer.png`;\n return {\n ...slide,\n bg: imgixUrl(bgUrl, BG_FALLBACK_W, BG_QUALITY),\n bgSrcSet: srcSet(bgUrl, BG_WIDTHS, BG_QUALITY),\n fg: imgixUrl(fgUrl, FG_FALLBACK_W, FG_QUALITY),\n fgSrcSet: srcSet(fgUrl, FG_WIDTHS, FG_QUALITY),\n };\n});\n\n// Crossfade timing (ms). Keep FADE_MS in sync with the 1.5s transition in\n// _homepage.scss (.parallax-hero__layer).\nexport const HOLD_MS = 6000; // time a slide is fully shown\nexport const FADE_MS = 1500; // crossfade duration\n\n// Parallax tuning, ported from the approved demo.\nexport const PARALLAX = {\n bgTravel: 10, // px the background travels per unit of input offset\n fgTravel: 18, // px the foreground travels per unit of input offset\n spring: 0.065, // damping factor for the lerp toward target\n scale: 1.06, // scale layers up so edges never show while translating\n gyroMaxDeg: 25, // device tilt (deg) mapped to the full -1..1 range\n};\n\n// Idle \"float\": when the pointer isn't moving (or the device isn't tilting),\n// the layers drift along a slow, subtle Lissajous path so the hero never feels\n// frozen. The spring lerp blends in/out of this automatically.\nexport const FLOAT = {\n idleDelayMs: 1800, // wait this long after the last input before floating\n amplitude: 0.4, // fraction of full parallax travel used while floating (subtle)\n speed: 0.0005, // angular speed (rad/ms) — ~12s per cycle\n enterEase: 0.02, // ease INTO the float slowly (low = gentle return from pointer)\n exitEase: 0.1, // ease OUT to pointer quickly (higher = responsive on re-hover)\n};\n","import React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { HERO_SLIDES, HOLD_MS, FADE_MS, PARALLAX, FLOAT } from \"./config\";\n\nconst SLIDE_INTERVAL = HOLD_MS + FADE_MS;\n\nfunction prefersReducedMotion() {\n return (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\nexport default function ParallaxHero({ children, className = \"\" }) {\n const [activeIndex, setActiveIndex] = useState(0);\n const [reduced, setReduced] = useState(prefersReducedMotion());\n const [hydrated, setHydrated] = useState(false);\n\n const layerRefs = useRef([]); // [{ bg: HTMLElement, fg: HTMLElement }]\n const target = useRef({ x: 0, y: 0 });\n const current = useRef({ x: 0, y: 0 });\n const rafId = useRef(null);\n const gyroBaseline = useRef(null);\n const lastInput = useRef(0); // timestamp of last pointer/gyro input\n const floatMix = useRef(0); // 0 = follow pointer, 1 = ambient float\n const pointerActive = useRef(false); // pointer/gyro currently driving the hero\n\n const setLayerRef = useCallback(\n (index, part) => (el) => {\n if (!layerRefs.current[index]) {\n layerRefs.current[index] = { bg: null, fg: null };\n }\n layerRefs.current[index][part] = el;\n },\n []\n );\n\n // Track changes to the reduced-motion preference.\n useEffect(() => {\n if (typeof window.matchMedia !== \"function\") return undefined;\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const onChange = () => setReduced(mq.matches);\n if (mq.addEventListener) mq.addEventListener(\"change\", onChange);\n else mq.addListener(onChange); // Safari < 14\n return () => {\n if (mq.removeEventListener) mq.removeEventListener(\"change\", onChange);\n else mq.removeListener(onChange);\n };\n }, []);\n\n // Defer mounting slides 2..N so the hero isn't a ~30MB initial download.\n useEffect(() => {\n if (reduced) return undefined;\n if (typeof window.requestIdleCallback === \"function\") {\n const id = window.requestIdleCallback(() => setHydrated(true), {\n timeout: 2000,\n });\n return () => {\n if (typeof window.cancelIdleCallback === \"function\") {\n window.cancelIdleCallback(id);\n }\n };\n }\n const id = setTimeout(() => setHydrated(true), 1200);\n return () => clearTimeout(id);\n }, [reduced]);\n\n // Crossfade cycling.\n useEffect(() => {\n if (reduced || HERO_SLIDES.length < 2) return undefined;\n const id = setInterval(() => {\n setActiveIndex((i) => (i + 1) % HERO_SLIDES.length);\n }, SLIDE_INTERVAL);\n return () => clearInterval(id);\n }, [reduced]);\n\n // When reduced-motion turns on mid-session, snap back to the first slide so\n // the single rendered layer is always the active (visible) one.\n useEffect(() => {\n if (reduced) setActiveIndex(0);\n }, [reduced]);\n\n // Parallax input + RAF loop.\n useEffect(() => {\n if (reduced) return undefined;\n\n let cancelled = false;\n\n const onMouseMove = (e) => {\n target.current.x = (e.clientX / window.innerWidth - 0.5) * 2;\n target.current.y = (e.clientY / window.innerHeight - 0.5) * 2;\n lastInput.current = performance.now();\n pointerActive.current = true;\n };\n\n // Pointer left the window (or the tab lost focus): hand straight back to the\n // float without waiting out the idle timeout.\n const onPointerLeave = () => {\n pointerActive.current = false;\n };\n\n const onOrientation = (e) => {\n const { gyroMaxDeg } = PARALLAX;\n if (gyroBaseline.current === null) {\n gyroBaseline.current = { beta: e.beta || 0, gamma: e.gamma || 0 };\n }\n const base = gyroBaseline.current;\n const clamp = (v) => Math.max(-1, Math.min(1, v / gyroMaxDeg));\n target.current.x = clamp((e.gamma || 0) - base.gamma);\n target.current.y = clamp((e.beta || 0) - base.beta);\n lastInput.current = performance.now();\n pointerActive.current = true;\n };\n\n let detachInput = () => {};\n const canHover =\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;\n\n if (canHover) {\n window.addEventListener(\"mousemove\", onMouseMove, { passive: true });\n document.documentElement.addEventListener(\"mouseleave\", onPointerLeave);\n window.addEventListener(\"blur\", onPointerLeave);\n detachInput = () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n document.documentElement.removeEventListener(\"mouseleave\", onPointerLeave);\n window.removeEventListener(\"blur\", onPointerLeave);\n };\n } else if (typeof DeviceOrientationEvent !== \"undefined\") {\n const attachGyro = () => {\n window.addEventListener(\"deviceorientation\", onOrientation, {\n passive: true,\n });\n detachInput = () =>\n window.removeEventListener(\"deviceorientation\", onOrientation);\n };\n if (typeof DeviceOrientationEvent.requestPermission === \"function\") {\n // iOS 13+ requires a user gesture to prompt for the gyroscope.\n const requestOnce = () => {\n DeviceOrientationEvent.requestPermission()\n .then((state) => {\n if (!cancelled && state === \"granted\") attachGyro();\n })\n .catch(() => {});\n };\n window.addEventListener(\"touchend\", requestOnce, {\n once: true,\n passive: true,\n });\n detachInput = () =>\n window.removeEventListener(\"touchend\", requestOnce);\n } else {\n attachGyro(); // Android fires deviceorientation freely.\n }\n }\n // else: no parallax input available -> crossfade only (target stays 0,0).\n\n const { bgTravel, fgTravel, spring, scale } = PARALLAX;\n const tick = (t) => {\n // Ease a 0..1 \"float mix\" toward 1 once the pointer has been idle, or back\n // toward 0 when it's active. Easing in slowly makes the return to the\n // ambient float gentle; easing out quickly keeps the pointer responsive.\n // The mix blends the pointer target with a slow Lissajous drift, and the\n // spring lerp below smooths the result further.\n const idle =\n !pointerActive.current || t - lastInput.current > FLOAT.idleDelayMs;\n floatMix.current +=\n ((idle ? 1 : 0) - floatMix.current) *\n (idle ? FLOAT.enterEase : FLOAT.exitEase);\n const mix = floatMix.current;\n\n const fx = Math.sin(t * FLOAT.speed) * FLOAT.amplitude;\n const fy = Math.cos(t * FLOAT.speed * 0.8) * FLOAT.amplitude;\n const tx = target.current.x * (1 - mix) + fx * mix;\n const ty = target.current.y * (1 - mix) + fy * mix;\n\n current.current.x += (tx - current.current.x) * spring;\n current.current.y += (ty - current.current.y) * spring;\n const cx = current.current.x;\n const cy = current.current.y;\n layerRefs.current.forEach((layer) => {\n if (!layer) return;\n if (layer.bg) {\n layer.bg.style.transform = `translate(${-cx * bgTravel}px, ${-cy *\n bgTravel}px) scale(${scale})`;\n }\n if (layer.fg) {\n layer.fg.style.transform = `translate(${-cx * fgTravel}px, ${-cy *\n fgTravel}px) scale(${scale})`;\n }\n });\n rafId.current = requestAnimationFrame(tick);\n };\n rafId.current = requestAnimationFrame(tick);\n\n return () => {\n cancelled = true;\n detachInput();\n if (rafId.current !== null) cancelAnimationFrame(rafId.current);\n };\n }, [reduced]);\n\n const { bgTravel, fgTravel, scale } = PARALLAX;\n const padStyle = (pad) => ({\n position: \"absolute\",\n top: `${-pad}px`,\n left: `${-pad}px`,\n width: `calc(100% + ${pad * 2}px)`,\n height: `calc(100% + ${pad * 2}px)`,\n transform: `translate(0px, 0px) scale(${scale})`,\n });\n\n const slides = reduced ? HERO_SLIDES.slice(0, 1) : HERO_SLIDES;\n\n return (\n
\n
\n {slides.map((slide, i) => {\n if (i !== 0 && !hydrated && !reduced) return null;\n return (\n \n \n \n
\n \n \n \n \n );\n })}\n \n
\n
{children}
\n
\n );\n}\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport Helmet from \"react-helmet\";\nimport map from \"lodash/map\";\nimport findIndex from \"lodash/findIndex\";\nimport isEmpty from \"lodash/isEmpty\";\nimport A from \"../../components/A\";\nimport Testimonial from \"./Testimonial\";\nimport className from \"classnames\";\nimport $ from 'jquery'\nimport 'is-in-viewport';\nimport {\n fetchHomeCollection,\n fetchCollectionTrack,\n} from \"actions/collectionAction\";\nimport { fetchArtistAvatars } from \"actions/artistAction\";\nimport { addNewEngagement } from \"actions/favouriteAction\";\nimport {\n playerActive,\n addActiveTrack,\n playActiveTrack,\n addPrimaryTrack,\n addCollectionTrackWave,\n pausedActiveTrack,\n setPlayerPosition,\n setTrackPosition,\n onChangeTrack,\n onTogglePlay,\n} from \"actions/footerPlayerAction\";\nimport { fetchSubscriptionPlansAndAddons } from \"../../actions/subscriptionAction\";\nimport _ from \"lodash\";\nimport Slider from \"react-slick\";\nimport { Link } from \"react-router\";\nimport {getImgixUrl} from \"../../utils/helpers\";\nimport ParallaxHero from \"../../components/ParallaxHero\";\n\nexport class HomePage extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n activeIndex: 0,\n activeCollectionID: null,\n artistAvatars: [],\n activeCollection: {},\n categories: [],\n collections: [],\n collectionTracks: [],\n };\n\n this.breakpoint1 = 560;\n this.breakpoint2 = 920;\n this.breakpoint3 = 1250;\n\n this.handleClick = this.handleClick.bind(this);\n this.checkVideos = this.checkVideos.bind(this);\n this.setTrackPlayer = this.setTrackPlayer.bind(this);\n this.handleCollectionClick = this.handleCollectionClick.bind(this);\n this.handlePlayPause = this.handlePlayPause.bind(this);\n this.handleNextCollection = this.handleNextCollection.bind(this);\n }\n\n componentDidMount() {\n\n const artistsToFetch = [\n 265,\n 255,\n 19,\n 326,\n 336,\n 286,\n 205,\n 8,\n\n 17,\n 291,\n 161,\n 208,\n 258,\n 104,\n 273,\n 18,\n\n 1,\n 228,\n 229,\n 136,\n 231,\n 211,\n 63,\n 20,\n\n 21,\n 358,\n 93,\n 264,\n 234,\n 296,\n 335,\n 348,\n\n 9,\n 316,\n 11,\n 356,\n 332,\n 341,\n 247,\n 233,\n ];\n\n // fetchArtistAvatars(artistsToFetch)\n // .then((data) => {\n // console.log(JSON.stringify(data.result));\n // this.setState({\n // artistAvatars: data.result,\n // });\n // })\n // .catch((err) => err);\n\n this.setState({\n artistAvatars: [{\"id\":265,\"imageUrl\":\"https://cdn.musicvine.com/images/el-train-avatar-v1_4145994079935208.jpg\"},{\"id\":255,\"imageUrl\":\"https://cdn.musicvine.com/images/brock-hewitt-avatar-v1_5625641315019679.jpg\"},{\"id\":19,\"imageUrl\":\"https://cdn.musicvine.com/images/brothers-and-company-avatar-v1.jpg\"},{\"id\":326,\"imageUrl\":\"https://cdn.musicvine.com/images/infraction-avatar-v1_7219676042219606.jpg\"},{\"id\":336,\"imageUrl\":\"https://cdn.musicvine.com/images/volo-avatar-v1_4246619773997710.jpg\"},{\"id\":286,\"imageUrl\":\"https://cdn.musicvine.com/images/lane-king-avatar-v2_4141605401078213.jpg\"},{\"id\":205,\"imageUrl\":\"https://cdn.musicvine.com/images/lewis-harris-avatar-v1_3519062021977104.jpg\"},{\"id\":8,\"imageUrl\":\"https://cdn.musicvine.com/images/anteros-avatar-v1.jpg\"},{\"id\":17,\"imageUrl\":\"https://cdn.musicvine.com/images/braden-deal-avatar-v4_6417516429655580.jpg\"},{\"id\":291,\"imageUrl\":\"https://cdn.musicvine.com/images/roo-walker-avatar-v1_6433453453952445.jpg\"},{\"id\":161,\"imageUrl\":\"https://cdn.musicvine.com/images/all-good-folks-avatar-v1_4282299045668081.jpg\"},{\"id\":208,\"imageUrl\":\"https://cdn.musicvine.com/images/philip-g-anderson-avatar-v1_2140936840427347.jpg\"},{\"id\":258,\"imageUrl\":\"https://cdn.musicvine.com/images/prigida-avatar-v1_6180582698519834.jpg\"},{\"id\":104,\"imageUrl\":\"https://cdn.musicvine.com/images/Soundroll_Avatar_1891797924453355.jpg\"},{\"id\":273,\"imageUrl\":\"https://cdn.musicvine.com/images/92elm-avatar-v1_3938563140188868.jpg\"},{\"id\":18,\"imageUrl\":\"https://cdn.musicvine.com/images/bronson-buskett-avatar.jpg\"},{\"id\":1,\"imageUrl\":\"https://cdn.musicvine.com/images/abbas-premjee-avatar-v1-01-01-16-lf1.jpg\"},{\"id\":228,\"imageUrl\":\"https://cdn.musicvine.com/images/barry-dallas-avatar-v1_2812305949580143.jpg\"},{\"id\":229,\"imageUrl\":\"https://cdn.musicvine.com/images/brad-couture-avatar-v1_3022862534477491.jpg\"},{\"id\":136,\"imageUrl\":\"https://cdn.musicvine.com/images/clemens-ruh-avatar-v2_3529748344754516.jpg\"},{\"id\":231,\"imageUrl\":\"https://cdn.musicvine.com/images/d0d-avatar-v2_892490588733339.jpg\"},{\"id\":211,\"imageUrl\":\"https://cdn.musicvine.com/images/flow-state-avatar-v1_7331668520220763.jpg\"},{\"id\":63,\"imageUrl\":\"https://cdn.musicvine.com/images/josh-stewart-avatar-v2.jpg\"},{\"id\":20,\"imageUrl\":\"https://cdn.musicvine.com/images/Christian-Larsen_Avatar_530915083109993.jpg\"},{\"id\":21,\"imageUrl\":\"https://cdn.musicvine.com/images/corinnne-avatar-2.jpg\"},{\"id\":358,\"imageUrl\":\"https://cdn.musicvine.com/images/noise-cake-avatar-v1_5438729941487348.jpg\"},{\"id\":93,\"imageUrl\":\"https://cdn.musicvine.com/images/pryces-avatar-v1.jpg\"},{\"id\":264,\"imageUrl\":\"https://cdn.musicvine.com/images/danii-roundtree-avatar-v1_4578326193315766.jpg\"},{\"id\":234,\"imageUrl\":\"https://cdn.musicvine.com/images/adam-tell-avatar-v2_5797994871225555.jpg\"},{\"id\":296,\"imageUrl\":\"https://cdn.musicvine.com/images/toro-jones-avatar-v1_5490662129695563.jpg\"},{\"id\":335,\"imageUrl\":\"https://cdn.musicvine.com/images/blake-wolf-avatar-v1_291683103787167.jpg\"},{\"id\":348,\"imageUrl\":\"https://cdn.musicvine.com/images/goods-and-cargo-avatar-v1_6001266759958264.jpg\"},{\"id\":9,\"imageUrl\":\"https://cdn.musicvine.com/images/asher-lee-avatar-v1.jpg\"},{\"id\":316,\"imageUrl\":\"https://cdn.musicvine.com/images/cedric-vermue-avatar-v1_7451491893254724.jpg\"},{\"id\":11,\"imageUrl\":\"https://cdn.musicvine.com/images/aurora-damico-avatar-v3_30686540399317.jpg\"},{\"id\":356,\"imageUrl\":\"https://cdn.musicvine.com/images/ian-aisling-avatar-v1_7818454075388018.jpg\"},{\"id\":332,\"imageUrl\":\"https://cdn.musicvine.com/images/jonny-darling-avatar-v1_8366025278095152.jpg\"},{\"id\":341,\"imageUrl\":\"https://cdn.musicvine.com/images/tiffany-houghton-avatar-v1_4936863605286182.jpg\"},{\"id\":247,\"imageUrl\":\"https://cdn.musicvine.com/images/v-draganove-avatar-v1_5964764729615990.jpg\"},{\"id\":233,\"imageUrl\":\"https://cdn.musicvine.com/images/menual-avatar-v1_7460463834603797.jpg\"}],\n });\n\n fetchHomeCollection().then((response) => {\n if (response.results && response.results.homepage_collections) {\n this.setState({\n activeCollection: response.results.homepage_collections[0],\n categories: map(response.results.homepage_collections, \"name\"),\n collections: response.results.homepage_collections,\n });\n }\n });\n\n // Play videos on page load if they're in the viewport\n this.checkVideos(true);\n\n $(window).scroll(() => {\n this.checkVideos(false);\n });\n }\n\n checkVideos(pageLoad) {\n // https://stackoverflow.com/a/21164477/1482673\n\n const $laptopVid = $('#laptop-vid');\n const laptopOffset = pageLoad ? 0 : -100;\n\n const $brandVid = $('#brand-vid');\n const brandOffset = pageLoad ? 0 : -20;\n\n if ($laptopVid.is(`:in-viewport(${laptopOffset})`) && !$laptopVid.hasClass(\"has-played\")) {\n $laptopVid.addClass(\"has-played\");\n $laptopVid[0].play();\n }\n if ($brandVid.is(`:in-viewport(${brandOffset})`) && !$brandVid.hasClass(\"has-played\")) {\n $brandVid.addClass(\"has-played\");\n $brandVid[0].play();\n }\n\n }\n\n componentWillUnmount() {\n $(window).off(\"scroll\");\n }\n\n setTrackPlayer(track, collectionID) {\n this.props.setCurrentTrack({\n trackID: track.id,\n versionID: track.track_url.id,\n collectionID,\n });\n this.props.addActiveTrack({\n trackID: track.id,\n versionID: track.track_url.id,\n currentContext: track.current_engagement_group,\n collectionID,\n isAudioReady: false,\n });\n this.props.addPrimaryTrack({\n ...track,\n trackId: track.id,\n versionId: track.track_url.id,\n trackIndex: 0,\n versionIndex: 0,\n collectionID,\n wavesurfer: null,\n });\n this.props.setPlayerPosition(0);\n this.props.playActiveTrack();\n this.props.setPlaying(\n track.id,\n -1,\n track.track_url.id,\n null\n );\n this.props.playerActive();\n this.setState({ activeTrack: track });\n }\n\n handleClick(index) {\n const { collections } = this.state;\n this.setState({ activeIndex: index, activeCollection: collections[index] });\n }\n\n async getCollectionTracks(collectionID, collectionName, track) {\n const { collectionTracks } = this.state;\n const addTracks = (tracks) => {\n const newTracks = tracks.map((item, index) => {\n const versionId = item.track_url.id;\n const versionIndex = findIndex(item.track_version, [\"id\", versionId]);\n return {\n ...item,\n trackId: item.id,\n versionId,\n versionIndex,\n collectionID,\n trackIndex: index,\n showVersion: false,\n };\n });\n this.props.addTrackWave(newTracks);\n };\n if (!collectionTracks[collectionID]) {\n addTracks([{ ...track, current_context: { id: -1 } }]);\n const { results } = await fetchCollectionTrack(collectionName);\n\n // Remove context ID so engagements don't get recorded\n results.forEach(function(part, index, theArray) {\n theArray[index].current_context.id = -1;\n });\n\n const filterCollectionTracks = results.filter(\n (item) => item.id !== track.id\n );\n const newCollectionTracks = [\n { ...track, current_context: { id: -1 } },\n ...filterCollectionTracks,\n ];\n collectionTracks[collectionID] = newCollectionTracks;\n this.setState((prevState) => ({\n ...prevState,\n collectionTracks,\n }));\n addTracks(newCollectionTracks);\n } else {\n addTracks(collectionTracks[collectionID]);\n }\n }\n\n handleCollectionClick(event, collectionID, collectionName, track) {\n this.handlePlayPause(event, collectionID, collectionName, track);\n }\n\n handlePlayPause(e, collectionID, collectionName, track) {\n e.stopPropagation();\n this.setState({\n activeCollectionID: collectionID,\n });\n const { activeTrack, playerTrack, primaryTrack } = this.props.footerPlayer;\n if (!isEmpty(activeTrack) && activeTrack.collectionID === collectionID) {\n const { wavesurfer } = playerTrack;\n if (!this.props.player.isPlaying) {\n if (!isEmpty(wavesurfer)) {\n if (!wavesurfer.isDestroyed) {\n wavesurfer.play();\n }\n }\n this.props.setPlaying(\n primaryTrack.trackId,\n -1,\n primaryTrack.track_url.id,\n null\n );\n this.props.playActiveTrack();\n } else {\n if (!isEmpty(wavesurfer)) {\n if (!wavesurfer.isDestroyed) {\n wavesurfer.pause();\n }\n }\n this.props.setPause();\n this.props.pausedActiveTrack();\n }\n return false;\n }\n this.setTrackPlayer(track, collectionID);\n this.getCollectionTracks(collectionID, collectionName, track);\n }\n\n handleNextCollection(e) {\n const { footerPlayer, handleTogglePlay, handleChangeTrack } = this.props;\n const { activeTrack, primaryTrack, trackWaves } = footerPlayer;\n let nextTrackId = activeTrack.trackID;\n let nextVersionId = activeTrack.versionID;\n let nextTrackWave = primaryTrack;\n const lastTrackIndex = trackWaves.length - 1;\n const currentTrackIndex = _.findIndex(trackWaves, [\n \"id\",\n activeTrack.trackID,\n ]);\n e.stopPropagation();\n if (currentTrackIndex !== -1) {\n const nextTrackIndex =\n currentTrackIndex === lastTrackIndex ? 0 : currentTrackIndex + 1;\n nextTrackWave = trackWaves[nextTrackIndex];\n nextTrackId = nextTrackWave.trackId;\n nextVersionId = nextTrackWave.versionId;\n const currentContext = nextTrackWave.current_context.id;\n if (!activeTrack.playing) {\n handleTogglePlay(false, nextTrackId, nextVersionId, currentContext);\n } else {\n addNewEngagement(\"play\", nextTrackId, currentContext, nextVersionId);\n }\n handleChangeTrack(nextTrackWave, \"forward\", nextTrackId, nextVersionId);\n }\n }\n\n render() {\n const { footerPlayer } = this.props;\n const { activeTrack } = footerPlayer;\n const {\n activeIndex,\n activeCollection,\n categories,\n } = this.state;\n const sliderSettings = {\n arrows: true,\n slidesToShow: 4,\n slidesToScroll: 4,\n infinite: false,\n dots: true,\n responsive: [\n {\n breakpoint: this.breakpoint3,\n settings: {\n slidesToShow: 3,\n slidesToScroll: 3,\n },\n },\n {\n breakpoint: this.breakpoint2,\n settings: {\n slidesToShow: 2,\n slidesToScroll: 2,\n },\n },\n {\n breakpoint: this.breakpoint1,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n },\n },\n ],\n };\n\n let testimonials = [\n {\n name: \"Jason Knight\",\n quote:\n \"Absolutely the best music you can license anywhere, combined with a suggestion service that nails it every time. Music Vine elevates my work and makes my life easier. It's just brilliant.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/1-jk.jpg\",\n jobTitle: \"Director\",\n companyName: \"Loom Creative\",\n },\n {\n name: \"Rob Hardy\",\n quote:\n \"There are loads of search modifiers, including some uniquely useful ones. When it comes to sorting and filtering and finding the perfect song, Music Vine is the best on the market, hands down.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/2-rh.jpg\",\n jobTitle: \"Owner\",\n companyName: \"Filmmaker Freedom\",\n },\n {\n name: \"Danielle Giddins\",\n quote:\n \"As well as the amazing quality of the tracks, the stand-out feature of Music Vine for me is their customer service. The staff are stars - so approachable and couldn’t be more helpful!\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/3-dg.jpg\",\n jobTitle: \"Filmmaker\",\n companyName: \"\",\n },\n {\n name: \"Thomas Simon\",\n quote:\n \"Music Vine is the best option out there for creatives looking to license top quality music without breaking the bank. Their vast library coupled with an effortless licensing process has changed the game for me.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/4-ts.jpg\",\n jobTitle: \"Filmmaker\",\n companyName: \"\",\n },\n {\n name: \"Sven Pape\",\n quote:\n \"Music Vine’s catalog is great and the browsing interface is second to none. Their speed and ease of use are crucial when you’re in the editing zone and need to find the right music fast to stay creative.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/5-sp.jpg\",\n jobTitle: \"Film Editor\",\n companyName: \"\",\n },\n {\n name: \"Tom Greveson\",\n quote:\n \"Stacked with incredible tracks, it’s clear Music Vine have been extremely selective. This saves my company hours of search time and helps ensure my clients are always delighted by the content we’re delivering.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/6-tg.jpg\",\n jobTitle: \"CEO\",\n companyName: \"Revolution Viewing\",\n },\n {\n name: \"Carly Old\",\n quote:\n \"Music Vine’s support team are always so helpful, friendly and speedy. I know that they will go above and beyond to help with my projects, which is invaluable when I’m up against a deadline.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/7-ca.jpg\",\n jobTitle: \"Producer\",\n companyName: \"\",\n },\n {\n name: \"Robert Anthony\",\n quote:\n \"Music Vine is an essential tool for the fast-paced filmmaker. The interface is intuitive, allowing me to find the right track quickly. The library is diverse and the music itself is in a league of its own.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/8-ra.jpg\",\n jobTitle: \"Director\",\n companyName: \"Stripes Agency\",\n },\n {\n name: \"Olivia Cappuccini\",\n quote:\n \"Music Vine is one of the first places I go to for music inspiration. Their catalog is always full of new and innovative music and the site is so easy to navigate.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/9-oc.jpg\",\n jobTitle: \"Filmmaker\",\n companyName: \"\",\n },\n {\n name: \"Jenny Panush\",\n quote: (\n \n Music is a character in a story, it should never be an afterthought.\n Music Vine stocks great music that doesn’t sound like, well, stock\n music. Helps us stay on the right track.\n \n ),\n photo:\n \"https://cdn.musicvine.com/images/testimonials/10-jp.jpg\",\n jobTitle: \"Post Creative\",\n companyName: \"Sandwich\",\n },\n {\n name: \"Kyle Berkompas\",\n quote:\n \"After years of sifting through piles of uninspiring tracks on stock music sites, I finally found the end of the rainbow with Music Vine. Great search function, quality tracks and very affordable.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/11-kb.jpg\",\n jobTitle: \"Cinematographer\",\n companyName: \"Deloitte\",\n },\n {\n name: \"Eric Bobrie\",\n quote:\n \"Music Vine ticks all the boxes: slick UI, curated, high quality music. It feels like collaborating with professional musicians, rather than using stock, and great customer support.\",\n photo:\n \"https://cdn.musicvine.com/images/testimonials/12-eb.jpg\",\n jobTitle: \"Filmmaker\",\n companyName: \"\",\n },\n ];\n\n if ( $(window).width() < this.breakpoint1 ) {\n testimonials = testimonials.slice(0, 4);\n }\n\n return (\n
\n \n \n \n Music Vine: Music Licensing For Video Production And Film\n \n \n \n \n
\n
\n

\n Authentic music for{\" \"}\n pro productions\n

\n

\n Handpicked from the world’s finest independent musicians and\n curated by our expert team. Trusted by leading agencies, brands\n and studios worldwide.\n

\n \n \n View Pricing\n {\" \"}\n \n Browse Catalog\n \n \n\n
\n \n
\n
\n
\n
\n\n
\n
\n
\n

Curated by music experts. Updated weekly.

\n
    \n {categories &&\n categories.map((categoryName, index) => (\n this.handleClick(index)}\n >\n {categoryName}\n \n ))}\n
\n
\n
\n
\n {activeCollection &&\n map(activeCollection.collections, (collection, index) => {\n return (\n
\n \n this.handleCollectionClick(\n e,\n collection.id,\n collection.slug,\n collection.track_to_homepage_collection[0]\n .track\n )\n }\n >\n
\n
\n \n this.handlePlayPause(\n e,\n collection.id,\n collection.slug,\n collection.track_to_homepage_collection[0]\n .track\n )\n }\n className={\"miniplayer-play\"}\n role=\"button\"\n >\n {/* Play Icon */}\n {(activeTrack.collectionID !== collection.id ||\n (!activeTrack.playing &&\n activeTrack.collectionID ===\n collection.id)) && (\n {\"Play\"}\n )}\n {/* Pause Icon */}\n {activeTrack.playing &&\n activeTrack.collectionID ===\n collection.id && (\n \n )}\n
\n {activeTrack.collectionID === collection.id && (\n \n {/* Next Icon */}\n \n
\n )}\n {activeTrack.collectionID !== collection.id && (\n \n )}\n
\n {\n e.stopPropagation();\n }}\n >\n View All Tracks\n \n
\n
\n
\n
\n \n
\n
\n );\n })}\n
\n
\n \n \n\n
\n
\n
\n
\n
\n \n

\n Unrivalled{\" \"}\n quality and curation\n

\n

\n Our team accepts less than 10% of submissions and works\n closely with our roster of industry-leading artists to build\n thoughtful playlists for pro productions. New music is added\n every week, selected by people who know what great sounds\n like.\n

\n
\n
\n
\n
\n
\n
\n
\n {/* 8x5*/}\n {this.state.artistAvatars &&\n this.state.artistAvatars.map((artistTile, index) => (\n {\"\"}\n ))}\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n

\n An interface tailored for professionals\n

\n

\n Finding the perfect track has never been easier with Music\n Vine’s industry-leading search tools and thematic playlists.\n

\n
\n
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n
\n
\n \n

\n A catalog at the{\" \"}\n cutting edge\n

\n

\n We work closely with our artists to craft tracks that are at\n the forefront of trends in film and media.\n

\n
\n
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n
\n
\n

\n Filmmakers & brands worldwide choose Music Vine.\n
\n Here’s why\n

\n
\n
\n\n \n {testimonials &&\n testimonials.map((testimonial, index) => (\n
\n \n
\n ))}\n
\n \n
\n
\n
\n );\n }\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n playerActive: () => dispatch(playerActive()),\n playActiveTrack: () => dispatch(playActiveTrack()),\n pausedActiveTrack: () => dispatch(pausedActiveTrack()),\n setPlayerPosition: (pos) => dispatch(setPlayerPosition(pos)),\n setTrackPosition: (track) => dispatch(setTrackPosition(track)),\n addActiveTrack: (track) => dispatch(addActiveTrack(track)),\n addPrimaryTrack: (track) => dispatch(addPrimaryTrack(track)),\n addTrackWave: (tracks) => dispatch(addCollectionTrackWave(tracks)),\n setCurrentTrack: (track) =>\n dispatch({\n type: \"PLAYER_CURRENT_TRACK\",\n currentTrack: track,\n }),\n setPlaying: (trackId, contextId, versionId, browseType, collectionID) => {\n dispatch({\n type: \"PLAYER_SET_PLAYING\",\n engagementInfo: {\n trackId,\n contextId,\n versionId,\n browseType,\n collectionID,\n },\n });\n },\n setPause: () =>\n dispatch({\n type: \"PLAYER_SET_PAUSE\",\n }),\n handleChangeTrack: (track, direction, trackId, versionId) => {\n dispatch(onChangeTrack(track, direction));\n dispatch({\n type: \"PLAYER_CURRENT_TRACK\",\n currentTrack: {\n trackID: trackId,\n versionID: versionId,\n },\n });\n },\n handleTogglePlay: (playing, trackId, versionId, contextId) => {\n dispatch(onTogglePlay(playing));\n if (playing) {\n dispatch({\n type: \"PLAYER_SET_PAUSE\",\n });\n } else if (!playing) {\n dispatch({\n type: \"PLAYER_SET_PLAY\",\n engagementInfo: { trackId, contextId, versionId },\n });\n }\n },\n});\nconst mapStateToProps = (state) => ({\n player: state.get(\"player\"),\n footerPlayer: state.get(\"footerPlayer\"),\n subscriptionData: state.get(\"subscriptionData\"),\n});\n\n// Wrap the component to inject dispatch and state into it\nexport default connect(mapStateToProps, mapDispatchToProps)(HomePage);\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","import fetch from \"isomorphic-fetch\";\nimport Config, { API } from \"../constants\";\nimport { conditionallyGetCdnApi } from \"./generalAction\";\n\nexport function fetchArtistAvatars(artists) {\n let apiUrl = `${API}artist/getavatars?artists=`;\n\n apiUrl += JSON.stringify(artists);\n\n return fetch(apiUrl, {\n method: \"POST\",\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchArtist(artistId) {\n return fetch(`${conditionallyGetCdnApi()}artists/${artistId}`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchCategories() {\n return (dispatch) =>\n new Promise((resolve, reject) => {\n fetch(`${conditionallyGetCdnApi()}artist/categories`, {\n method: \"GET\",\n })\n .then((res) => res.json())\n .then((response) => {\n dispatch({\n type: \"FETCH_CATEGORIES_SUCCESS\",\n payload: response,\n });\n resolve(response);\n })\n .catch((err) => {\n reject(err);\n dispatch({\n type: \"FETCH_CATEGORIES_FAILURE\",\n payload: err,\n });\n });\n });\n}\n\nexport function fetchCategoryArtists(categoryId, letter, page) {\n if (letter === \"#\") {\n letter = \"$\";\n }\n return (dispatch) => {\n dispatch({\n type: \"FETCH_CATEGORY_ARTISTS_REQUEST\",\n });\n return new Promise((resolve, reject) =>\n fetch(\n `${conditionallyGetCdnApi()}artists/${categoryId}/categories/${letter}/letters/${page}`,\n {\n method: \"GET\",\n }\n )\n .then((res) => res.json())\n .then((response) => {\n resolve(response);\n dispatch({\n type: \"FETCH_CATEGORY_ARTISTS_SUCCESS\",\n payload: response,\n });\n })\n .catch((err) => {\n reject(err);\n dispatch({\n type: \"FETCH_CATEGORY_ARTISTS_FAILURE\",\n payload: err,\n });\n })\n );\n };\n}\n\nexport function fetchLatestArtists(categoryId, letter, page) {\n return (dispatch) =>\n new Promise((resolve, reject) => {\n fetch(\n `${conditionallyGetCdnApi()}artists/${categoryId}/latests/${letter}/letters/${page}`,\n {\n method: \"GET\",\n }\n )\n .then((res) => res.json())\n .then((res) => {\n resolve(res);\n dispatch({\n type: \"FETCH_LATEST_ARTISTS_SUCCESS\",\n payload: res,\n });\n })\n .catch((err) => {\n reject(err);\n dispatch({\n type: \"FETCH_LATEST_ARTISTS_FAILURE\",\n payload: err,\n });\n });\n });\n}\n\nexport function fetchArtistCount() {\n return fetch(`${conditionallyGetCdnApi()}artists`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchLetters() {\n return (dispatch) =>\n new Promise((resolve, reject) => {\n fetch(`${conditionallyGetCdnApi()}artist/letters`, {\n method: \"GET\",\n })\n .then((res) => res.json())\n .then((response) => {\n resolve(response);\n dispatch({\n type: \"FETCH_LETTERS_SUCCESS\",\n payload: response,\n });\n })\n .catch((err) => {\n reject(err);\n dispatch({\n type: \"FETCH_LETTERS_FAILURE\",\n payload: err,\n });\n });\n });\n}\n\nexport function fetchArtistStatementList(data) {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return (dispatch) =>\n fetch(`${API}api-artist/account/statement`, {\n method: \"POST\",\n body: JSON.stringify({\n token: authToken,\n ...data,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n })\n .then((res) => res.json())\n .then((response) => {\n dispatch({\n type: \"ADD_ARTIST_DETAILS\",\n payload: response.artist_details,\n });\n if (response.artistEarningsArray) {\n dispatch({\n type: \"ADD_ARTIST_EARNINGS_ARRAY\",\n payload: response.artistEarningsArray,\n });\n }\n return response;\n })\n .catch((err) => err);\n}\n\nexport function fetchPortfolioList(data) {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return (dispatch) =>\n fetch(`${API}api-artist/account/portfolio`, {\n method: \"POST\",\n body: JSON.stringify({\n token: authToken,\n ...data,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n })\n .then((res) => res.json())\n .then((response) => {\n dispatch({\n type: \"ADD_ARTIST_DETAILS\",\n payload: response.artist_details,\n });\n return response;\n })\n .catch((err) => err);\n}\n\nexport function fetchEarnigsList() {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return (dispatch) =>\n fetch(`${API}api-artist/account/artist-earnings`, {\n method: \"POST\",\n body: JSON.stringify({\n token: authToken,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n })\n .then((res) => res.json())\n .then((response) => {\n dispatch({\n type: \"ADD_ARTIST_DETAILS\",\n payload: response.artist_details,\n });\n return response;\n })\n .catch((err) => err);\n}\n\nexport function fetchArtistAccount() {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return (dispatch) =>\n fetch(`${API}api-artist/account`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Auth-Token\": authToken || null,\n },\n })\n .then((res) => res.json())\n .then((response) => {\n dispatch({\n type: \"ADD_ARTIST_DETAILS\",\n payload: response.artist_details,\n });\n return response;\n })\n .catch((err) => err);\n}\n\nexport function fetchArtistSubmissions() {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return (dispatch) =>\n fetch(`${API}api-artist/account/submissions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n body: JSON.stringify({\n token: authToken,\n }),\n })\n .then((res) => res.json())\n .then((response) => {\n dispatch({\n type: \"ADD_ARTIST_DETAILS\",\n payload: response.artist_details,\n });\n return response;\n })\n .catch((err) => err);\n}\n\nexport function fetchSubscriptionUsageReport(statementID) {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return () =>\n fetch(\n `${API}api-artist/account/statement/subscription-usage-report/${statementID}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Auth-Token\": authToken || null,\n },\n }\n )\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function updateArtistAccount(data) {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return () =>\n fetch(`${API}api-artist/account`, {\n method: \"POST\",\n body: JSON.stringify({\n token: authToken,\n ...data,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function updatePaypalEmail(paypalEmail) {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return () =>\n fetch(`${API}api-update-paypal-email`, {\n method: \"POST\",\n body: JSON.stringify({\n token: authToken,\n paypal_email: paypalEmail,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function requestPayment() {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return () =>\n fetch(`${API}api-artist/request-payment`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Auth-Token\": authToken || null,\n },\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function getLatestStatement() {\n const authToken = sessionStorage.getItem(\"auth_token\");\n return () =>\n fetch(`${API}api-artist/account/statement`, {\n method: \"POST\",\n body: JSON.stringify({\n token: authToken,\n page: 1, // Get first page to get latest entries\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n token: authToken || null,\n },\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function getPaymentDetails(artistEarningReportId = null) {\n const authToken = sessionStorage.getItem(\"auth_token\");\n const url = artistEarningReportId\n ? `${API}api-artist/request-payment?artistEarningReportId=${artistEarningReportId}`\n : `${API}api-artist/request-payment`;\n\n return () =>\n fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Auth-Token\": authToken || null,\n },\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n","import fetch from \"isomorphic-fetch\";\nimport Config, { API } from \"../constants\";\nimport {conditionallyGetCdnApi} from \"./generalAction\";\n\nexport function fetchHomeCollection() {\n return fetch(`${conditionallyGetCdnApi()}homepage/collections`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchCollectionTrack(collectionName) {\n return fetch(\n `${conditionallyGetCdnApi()}tracks/collection/types/${collectionName}/ids/0/energies/0/vocals/As%20Curated/sorts/0/durations/[/stylefilters/-1/limits/[]/excludes/1`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n )\n .then(\n (response) => response.json(),\n (error) => console.log(\"An error occured.\", error)\n )\n .then((json) => json);\n}\n\nexport function fetchCollection(collectionId) {\n return fetch(`${conditionallyGetCdnApi()}collections/${collectionId}`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchCategories() {\n return fetch(`${conditionallyGetCdnApi()}collection/categories`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchCategoryCollections(categoryId, page) {\n return fetch(`${conditionallyGetCdnApi()}collections/${categoryId}/categories/${page}`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchLatestCollections(categoryId, page) {\n return fetch(`${conditionallyGetCdnApi()}collections/${categoryId}/latests/${page}`, {\n method: \"GET\",\n // mode: 'CORS',\n })\n .then((res) => res.json())\n .catch((err) => err);\n}\n\nexport function fetchAllCollections(energy, vocal, sort, styleFilters, page) {\n return fetchCollections(\"all\", 0, energy, vocal, sort, styleFilters, page);\n}\n\nexport function fetchArtistCollections(\n id,\n energy,\n vocal,\n sort,\n styleFilters,\n page\n) {\n return fetchCollections(\n \"artist\",\n id,\n energy,\n vocal,\n sort,\n styleFilters,\n page\n );\n}\n\nexport function fetchStyleCollections(\n id,\n energy,\n vocal,\n sort,\n styleFilters,\n page\n) {\n return fetchCollections(\"style\", id, energy, vocal, sort, styleFilters, page);\n}\n\nfunction fetchCollections(type, id, energy, vocal, sort, styleFilters, page) {\n if (styleFilters == null) {\n styleFilters = {};\n }\n const JsonStyleFilters = JSON.stringify(styleFilters);\n return function (dispatch) {\n dispatch(requestCollections());\n return fetch(\n `${conditionallyGetCdnApi()}collections/${type}/types/${id}/ids/${energy}/energies/${vocal}/vocals/${vocal}/sorts/${JsonStyleFilters}/stylefilters/${page}`,\n {\n method: \"GET\",\n // mode: 'CORS',\n }\n )\n .then(\n (response) => response.json(),\n (error) => console.log(\"An error occured.\", error)\n )\n .then((json) => {\n dispatch(receiveCollections(json));\n });\n };\n}\n\n// ACTIONS\nfunction requestCollections() {\n return { type: \"REQUEST_COLLECTIONS\" };\n}\n\nfunction receiveCollections(collections) {\n return { type: \"RECEIVE_COLLECTIONS\", collections };\n}\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nclass SubscriptionHeading extends Component {\n constructor(props) {\n super(props);\n\n /*\n * Split input on first whitespace.\n *\n * https://stackoverflow.com/a/10272822/1482673\n */\n \n let name1 = '';\n let name2 = '';\n\n if (this.props.planName) {\n name1 = this.props.planName.substr(0,this.props.planName.indexOf(' '));\n name2 = this.props.planName.substr(this.props.planName.indexOf(' ')+1);\n }\n\n this.state = {\n name1,\n name2,\n };\n }\n\n componentDidUpdate(prevProps) {\n // Typical usage (don't forget to compare props):\n if (this.props.planName !== prevProps.planName) {\n \n let name1 = '';\n let name2 = '';\n\n if (this.props.planName) {\n name1 = this.props.planName.substr(0,this.props.planName.indexOf(' '));\n name2 = this.props.planName.substr(this.props.planName.indexOf(' ')+1);\n }\n \n this.setState({\n name1,\n name2,\n });\n }\n }\n\n render() {\n return (\n

{this.state.name1} {this.state.name2}

\n );\n }\n}\n\nSubscriptionHeading.propTypes = {\n name: PropTypes.string\n};\n\nSubscriptionHeading.defaultProps = {\n name: ''\n};\n\nexport default SubscriptionHeading;\n"],"sourceRoot":""}