{"version":3,"sources":["ReportCard/ReportHeading/dropdowngroup.png","contexts/PartnerScorecardContext/PartnerScorecardContext.js","contexts/PartnerScorecardContext/withPartnerScorecardContext.jsx","contexts/PartnerScorecardContext/index.js","components/Box.jsx","components/Button.jsx","components/Container.jsx","components/Heading.jsx","components/Link.jsx","components/Paragraph.jsx","utils/analytics-util.js","utils/search-params-link.js","utils/isBluelabel.js","utils/isReviewTrackersCreated.js","Header/Header.jsx","Header/index.js","NotFound/NotFound.jsx","NotFound/index.js","ReportCard/Keywords/Keywords.jsx","ReportCard/Keywords/index.js","ReportCard/Past/index.js","ReportCard/Past/Past.jsx","ReportCard/ReportHeading/ReportHeading.jsx","ReportCard/ReportHeading/index.js","ReportCard/ReportStat/ReportStat.jsx","ReportCard/ReportStat/index.js","ReportCard/Review/Review.jsx","ReportCard/Review/index.js","ReportCard/ReportCard.jsx","ReportCard/index.js","StartTrialFooter/StartTrialFooter.jsx","StartTrialFooter/index.js","App.js","index.js"],"names":["module","exports","PartnerScorecardContext","React","createContext","error","hasResults","loading","results","displayName","withPartnerScorecardContext","Component","props","createElement","Consumer","_ref","Object","assign","Box","styled","Base","_templateObject","_taggedTemplateLiteral","Button","BaseButton","Container","Block","Heading","BaseHeading","Link","BaseLink","Paragraph","BaseParagraph","ParagraphBox","children","rest","_objectWithoutProperties","_excluded","color","fontWeight","_templateObject2","EVENTS","track","slug","eventName","action","window","gtag","page_location","logToGoogle","fetch","method","headers","body","JSON","stringify","event_name","then","response","status","Error","json","catch","console","trackFromPath","location","pathname","substring","searchParamsLink","link","queryParams","arguments","length","undefined","qs","keys","reduce","query","key","concat","search","isBlueLabel","contactEmail","contact_email","logo_url","includes","isReviewTrackersCreated","is_whitelabel","is_internal","urlOrigin","origin","WhiteContainer","ContactInfo","div","Spacer","_templateObject3","Header","isWhitelabelDomain","hasReturnedResults","contactNumber","contact_number","isWhitelabel","renderStartTrialButton","Fragment","data-testid","onClick","open","package","as","Flex","alignItems","flexWrap","Image","src","maxWidth","height","handleLogoRender","href","className","defaultProps","FlexReverseStack","ResponsiveImage","NotFound","margin","padding","flex","paddingTop","fontSize","lineHeight","getSentimentColor","rawNum","num","parseFloat","getTestAttributeType","Keywords","arr","keywords","map","k","word","_objectSpread","sort","a","b","avg_sentiment","justifyContent","letterSpacing","data-test-id","Inline","data-test-type","Past","dateFilters","selectPastFilter","selected","dateFilter","MobileInvisibleLink","PrintPageLink","cursor","print","marginRight","textDecoration","GradeLetter","outlineColor","grade","Letter","marginTop","Checkbox","Input","Label","BaseLabel","_templateObject4","FilterCheckbox","InlineBlock","id","name","type","htmlFor","label","AdditionalSources","Popover","popover","relative","Backdrop","background","Hide","Toggle","backgroundColor","border","marginLeft","visible","left","paddingLeft","right","transform","Arrow","additionalSources","alt","_templateObject5","ReportHeading","createdAt","PastFilter","dateOptions","alignSelf","company","address","borderTop","InlineFlex","defaultChecked","onSourceFilter","hasReviews","google","disabled","tripadvisor","yelp","hideAdditionalSources","f","healthColor","health","ReportStat","borderBottom","textAlign","minWidth","icon","heading","testID","value","printHealth","defaultTypes","Wrapper","RespondButton","Review","data-review-id","review_id","source","toLowerCase","wrap","allowRespond","style","paddingRight","moment","published_at","startOf","fromNow","i","push","rating","whiteSpace","content","permalink","diversifyBySource","reviews","agg","r","primary","_toConsumableArray","findNeedsAttention","needsAttention","filter","responses","splice","findHighlights","highlights","addSource","obj","aggregateReviews","p","gReviews","values","yReviews","tReviews","ta","getScore","score","getVolHealth","num_reviews","previous_days","options","180","min","mid_min","mid_max","max","90","60","30","getRatingHealth","getRateHealth","rate","getTimeHealth","time","numOfResponse","days","Math","floor","getResponseTime","avgTime","calculateGrade","kpis","total_reviews","avg_rating","avg_response_rate","avg_response_time_hours","total_responded_reviews","handleScore","FlexMobileStack","PrintBlock","date","dates","index","indexOf","slice","ReportCard","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","call","handleOnSourceFilter","bind","_assertThisInitialized","handleSelectPastFilter","generateReviews","calculateResponseTimeHours","calculateAvgResponseRate","calculateAverage","responded","getInfo","refreshInfo","setTimePeriod","setKeywords","timePeriod","URLSearchParams","get","info","state","_createClass","this","setState","overall","pa1","pa2","duration","diff","asHours","toFixed","currentUrlParams","set","history","toString","review","review_keywords","place_info","snapshottedAt","snapshotted_at","earliestDay","clone","subtract","isBetween","parseInt","keywordScores","Map","reviewKeys","rev","apply","forEach","keyword","has","short","scores","sentiment","avg","entries","newKeywords","total_mentions","_this2","_this$props","format","StartTrialFooter","display","App","fetchScorecardResults","scorecardSlug","replace","isLoading","data","err","message","Router","Provider","Switch","Route","exact","path","component","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.72534656.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/dropdowngroup.056e9616.png\";","import React from 'react'\n\nconst PartnerScorecardContext = React.createContext({error: null, hasResults: false, loading: true, results: null})\nPartnerScorecardContext.displayName = 'PartnerScorecardContext'\n\nexport default PartnerScorecardContext\n","import React from 'react'\nimport PartnerScorecardContext from './PartnerScorecardContext'\n\nconst withPartnerScorecardContext = (Component) => props => (\n \n {({hasResults, loading, results}) => \n !loading && \n }\n \n)\n\nexport default withPartnerScorecardContext;","import PartnerScorecardContext from './PartnerScorecardContext'\nimport withPartnerScorecardContext from './withPartnerScorecardContext'\n\nexport {withPartnerScorecardContext}\nexport default PartnerScorecardContext","import { styled, Base } from 'reakit'\n\nconst Box = styled(Base)`\n background: #FFFFFF;\n border: 1px solid #C2C2C2;\n box-sizing: border-box;\n`\n\nexport default Box\n","import { styled, Button as BaseButton } from 'reakit'\n\nconst Button = styled(BaseButton)`\n background: #097AE6;\n border-width: 0;\n border-radius: 4px;\n color: #FFFFFF;\n font-size: 14px;\n padding: 10px 20px;\n text-align: center;\n \n &:hover {\n background: #0170DA;\n }\n`\n\nexport default Button\n","import { styled, Block } from 'reakit'\n\nconst Container = styled(Block)`\n margin: 0 auto;\n max-width: 953px;\n padding: 0 20px;\n width: 100%;\n`\n\nexport default Container\n","import { styled, Heading as BaseHeading } from 'reakit'\n\nconst Heading = styled(BaseHeading)`\n color: ##272E39;\n font-size: 24px;\n letter-spacing: -0.01em;\n`\n\nexport default Heading\n","import { styled, Link as BaseLink } from 'reakit'\n\nconst Link = styled(BaseLink)`\n color: #097AE6;\n font-size: 14px;\n text-decoration: underline;\n \n &:hover {\n color: #0170DA;\n }\n`\n\nexport default Link\n","import React from 'react'\nimport { styled, Paragraph as BaseParagraph } from 'reakit'\nimport Box from './Box'\n\nconst Paragraph = styled(BaseParagraph)`\n color: #828282;\n font-size: 14px;\n letter-spacing: -0.01em;\n line-height: 20px\n`\n\nexport const ParagraphBox = styled(({ children, ...rest }) => (\n \n \n {children}\n \n \n))`\n margin-top: 11px;\n text-align: center;\n`\n\nexport default Paragraph\n","const ANALYTICS_URL = '/api/analytics'\n\nexport const EVENTS = {\n PAGE_VIEW: 'page_view',\n PRINT: 'print_page',\n RESPOND_CLICKED: 'respond_clicked',\n SIGNUP: 'create_trial_clicked'\n}\n\nfunction logToGoogle (slug, action) {\n if (window.gtag) {\n window.gtag('event', action, {\n page_location: slug\n })\n }\n}\n\nfunction track (slug, eventName) {\n logToGoogle(slug, eventName)\n fetch(ANALYTICS_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ event_name: eventName, slug: slug })\n })\n .then(response => {\n if (response.status !== 200) {\n throw new Error(response.json())\n }\n return response.json()\n })\n .catch(error => console.error('Analytics Error =\\n', error))\n}\n\nexport function trackFromPath (eventName) {\n const slug = window.location.pathname.substring(1)\n\n if (slug === '') {\n return\n }\n\n track(slug, eventName)\n}\n","/**\n * We want to carry over search params to external links, this is a simple helper to do that.\n */\nconst searchParamsLink = (link, queryParams = {}) => {\n const qs = Object.keys(queryParams).reduce((query, key) =>\n !query ? `?${key}=${queryParams[key]}` : `${query}&${key}=${queryParams[key]}`\n , window.location.search)\n return link + qs\n}\n\nexport default searchParamsLink\n","/**\n * A scorecard is considered \"bluelabel\" if it is for an internal Reviewtrackers account (salesbot or marketing).\n * This is determined if\n * - a custom logo hasn't been uploaded (so RT logo will be used)\n * - the contact email is a reviewtrackers email.\n */\nexport function isBlueLabel (results) {\n const contactEmail = results.contact_email || ''\n return !results.logo_url || contactEmail.includes('reviewtrackers')\n}","export function isReviewTrackersCreated (results) {\n return !results.is_whitelabel && results.is_internal\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { styled, Block, Flex, Image } from 'reakit'\n\nimport { Button, Container } from '../components'\nimport { withPartnerScorecardContext } from '../contexts/PartnerScorecardContext'\n\n// Utils\nimport { EVENTS, trackFromPath } from '../utils/analytics-util'\nimport searchParamsLink from '../utils/search-params-link'\nimport { isBlueLabel } from '../utils/isBluelabel'\nimport { isReviewTrackersCreated } from '../utils/isReviewTrackersCreated'\n\nconst urlOrigin = window.location.origin\n\nconst WhiteContainer = styled(Block)`\n background: #FFFFFF;\n padding: 22px 0;\n width: 100%;\n`\n\nconst ContactInfo = styled.div`\n line-height: 6px;\n text-align: right;\n\n a {\n color: black;\n font-size: 14px;\n text-decoration: underline;\n }\n\n .light {\n font-weight: 400;\n }\n`\n\nconst Spacer = styled(Block)`\n flex: 1;\n`\n\nconst Header = ({ hasResults, results }) => {\n // Verify whitelabel domain\n const isWhitelabelDomain = urlOrigin.includes('wantyourfeedback')\n const hasReturnedResults = hasResults\n const contactEmail = hasReturnedResults ? results.contact_email : ''\n const contactNumber = hasReturnedResults ? results.contact_number : ''\n const isWhitelabel = hasReturnedResults ? results.is_whitelabel : false\n\n const handleLogoRender = () => {\n let logo_url\n\n if (hasReturnedResults && isWhitelabel) {\n if (results.logo_url !== null) {\n logo_url = results.logo_url\n } else {\n logo_url = null\n }\n } else if (hasReturnedResults && !isWhitelabel) {\n if (results.logo_url !== null) {\n logo_url = results.logo_url\n } else {\n logo_url = '/img/logo-horizontal-dark.svg'\n }\n } else if (!hasReturnedResults && isWhitelabelDomain) {\n logo_url = null\n } else {\n logo_url = '/img/logo-horizontal-dark.svg'\n }\n\n return (\n logo_url !== null &&\n \n )\n }\n\n const renderStartTrialButton = () => {\n if (isWhitelabelDomain && !hasReturnedResults) return\n\n if ((isWhitelabel || !isBlueLabel(results)) && hasReturnedResults) {\n return (\n <>\n

\n Contact us to schedule a demo:\n

\n \n )\n }\n\n if (isReviewTrackersCreated(results)) {\n return (\n <>\n
\n \n
\n

\n Or contact us to learn more:\n

\n \n )\n }\n }\n\n const renderCorrectHeaderContent = () => {\n if (!!contactEmail && !!contactNumber) {\n return (\n \n {renderStartTrialButton()}\n \n {contactEmail}\n \n

\n {contactNumber}\n

\n
\n )\n } else if (!!contactEmail && (contactNumber === '' || contactNumber === null)) {\n return (\n \n {renderStartTrialButton()}\n \n {contactEmail}\n \n \n )\n } else if ((contactEmail === '' || contactEmail === null) && !!contactNumber) {\n return (\n \n {renderStartTrialButton()}\n

\n {contactNumber}\n

\n
\n )\n }\n return (isReviewTrackersCreated(results) &&\n
\n \n
\n )\n }\n\n return (\n \n \n {handleLogoRender()}\n \n {isWhitelabelDomain && !hasReturnedResults ? null : renderCorrectHeaderContent()}\n \n \n )\n}\n\nHeader.propTypes = {\n hasResults: PropTypes.bool,\n results: PropTypes.shape({\n contact_email: PropTypes.string,\n contact_number: PropTypes.string,\n is_whitelabel: PropTypes.bool,\n logo_url: PropTypes.string\n })\n}\n\nHeader.defaultProps = {\n hasResults: false,\n results: {\n contact_email: '',\n contact_number: '',\n is_whitelabel: false,\n logo_url: null\n }\n}\n\nexport default withPartnerScorecardContext(Header)\n","import Header from './Header'\n\nexport default Header\n","import React from 'react'\nimport { styled, Block, Flex, Image } from 'reakit'\nimport { Heading, Paragraph, Link } from '../components'\n\nconst urlOrigin = window.location.origin\n\nconst FlexReverseStack = styled(Flex)`\n @media (max-width: 500px) {\n flex-direction: column-reverse;\n }\n`\n\nconst ResponsiveImage = styled(Image)`\n margin: 0 auto;\n object-fit: scale-down;\n width: 257px;\n \n @media (max-width: 500px) {\n margin: 0;\n width: 50%;\n }\n`\n// Verify whitelabel domain\nconst isWhitelabelDomain = urlOrigin.includes('wantyourfeedback')\n\nconst NotFound = () => (\n \n \n \n \n Sorry, we couldn't find that page!\n \n \n You may have used the wrong link or the page has moved.\n \n {!isWhitelabelDomain &&\n \n Please contact us at
\n support@reviewtrackers.com\n
}\n
\n \n \n \n
\n \n)\n\nexport default NotFound\n","import NotFound from './NotFound'\n\nexport default NotFound\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Flex, Inline } from 'reakit'\nimport { Box, ParagraphBox } from '../../components'\n\nexport const getSentimentColor = rawNum => {\n const num = parseFloat(rawNum)\n if (num < -0.25) {\n return '#EB5757'\n }\n if (num >= -0.25 && num < 0.25) {\n return '#F2994A'\n }\n return '#76B442'\n}\n\nexport const getTestAttributeType = rawNum => {\n const num = parseFloat(rawNum)\n if (num < -0.25) {\n return 'negative-keyword'\n }\n if (num >= -0.25 && num < 0.25) {\n return 'neutral-keyword'\n }\n return 'positive-keyword'\n}\n\nconst Keywords = props => {\n const arr = Object.keys(props.keywords).map(k => (Object.assign({ word: k }, { ...props.keywords[k] })))\n arr.sort((a, b) => b.avg_sentiment - a.avg_sentiment)\n\n if (arr.length === 0) {\n return (\n \n No frequently used keywords available during this period\n \n )\n }\n\n return (\n \n {arr.map(k => (\n \n {k.word}\n \n ))}\n \n )\n}\n\nKeywords.propTypes = {\n keywords: PropTypes.object\n}\n\nKeywords.defaultProps = {\n keywords: {}\n}\n\nexport default Keywords\n","import Keywords from './Keywords'\n\nexport default Keywords\n","import Past from './Past'\n\nexport default Past\n","import React from 'react'\nimport {\n Block,\n} from 'reakit'\n\nconst PastFilter = ({ dateFilters, selectPastFilter, selected }) => (\n \n
    \n
  • View Past
  • \n {dateFilters.map(dateFilter => (\n selectPastFilter(dateFilter)}\n >\n {dateFilter} days\n \n ))}\n
\n
\n)\n\nexport default PastFilter\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n styled,\n Backdrop,\n Button,\n Block,\n Flex,\n Label as BaseLabel,\n Image,\n Inline,\n InlineBlock,\n InlineFlex,\n Input,\n Popover\n} from 'reakit'\nimport { Box, Heading, Link, Paragraph } from '../../components'\n\n// Utils\nimport { EVENTS, trackFromPath } from '../../utils/analytics-util'\nimport searchParamsLink from '../../utils/search-params-link'\n\nimport additionalSources from './dropdowngroup.png'\nimport PastFilter from '../Past'\n\nconst MobileInvisibleLink = styled(Link)`\n @media (max-width: 500px), print {\n display: none;\n }\n`\nconst PrintPageLink = () => (\n {\n trackFromPath(EVENTS.PRINT)\n window.print()\n }}\n >\n \n \n \n Print page\n \n)\n\nconst GradeLetter = ({ grade }) => {\n let outlineColor\n switch (grade) {\n case 'A+':\n case 'A':\n case 'A-':\n case 'B+':\n case 'B':\n case 'B-':\n outlineColor = '#76B442'\n break\n case 'C+':\n case 'C':\n case 'C-':\n outlineColor = '#F2994A'\n break\n case 'D+':\n case 'D':\n case 'D-':\n case 'F':\n outlineColor = '#EB5757'\n break\n default:\n outlineColor = '#000000'\n }\n\n const Letter = styled(Block)`\n background-color: #FFFFFF;\n flex: 0 1 auto;\n font-size: 60px;\n font-weight: 600;\n outline: 4px solid ${outlineColor};\n padding: 15px;\n text-align: center;\n user-select: none;\n `\n return (\n \n {grade}\n YOUR GRADE\n \n )\n}\n\nconst Checkbox = styled(Input)`\n font-size: 14px;\n -webkit-appearance: checkbox;\n -moz-appearance: checkbox;\n`\nconst Label = styled(BaseLabel)`\n font-size: 14px;\n margin: 0 30px 0 5px;\n\n &:disabled {\n color: #EFEFEF;\n }\n`\nconst FilterCheckbox = props => (\n \n \n \n {props.label}\n \n \n)\n\nconst AdditionalSources = styled(props => (\n \n {popover => (\n \n \n \n Additional sources\n \n \n \n \n {\n trackFromPath(EVENTS.SIGNUP)\n window.open(searchParamsLink('https://www.reviewtrackers.com/request-demo/', { package: 'essential' }))\n }}\n left={0}\n paddingLeft={5}\n right={0}\n transform='none'\n >\n \n \n \n \n )}\n \n))`\n @media print {\n display: none\n }\n`\n\nconst ReportHeading = props => (\n <>\n \n \n Reputation Scorecard\n \n \n \n \n Created {props.createdAt}\n \n \n \n \n \n \n \n \n {props.company.name}\n \n \n {props.company.address}\n \n \n \n \n \n REVIEW SOURCES\n \n \n \n \n {\n props.onSourceFilter(null)\n }}\n />\n {props.hasReviews.google &&\n {\n props.onSourceFilter('google')\n }}\n />}\n {props.hasReviews.tripadvisor &&\n {\n props.onSourceFilter('ta')\n }}\n />}\n {props.hasReviews.yelp &&\n {\n props.onSourceFilter('yelp')\n }}\n />}\n \n {!props.hideAdditionalSources && }\n \n \n \n \n)\n\nGradeLetter.propTypes = {\n grade: PropTypes.string\n}\n\nGradeLetter.defaultProps = {\n grade: ''\n}\n\nFilterCheckbox.propTypes = {\n id: PropTypes.string,\n label: PropTypes.string\n}\n\nFilterCheckbox.defaultProps = {\n id: '',\n label: ''\n}\n\nReportHeading.propTypes = {\n company: PropTypes.shape({\n address: PropTypes.string,\n name: PropTypes.string.isRequired\n }),\n createdAt: PropTypes.string.isRequired,\n dateOptions: PropTypes.array.isRequired,\n grade: PropTypes.oneOf(['A', 'B', 'C', 'D', 'E', 'F']).isRequired,\n hideAdditionalSources: PropTypes.bool,\n hasReviews: PropTypes.shape({\n google: PropTypes.bool,\n tripadvisor: PropTypes.bool,\n yelp: PropTypes.bool\n }),\n onSourceFilter: PropTypes.func,\n selectPastFilter: PropTypes.func,\n selected: PropTypes.number\n}\n\nReportHeading.defaultProps = {\n company: {\n name: ''\n },\n hideAdditionalSources: false,\n hasReviews: {\n google: false,\n tripadvisor: false,\n yelp: false\n },\n onSourceFilter: f => f,\n selectPastFilter: f => f,\n selected: 180\n}\n\nexport default ReportHeading\n","import ReportHeading from './ReportHeading'\n\nexport default ReportHeading\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Block, Flex } from 'reakit'\nimport { Box, Heading } from '../../components'\n\nconst healthColor = health => {\n switch(health) {\n case 'above':\n return '#76B442'\n case 'below':\n return '#EB5757'\n default:\n return '#F2994A'\n }\n}\n\nconst printHealth = health => {\n switch(health) {\n case 'above':\n return 'ABOVE AVERAGE'\n case 'below':\n return 'BELOW AVERAGE'\n default:\n return 'AVERAGE'\n }\n}\n\nconst ReportStat = props => (\n \n \n {props.icon}\n {props.heading}\n \n \n {props.value}\n \n { props.health !== 'na' &&\n \n {printHealth(props.health)}\n \n }\n \n)\nReportStat.propTypes = {\n health: PropTypes.oneOf(['above', 'below', 'avg', 'na']),\n testID: PropTypes.string\n}\nReportStat.defaultTypes = {\n health: 'avg'\n}\n\nexport default ReportStat\n","import ReportStat from './ReportStat'\n\nexport default ReportStat\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { styled, Block, Button, Flex, Image } from 'reakit'\nimport { Box, Paragraph } from '../../components'\nimport {EVENTS, trackFromPath} from '../../utils/analytics-util';\n\nconst rating = num => {\n const arr = [];\n for(let i = 0; i < num; i++){\n arr.push();\n }\n for(let i = num; i < 5; i++){\n arr.push();\n }\n return arr;\n};\n\nconst onClickRespond = (permalink) => {\n trackFromPath(EVENTS.RESPOND_CLICKED)\n window.open(permalink);\n}\n\nconst sourceIconUrl = (source) => {\n if (source === 'Google') {\n return \"https://rtx-source-icons.s3.amazonaws.com/logos/google.png\";\n }\n\n if (source === 'Tripadvisor') {\n return \"https://rtx-source-icons.s3.amazonaws.com/logos/tripadvisor.png\";\n }\n\n if (source === 'Yelp') {\n return \"https://rtx-source-icons.s3.amazonaws.com/logos/yelp.png\";\n }\n\n return null;\n}\n\nconst truncatedContent = (content) => {\n if (!content) {\n return null;\n }\n\n if (content.length < 500) {\n return content\n }\n\n return content.substring(0, 500) + '...'\n}\n\nconst Wrapper = styled(Box)`\n font-size: 14px;\n letter-spacing: -0.01em;\n margin-top: 11px;\n padding: 20px;\n\n &:first-child {\n margin-top: 0px;\n }\n`\n\nconst RespondButton = styled(Button)`\n color: #828282;\n border-color: #E0E0E0;\n border-radius: 4px;\n border-width: 2px;\n font-size: 14px;\n font-weight: 500;\n height: 30px\n padding: 10px;\n width: 161px;\n`\n\nconst Review = props => (\n \n \n \n \n {\n props.allowRespond &&\n \n \n {moment(props.published_at).startOf('day').fromNow()}\n \n }\n \n \n {rating(props.rating)}\n \n \n {truncatedContent(props.content)}\n \n {\n props.allowRespond &&\n \n onClickRespond(props.permalink)}>\n Respond to review\n \n \n }\n \n)\n\nReview.propTypes = {\n allowRespond: PropTypes.bool,\n source: PropTypes.string.isRequired,\n rating: PropTypes.number.isRequired,\n content: PropTypes.string.isRequired,\n permalink: PropTypes.string.isRequired,\n published_at: PropTypes.string.isRequired,\n review_id: PropTypes.string.isRequired\n}\n\nReview.defaultProps = {\n allowRespond: false\n}\n\nexport default Review;\n","import Review from './Review'\n\nexport default Review\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport { styled, Block, Flex, InlineFlex } from 'reakit'\nimport { Paragraph, ParagraphBox } from '../components'\nimport { withPartnerScorecardContext } from '../contexts/PartnerScorecardContext'\nimport NotFound from '../NotFound'\n\nimport Keywords from './Keywords'\nimport ReportHeading from './ReportHeading'\nimport ReportStat from './ReportStat'\nimport Review from './Review'\nimport './ReportCard.css'\nimport 'url-search-params-polyfill'\nimport { isReviewTrackersCreated } from '../utils/isReviewTrackersCreated'\n\nconst BELOW = 'below'\nconst SLIGHTLY_BELOW_AVERAGE = 'slightly below average'\nconst AVERAGE = 'avg'\nconst SLIGHTLY_ABOVE_AVERAGE = 'slightly above average'\nconst ABOVE = 'above'\n\n/**\n * Pulls a sample of each review source to beginning of array.\n */\nconst diversifyBySource = reviews => {\n const results = reviews\n .reduce((agg, r) => {\n agg.primary.map(r => r.source).includes(r.source) ? agg.rest.push(r) : agg.primary.push(r)\n return agg\n }, { primary: [], rest: [] })\n\n return [...results.primary, ...results.rest]\n}\n\n/**\n * Returns top 3 reviews that have content and no response, lowest rating first, and diversifying by source if possible.\n */\nconst findNeedsAttention = reviews => {\n if (!reviews || reviews.length === 0) {\n return []\n }\n\n const needsAttention = reviews.filter(r => r && r.content !== null && r.responses.length === 0)\n needsAttention.sort((a, b) => a.rating - b.rating)\n return diversifyBySource(needsAttention).splice(0, 3)\n}\n\n/**\n * Returns top 3 reviews that have content, highest rating first, and diversifying by source if possible.\n */\nconst findHighlights = reviews => {\n if (!reviews || reviews.length === 0) {\n return []\n }\n\n const highlights = reviews.filter(r => r && r.content !== null && r.rating >= 3)\n highlights.sort((a, b) => b.rating - a.rating)\n return diversifyBySource(highlights).splice(0, 3)\n}\n\nconst addSource = (obj, source) => {\n obj.source = source\n return obj\n}\n\nconst aggregateReviews = p => {\n const gReviews = p.google.reviews && Object.values(p.google.reviews).map(r => addSource(r, 'Google'))\n const yReviews = p.yelp.reviews && Object.values(p.yelp.reviews).map(r => addSource(r, 'Yelp'))\n const tReviews = p.ta.reviews && Object.values(p.ta.reviews).map(r => addSource(r, 'Tripadvisor'))\n\n return [].concat(gReviews, yReviews, tReviews)\n}\n\nconst getScore = score => {\n switch (score) {\n case BELOW:\n return -2\n case SLIGHTLY_BELOW_AVERAGE:\n return -1\n case AVERAGE:\n return 0\n case SLIGHTLY_ABOVE_AVERAGE:\n return 1\n case ABOVE:\n return 2\n default:\n return 0\n }\n}\n\nconst getVolHealth = (num_reviews, previous_days) => {\n const options = {\n 180: { min: 16, mid_min: 24, mid_max: 31, max: 40 },\n 90: { min: 8, mid_min: 12, mid_max: 16, max: 20 },\n 60: { min: 6, mid_min: 8, mid_max: 11, max: 14 },\n 30: { min: 3, mid_min: 4, mid_max: 6, max: 7 }\n }\n const selected = options[previous_days] === undefined ? options[180] : options[previous_days]\n\n if (num_reviews < selected.min) {\n return BELOW\n }\n if (num_reviews >= selected.min && num_reviews < selected.mid_min) {\n return SLIGHTLY_BELOW_AVERAGE\n }\n if (num_reviews >= selected.mid_min && num_reviews < selected.mid_max) {\n return AVERAGE\n }\n if (num_reviews >= selected.mid_max && num_reviews < selected.max) {\n return SLIGHTLY_ABOVE_AVERAGE\n }\n return ABOVE\n}\n\nconst getRatingHealth = rating => {\n if (rating < 3.5) {\n return BELOW\n }\n if (rating >= 3.5 && rating < 4.1) {\n return SLIGHTLY_BELOW_AVERAGE\n }\n if (rating >= 4.1 && rating < 4.3) {\n return AVERAGE\n }\n if (rating >= 4.3 && rating < 4.5) {\n return SLIGHTLY_ABOVE_AVERAGE\n }\n return ABOVE\n}\n\nconst getRateHealth = rate => {\n if (rate < 0.21) {\n return BELOW\n }\n if (rate >= 0.21 && rate < 0.41) {\n return SLIGHTLY_BELOW_AVERAGE\n }\n if (rate >= 0.41 && rate < 0.51) {\n return AVERAGE\n }\n if (rate >= 0.51 && rate < 0.61) {\n return SLIGHTLY_ABOVE_AVERAGE\n }\n return ABOVE\n}\n\nconst getTimeHealth = (time, numOfResponse) => {\n if (numOfResponse < 1) {\n return 'na'\n }\n const days = Math.floor(time / 24)\n if (days >= 7) {\n return BELOW\n }\n if (days >= 5 && days < 7) {\n return SLIGHTLY_BELOW_AVERAGE\n }\n if (days >= 3 && days < 5) {\n return AVERAGE\n }\n if (days > 1 && days <= 3) {\n return SLIGHTLY_ABOVE_AVERAGE\n }\n return ABOVE\n}\n\nconst getResponseTime = (avgTime, numOfResponse) => {\n if (numOfResponse < 1) {\n return 'N/A'\n }\n // Floor so that we can actually show `< 1 day`, otherwise it wouldnt be possible\n const days = Math.floor(avgTime / 24)\n if (days < 1) {\n return '< 1 day'\n }\n if (days === 1) {\n return '1 day'\n }\n return `${days} days`\n}\n\nconst calculateGrade = (kpis, name, previous_days) => {\n let score = 0\n\n score += getScore(getVolHealth(kpis.total_reviews, previous_days))\n score += getScore(getRatingHealth(kpis.avg_rating))\n score += getScore(getRateHealth(kpis.avg_response_rate))\n score += getScore(getTimeHealth(kpis.avg_response_time_hours, kpis.total_responded_reviews))\n return handleScore(score)\n}\n\nconst handleScore = score => {\n switch (score) {\n case 8:\n return 'A+'\n case 7:\n return 'A'\n case 6:\n return 'A-'\n case 5:\n return 'B+'\n case 4:\n return 'B'\n case 3:\n return 'B-'\n case 2:\n return 'C+'\n case 1:\n return 'C'\n case 0:\n return 'C-'\n case -1:\n return 'D+'\n case -2:\n return 'D'\n case -3:\n return 'D-'\n default:\n return 'F'\n }\n}\n\nconst FlexMobileStack = styled(Flex)`\n @media (max-width: 500px) {\n flex-direction: column;\n }\n`\n\nconst PrintBlock = styled(Block)`\n @media print {\n page-break-inside: avoid;\n }\n`\n\nconst dateOptions = (date) => {\n const dates = [30, 60, 90, 180]\n const index = dates.indexOf(date)\n return dates.slice(0, index + 1)\n}\n\nclass ReportCard extends Component {\n constructor (props) {\n super(props)\n this.handleOnSourceFilter = this.handleOnSourceFilter.bind(this)\n this.handleSelectPastFilter = this.handleSelectPastFilter.bind(this)\n this.generateReviews = this.generateReviews.bind(this)\n this.calculateResponseTimeHours = this.calculateResponseTimeHours.bind(this)\n this.calculateAvgResponseRate = this.calculateAvgResponseRate.bind(this)\n this.calculateAverage = this.calculateAverage.bind(this)\n this.responded = this.responded.bind(this)\n this.getInfo = this.getInfo.bind(this)\n this.refreshInfo = this.refreshInfo.bind(this)\n this.setTimePeriod = this.setTimePeriod.bind(this)\n this.setKeywords = this.setKeywords.bind(this)\n\n const hasResults = props.hasResults\n const reviews = hasResults ? aggregateReviews(props.results) : 0\n\n const currentUrlParams = new URLSearchParams(window.location.search)\n const timePeriod = currentUrlParams.get('time_period')\n\n let days = props.results.previous_days !== undefined ? props.results.previous_days : props.previous_days\n if (timePeriod !== null) {\n days = this.setTimePeriod(timePeriod)\n }\n\n const info = hasResults ? this.refreshInfo(days, null) : {}\n\n this.state = {\n ...info,\n previous_days: days,\n highlights: findHighlights(reviews),\n needsAttention: findNeedsAttention(reviews),\n source: null\n }\n }\n\n generateReviews (reviews) {\n this.setState({\n highlights: findHighlights(reviews),\n needsAttention: findNeedsAttention(reviews)\n })\n }\n\n handleOnSourceFilter (source) {\n const { results } = this.props\n const days = this.state.previous_days\n\n const overall = source === null ? results.overall : results[source].overall\n const reviews = source === null ? aggregateReviews(results) : Object.values(results[source].reviews)\n\n this.setState({ ...overall, source: source })\n this.generateReviews(reviews)\n\n const info = this.refreshInfo(days, source)\n this.setState({\n ...info\n })\n }\n\n calculateAvgResponseRate (reviews, responded) {\n if (responded.length === 0) {\n return 0\n }\n\n return responded.length / reviews.length\n }\n\n calculateResponseTimeHours (responded) {\n if (responded.length === 0) {\n return 0\n }\n\n const timeDiff = (a, b) => {\n const response = b.responses[0]\n const pa1 = moment(response.published_at)\n const pa2 = moment(b.published_at)\n var duration = moment.duration(pa1.diff(pa2))\n return a + (duration.asHours())\n }\n const time = responded.reduce(timeDiff, 0)\n\n return (time / responded.length).toFixed(2)\n }\n\n handleSelectPastFilter (days) {\n const source = this.state.source\n\n const currentUrlParams = new URLSearchParams(window.location.search)\n currentUrlParams.set('time_period', days)\n this.props.history.push(window.location.pathname + '?' + currentUrlParams.toString())\n\n const info = this.refreshInfo(days, source)\n this.setState({\n ...info,\n previous_days: days\n })\n }\n\n calculateAverage (reviews) {\n if (reviews.length === 0) {\n return 0\n }\n\n const total = reviews.reduce((a, b) => ({ rating: a.rating + b.rating }))\n return (total.rating / reviews.length).toFixed(2)\n }\n\n responded (reviews) {\n return reviews.filter((review) => {\n return review.responses.length > 0\n })\n }\n\n getInfo (reviews, responded, previous_days) {\n const { results } = this.props\n\n const info = {\n avg_rating: this.calculateAverage(reviews),\n avg_response_time_hours: this.calculateResponseTimeHours(responded),\n total_responded_reviews: responded.length,\n avg_response_rate: this.calculateAvgResponseRate(reviews, responded),\n total_reviews: reviews.length,\n keywords: this.setKeywords(results.review_keywords, reviews)\n }\n\n return {\n ...info,\n grade: reviews.length > 0 ? calculateGrade(info, results.place_info.name, previous_days) : 'F'\n }\n }\n\n refreshInfo (days, source) {\n const { results } = this.props\n\n const snapshottedAt = moment(results.snapshotted_at)\n const earliestDay = snapshottedAt.clone().subtract(days, 'days')\n\n const revs = source === null ? aggregateReviews(results) : results[source].reviews\n\n const reviews = revs.filter((review) => {\n const publishedAt = moment(review.published_at)\n return publishedAt.isBetween(earliestDay, snapshottedAt)\n })\n\n this.generateReviews(reviews)\n\n const responded = this.responded(reviews)\n const info = this.getInfo(reviews, responded, days)\n\n return info\n }\n\n setTimePeriod (timePeriod) {\n const times = ['30', '60', '90', '180']\n let time = 180\n if (times.includes(timePeriod)) {\n time = parseInt(timePeriod)\n }\n\n return time\n }\n\n setKeywords (keywords, reviews) {\n if (keywords.length === 0 || reviews.length === 0) {\n return {}\n }\n\n const keywordScores = new Map()\n const reviewKeys = reviews.map(rev => rev.review_id)\n const reviewKeywords = [].concat(...reviewKeys.map(rev => keywords[rev])\n .filter(rev => rev !== undefined))\n\n // collect up all scores by their short value into a map\n reviewKeywords.forEach(keyword => {\n if (keywordScores.has(keyword.short)) {\n const scores = keywordScores.get(keyword.short)\n scores.push(keyword.sentiment)\n keywordScores.set(keyword.short, scores)\n } else {\n keywordScores.set(keyword.short, [keyword.sentiment])\n }\n })\n\n const avg = (arr) => {\n return arr.reduce((a, b) => a + b) / arr.length\n }\n\n const value = (arr) => {\n return arr.length + (avg(arr) * -1)\n }\n\n let scores = [...keywordScores.entries()]\n scores = scores.sort((a, b) => {\n return value(b[1]) - value(a[1])\n }).slice(0, 6)\n\n const newKeywords = {}\n scores.forEach(keyword => {\n newKeywords[keyword[0]] = {\n avg_sentiment: keyword[1].reduce((a, b) => a + b) / keyword[1].length,\n total_mentions: keyword[1].length\n }\n })\n\n return newKeywords\n }\n\n render () {\n const { hasResults, results } = this.props\n const snapshottedAt = moment(results.snapshotted_at).format('l')\n return (!hasResults\n ? \n : (\n \n \n 0,\n tripadvisor: results.ta.overall && results.ta.overall.total_reviews > 0,\n yelp: results.yelp.overall && results.yelp.overall.total_reviews > 0\n }}\n />\n \n \n \n

\n PAST {this.state.previous_days} DAYS\n

\n \n \n {snapshottedAt}\n \n
\n \n \n }\n heading='Reviews'\n value={this.state.total_reviews}\n health={getVolHealth(this.state.total_reviews, this.state.previous_days)}\n testID='total-reviews-kpi'\n />\n }\n heading='Average Rating'\n value={this.state.avg_rating}\n health={getRatingHealth(this.state.avg_rating)}\n testID='avg-rating-kpi'\n />\n \n \n }\n heading='Your Response Rate'\n value={`${(this.state.avg_response_rate * 100).toFixed(0)}%`}\n health={getRateHealth(this.state.avg_response_rate)}\n testID='response-rate-kpi'\n />\n }\n heading='Average Response Time'\n value={getResponseTime(this.state.avg_response_time_hours, this.state.total_responded_reviews)}\n health={getTimeHealth(this.state.avg_response_time_hours, this.state.total_responded_reviews)}\n testID='response-time-kpi'\n />\n \n \n
\n \n
\n

FREQUENTLY USED KEYWORDS

\n

Positive and negative words that frequently appeared in your reviews from the past {this.state.previous_days} days

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

REVIEW HIGHLIGHTS

\n

Some of your best reviews from the past {this.state.previous_days} days

\n {this.state.highlights.length > 0 && this.state.highlights.map(r => (\n \n ))}\n {this.state.highlights.length === 0 && (\n \n No reviews available during this period\n \n )}\n
\n
\n

NEEDS ATTENTION

\n

Oldest reviews without a response from the past {this.state.previous_days} days

\n {this.state.needsAttention.length > 0 && this.state.needsAttention.map(r => (\n \n ))}\n {this.state.needsAttention.length === 0 && (\n \n No reviews available during this period\n \n )}\n
\n
\n
\n )\n )\n }\n}\n\nReportCard.propTypes = {\n hasResults: PropTypes.bool,\n results: PropTypes.object,\n previous_days: PropTypes.number,\n snapshotted_at: PropTypes.string,\n place_info: PropTypes.shape({\n name: PropTypes.string,\n address: PropTypes.string\n }),\n overall: PropTypes.shape({\n total_reviews: PropTypes.number,\n avg_rating: PropTypes.number,\n avg_response_time_hours: PropTypes.number,\n avg_response_rate: PropTypes.number\n })\n}\n\nReportCard.defaultProps = {\n hasResults: false,\n results: {},\n snapshotted_at: '',\n previous_days: 180,\n place_info: {\n name: '',\n address: ''\n },\n overall: {\n total_reviews: 1,\n avg_rating: 1,\n avg_response_time_hours: 1,\n avg_response_rate: 1\n }\n}\n\nexport default withPartnerScorecardContext(ReportCard)\n","import ReportCard from './ReportCard'\n\nexport default ReportCard\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { styled, Block, Image } from 'reakit'\nimport { Button, Heading, Paragraph } from '../components'\nimport { withPartnerScorecardContext } from '../contexts/PartnerScorecardContext'\n\n// Utils\nimport { EVENTS, trackFromPath } from '../utils/analytics-util'\nimport searchParamsLink from '../utils/search-params-link'\nimport { isBlueLabel } from '../utils/isBluelabel'\nimport { isReviewTrackersCreated } from '../utils/isReviewTrackersCreated'\n\nconst urlOrigin = window.location.origin\n\nconst ContactInfo = styled.div`\n line-height: 6px;\n\n a {\n color: black;\n font-size: 14px;\n text-decoration: underline;\n }\n\n .light {\n font-weight: 400;\n }\n`\n\nconst StartTrialFooter = ({ hasResults, results }) => {\n // Verify whitelabel domain\n const isWhitelabelDomain = urlOrigin.includes('wantyourfeedback')\n const hasReturnedResults = hasResults\n const contactEmail = hasReturnedResults ? results.contact_email : ''\n const contactNumber = hasReturnedResults ? results.contact_number : ''\n const isWhitelabel = hasReturnedResults ? results.is_whitelabel : false\n\n const handleLogoRender = () => {\n let logo_url = null\n\n if (hasReturnedResults && isWhitelabel) {\n if (results.logo_url !== null) {\n logo_url = results.logo_url\n } else {\n logo_url = null\n }\n } else if (hasReturnedResults && !isWhitelabel) {\n if (results.logo_url !== null) {\n logo_url = results.logo_url\n } else {\n logo_url = '/img/logo-horizontal-dark.svg'\n }\n } else if (!hasReturnedResults && isWhitelabelDomain) {\n logo_url = null\n } else {\n logo_url = '/img/logo-horizontal-dark.svg'\n }\n\n return (\n logo_url !== null &&\n \n )\n }\n\n const renderStartTrialButton = () => {\n if (isWhitelabelDomain && !hasReturnedResults) return\n\n if ((isWhitelabel || !isBlueLabel(results)) && hasReturnedResults) {\n return (\n <>\n

\n Contact us to schedule a demo:\n

\n \n )\n }\n\n if (isReviewTrackersCreated(results)) {\n return (\n <>\n
\n {\n trackFromPath(EVENTS.SIGNUP)\n window.open(searchParamsLink('https://www.reviewtrackers.com/request-demo/', { package: 'essential' }))\n }}\n >\n Request a demo\n \n
\n

\n Or contact us to learn more:\n

\n \n )\n }\n }\n\n const renderCorrectFooterContent = () => {\n if (!!contactEmail && !!contactNumber) {\n return (\n \n {renderStartTrialButton()}\n \n {contactEmail}\n \n

\n {contactNumber}\n

\n
\n )\n } else if ((contactEmail === '' || contactEmail === null) && !!contactNumber) {\n return (\n \n {renderStartTrialButton()}\n

\n {contactNumber}\n

\n
\n )\n } else if (!!contactEmail && (contactNumber === '' || contactNumber === null)) {\n return (\n \n {renderStartTrialButton()}\n \n {contactEmail}\n \n \n )\n }\n return ((isReviewTrackersCreated(results)) &&\n <>\n \n Track and respond to reviews from 130+ sources\n \n \n Sign up for a free trial at ReviewTrackers\n \n
\n {\n trackFromPath(EVENTS.SIGNUP)\n window.open(searchParamsLink('https://www.reviewtrackers.com/request-demo/', { package: 'essential' }))\n }}\n >\n Request a demo\n \n
\n \n )\n }\n\n return (\n \n {handleLogoRender()}\n {isWhitelabelDomain && !hasReturnedResults ? null : renderCorrectFooterContent()}\n \n )\n}\n\nStartTrialFooter.propTypes = {\n hasResults: PropTypes.bool,\n results: PropTypes.shape({\n contact_email: PropTypes.string,\n contact_number: PropTypes.string,\n is_whitelabel: PropTypes.bool,\n logo_url: PropTypes.string\n })\n}\n\nStartTrialFooter.defaultProps = {\n hasResults: false,\n results: {\n contact_email: '',\n contact_number: '',\n is_whitelabel: false,\n logo_url: null\n }\n}\n\nexport default withPartnerScorecardContext(StartTrialFooter)\n","import StartTrialFooter from './StartTrialFooter'\n\nexport default StartTrialFooter\n","import React, { Component } from 'react'\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\nimport PartnerScorecardContext from './contexts/PartnerScorecardContext'\n\nimport { Container } from './components'\nimport Header from './Header'\nimport NotFound from './NotFound'\nimport ReportCard from './ReportCard'\nimport StartTrialFooter from './StartTrialFooter'\n\nclass App extends Component {\n constructor (props) {\n super(props)\n this.state = {\n error: null,\n hasResults: false,\n isLoading: true,\n results: {}\n }\n }\n\n componentDidMount () {\n this.fetchScorecardResults()\n }\n\n fetchScorecardResults = () => {\n const scorecardSlug = window.location.pathname.replace('/', '')\n this.setState({ isLoading: true })\n fetch(`/api/snapshot/${scorecardSlug}/results`)\n .then(response => {\n if (response.status !== 200) {\n throw new Error(response.json())\n }\n return response.json()\n })\n .then(data => {\n this.setState({ isLoading: false, hasResults: true, results: data })\n })\n .catch(err => {\n console.error(err)\n this.setState({ isLoading: false, hasResults: false, error: err.message })\n })\n }\n\n render () {\n return (\n \n \n
\n \n \n \n \n \n \n \n \n \n )\n }\n}\n\nexport default App\n","import 'react-app-polyfill/ie11'\nimport 'react-app-polyfill/stable'\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(, document.getElementById('root'));\n"],"sourceRoot":""}