{"version":3,"sources":["webpack:///./static/js/components/search-page/templates/hits/utils.js","webpack:///./static/js/components/search-page/templates/hits/post.js","webpack:///./static/js/components/search-page/templates/hits/page.js","webpack:///./static/js/components/search-page/templates/hits/student-story.js","webpack:///./static/js/components/search-page/templates/hits/program.js","webpack:///./static/js/components/search-page/templates/hits/program-pdp.js","webpack:///./static/js/components/search-page/templates/hits/program-studyabroad.js","webpack:///./static/js/components/search-page/templates/hits/event.js","webpack:///./static/js/components/search-page/templates/widgets/stats.js","webpack:///./static/js/components/search-page/templates/widgets/pagination.js","webpack:///./static/js/components/search-page/templates/widgets/search-box.js","webpack:///./static/js/components/search-page/templates/widgets/refinement.js","webpack:///./static/js/components/search-page/templates/empty.js","webpack:///./static/js/components/search-page/utils.js","webpack:///./static/js/components/search-page/filters.js","webpack:///./static/js/components/search-page/refinement-filters-manager.js","webpack:///./static/js/components/search-page/index.js","webpack:///./static/js/components/search-page/templates/index.js"],"names":["createStatMarkupForArrays","heading","values","isEmpty","join","joinWithCommas","Array","isArray","hasDatePassed","date","Date","now","post","hit","overline","title","url","excerpt","media","author","authors","postThumbnail","authorName","name","authorTitle","authorHeadshot","headshot","authorLink","link","page","studentStory","program","intro_quote","thumbnail","renderedThumbnail","renderedProgram","renderedIntroQuote","undefined","simple","modes","subject_areas","intro_headline","stats","noFormatStats","filter","stat","label","renderedStats","reduce","acc","value","renderedFormatAndSubjectArea","programPdp","program_dates","programDates","Object","entries","cost","format","registration_deadline","length","reg_deadline_next_day","setDate","getDate","d","day","slice","month","getMonth","year","getFullYear","getDateStamp","studyAbroad","event","event_date","startDate","tempStartDate","find","end","start","toLocaleDateString","weekday","data","hasManyResults","hasOneResult","nbHits","pagination","renderOptions","isFirstPage","isLastPage","createURL","currentRefinement","nbPages","widgetParams","container","document","querySelector","innerHTML","classList","add","remove","previous","next","searchBox","isFirstRender","query","refine","clear","isSearchStalled","loadingContainer","input","createElement","setAttribute","innerText","button","buttonContent","appendChild","placeholder","prompt","autofocus","addEventListener","target","gsap","defaults","duration","ease","refinement","items","filtersManager","attribute","searchContainer","refinementUl","map","item","isRefined","count","setFilters","querySelectorAll","forEach","element","e","preventDefault","currentTarget","dataset","searchTop","getBoundingClientRect","top","window","innerWidth","set","scrollTo","scrollY","refinementList","toggle","isVisible","empty","results","compareMonths","first","second","months","indexOf","registerPlugin","ScrollToPlugin","Filters","parent","this","parentSelector","toggleSelector","filtersSelector","filtersIsOpen","height","y","overflow","autoAlpha","resize","bindEvents","tl","timeline","to","delay","from","close","open","RefinementFiltersManager","filters","filtersUl","update","filtersHTML","harvard","env","ALGOLIA_APPLICATION_ID","ALGOLIA_SEARCH_ONLY_API_KEY","ALGOLIA_INDEX_NAME","SEARCH_SETTINGS","containers","refinementFilters","loading","hits","SearchPage","URL","location","href","searchParams","get","indexName","min","max","minimum","searchSettings","JSON","parse","jsonParse","refinementAttributes","refinement_attributes","paginationSize","pagination_size","Math","searchClient","algoliasearch","search","instantsearch","initialUiState","routing","configure","customPagination","connectPagination","getPaginationTemplate","customSearchBox","connectSearchBox","getSearchBoxTemplate","customRefinement","connectRefinementList","getRefinementTemplate","refinementFiltersManager","hitsPerPage","customRefinements","limit","sortBy","addWidgets","distinct","facetingAfterDistinct","templates","text","getStatsTemplate","getEmptyHitsTemplate","typeMapping","type"],"mappings":"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","file":"search-page.js","sourcesContent":["import isEmpty from 'lodash.isempty';\n\nexport function createStatMarkupForArrays(heading, values) {\n if (isEmpty(values)) {\n return '';\n }\n\n return `\n
\n

${heading}

\n

${values.join(', ')}

\n
\n `;\n}\n\nexport function joinWithCommas(values) {\n return Array.isArray(values) ? values.join(', ') : values;\n}\n\nexport function hasDatePassed(date) {\n return Date.now() > new Date(date);\n}\n","import { joinWithCommas } from './utils';\nexport default function post(hit, overline) {\n const { title, url, excerpt, media, authors } = hit;\n const author = authors[0] || {};\n\n const postThumbnail = media\n ? `
\"${title}\"
`\n : '';\n const authorName = author.name ? `${author.name}` : '';\n const authorTitle = author.title\n ? `${author.title}`\n : '';\n const authorHeadshot = author.headshot\n ? `
`\n : '';\n const authorLink = author.link\n ? `${authorHeadshot}
${authorName}${authorTitle}
`\n : `
${authorHeadshot}
${authorName}${authorTitle}
`;\n\n return `\n
\n ${overline ? `${joinWithCommas(hit[overline])}` : ''}\n
\n ${postThumbnail}\n
\n \n

\n ${title}\n

\n

${excerpt}

\n
\n
${authorLink}
\n
\n
\n `;\n}\n","export default function page(hit, overline) {\n const { excerpt } = hit;\n\n return `\n
\n ${hit[overline] ? `${hit[overline]}` : ''}\n
\n \n

\n ${hit.title}\n

\n
\n ${excerpt ? `

${excerpt}

` : ''}\n
\n
\n `;\n}\n","import { joinWithCommas } from './utils';\n\nexport default function studentStory(hit, overline) {\n const { title, url, program, intro_quote, thumbnail } = hit;\n\n const renderedThumbnail = thumbnail\n ? `\n
\n \"${title}\"\n
\n `\n : '';\n\n const renderedProgram = program\n ? `\n
\n ${program}\n
\n `\n : '';\n\n const renderedIntroQuote = intro_quote\n ? `
${intro_quote}
`\n : '';\n\n return `\n \n ${\n hit[overline] !== undefined\n ? `${joinWithCommas(\n hit[overline],\n )}`\n : ''\n}\n
\n ${renderedThumbnail}\n
\n ${renderedIntroQuote}\n

\n ${title}\n

\n ${renderedProgram}\n
\n
\n
\n `;\n}\n","import isEmpty from 'lodash.isempty';\nimport { createStatMarkupForArrays, joinWithCommas } from './utils';\n\nexport default function program(hit, overline, simple = false) {\n const { modes, subject_areas, title, url, intro_headline, stats } = hit;\n\n //Get stats that are not labeled 'Format'\n const noFormatStats = isEmpty(stats) ? stats : stats.filter(stat => stat.label !== 'Format');\n\n const renderedStats = isEmpty(noFormatStats)\n ? ''\n : noFormatStats.reduce(\n (acc, stat) =>\n `${acc}

${stat.label}

${stat.value}

`,\n '',\n );\n\n const renderedFormatAndSubjectArea = `\n ${createStatMarkupForArrays('Format', modes)}\n ${createStatMarkupForArrays('Subject Area', subject_areas)}\n `;\n\n return `\n
\n ${overline ? `${joinWithCommas(hit[overline])}` : ''}\n
\n \n
\n ${simple ? renderedFormatAndSubjectArea : renderedStats}\n
\n
\n
`;\n}\n","import isEmpty from 'lodash.isempty';\nimport { createStatMarkupForArrays, joinWithCommas, hasDatePassed } from './utils';\n\nexport default function programPdp(hit, overline, simple = false) {\n const { title, modes, subject_areas, url, intro_headline, program_dates } = hit;\n\n // formats a plaintext date string to a url query string\n const getDateStamp = date => {\n const d = new Date(date);\n const day = `0${d.getDate()}`.slice(-2);\n const month = `0${d.getMonth() + 1}`.slice(-2);\n const year = d.getFullYear();\n return `${month}${day}${year}`;\n };\n\n const renderedFormatAndSubjectArea = `\n ${createStatMarkupForArrays('Format', modes)}\n ${createStatMarkupForArrays('Subject Area', subject_areas)}\n `;\n\n const programDates = !isEmpty(program_dates)\n ? Object.entries(program_dates).reduce(\n (acc, [date, { cost, format, registration_deadline, length }]) => {\n //PDP registration ends midnight of the next day, not on the day of reg deadline\n const reg_deadline_next_day = new Date(registration_deadline);\n reg_deadline_next_day.setDate(reg_deadline_next_day.getDate() + 1);\n const hasPassed = hasDatePassed(reg_deadline_next_day);\n\n if (hasPassed) {\n return acc;\n }\n\n const template = `\n
\n

${date}

\n
\n

Length

\n

${length}

\n
\n
\n

Registration Deadline

\n

${registration_deadline}

\n
\n
\n

Cost

\n

${cost}

\n
\n
\n

Format

\n

${format}

\n
\n
\n `;\n return acc + template;\n },\n '',\n )\n : '';\n\n return `\n
\n ${overline ? `${joinWithCommas(hit[overline])}` : ''}\n
\n \n
\n ${simple ? '' : '

Start Dates

'}\n ${simple ? renderedFormatAndSubjectArea : programDates}\n
\n
\n
`;\n}\n","export default function studyAbroad(hit, overline) {\n const { intro_headline } = hit;\n\n return `\n
\n ${hit[overline] ? `${hit[overline]}` : ''}\n
\n \n

\n ${hit.title}\n

\n
\n ${intro_headline ? `

${intro_headline}

` : ''}\n
\n
\n `;\n}\n","import isEmpty from 'lodash.isempty';\nimport { hasDatePassed } from './utils';\n\nexport default function event(hit, overline) {\n const { excerpt, event_date } = hit;\n const dateOptions = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n let startDate = '';\n\n //If event isn't in the past, show the start date.\n if (!isEmpty(event_date)) {\n const tempStartDate = event_date.find(function(date) {\n if (date.end && !hasDatePassed(new Date(date.end))) {\n return new Date(date.start);\n }\n });\n\n if (tempStartDate) {\n startDate = new Date(tempStartDate.start).toLocaleDateString('en-US', dateOptions);\n }\n }\n\n return `\n
\n ${hit[overline] ? `${hit[overline]}` : ''}\n ${startDate ? `${startDate}` : ''}\n
\n \n

\n ${hit.title}\n

\n
\n ${excerpt ? `

${excerpt}

` : ''}\n
\n
\n `;\n}\n","export default function stats(data) {\n const { hasManyResults, hasOneResult, nbHits } = data;\n\n if (hasManyResults) {\n return `${nbHits} results`;\n } else if (hasOneResult) {\n return '1 result';\n } else {\n return '';\n }\n}\n","export default function pagination(renderOptions) {\n const {\n isFirstPage,\n isLastPage,\n createURL,\n currentRefinement,\n nbPages,\n widgetParams,\n } = renderOptions;\n\n const container = document.querySelector(widgetParams.container);\n\n if (nbPages === 1) {\n container.innerHTML = '';\n container.classList.add('no-pagination');\n return;\n } else {\n container.classList.remove('no-pagination');\n }\n const previous = isFirstPage\n ? `Previous`\n : `Previous`;\n\n const next = isLastPage\n ? `Next`\n : `Next`;\n\n container.innerHTML = `\n \n `;\n}\n","import gsap from 'gsap';\n\ngsap.defaults({\n duration: 0.2,\n ease: 'power3.inOut',\n});\n\nexport default function searchBox(renderOptions, isFirstRender) {\n const { query, refine, clear, isSearchStalled, widgetParams } = renderOptions;\n\n const container = document.querySelector(widgetParams.container);\n const loadingContainer = document.querySelector(widgetParams.loadingContainer);\n\n if (isFirstRender) {\n const input = document.createElement('input');\n const label = document.createElement('label');\n input.classList.add('search-box__input');\n label.classList.add('visually-hidden');\n input.setAttribute('id', 'search');\n label.setAttribute('for', 'search');\n label.innerText = 'Search';\n\n const button = document.createElement('button');\n const buttonContent = document.createElement('span');\n button.appendChild(buttonContent);\n button.setAttribute('aria-label', 'Clear Search');\n button.classList.add('search-box__clear');\n buttonContent.classList.add('search-box__clear__icon');\n\n input.placeholder = widgetParams.prompt;\n input.autofocus = true;\n input.addEventListener('input', event => {\n refine(event.target.value);\n event.target.value.length < 1\n ? button.classList.remove('clear-is-visible')\n : button.classList.add('clear-is-visible');\n });\n\n button.addEventListener('click', () => {\n clear();\n button.classList.remove('clear-is-visible');\n });\n\n container.appendChild(label);\n container.appendChild(input);\n container.appendChild(button);\n }\n\n isSearchStalled\n ? () => {\n gsap.to('.search__hits', { autoAlpha: 0 });\n loadingContainer.innerHTML = `\n
\n

Loading

\n
\n \n \n \n
\n
\n `;\n }\n : () => {\n gsap.to('.search__hits', { autoAlpha: 1 });\n loadingContainer.innerHTML = '';\n };\n\n container.querySelector('input').value = query;\n}\n","import gsap from 'gsap';\nimport { ScrollToPlugin } from 'gsap/ScrollToPlugin';\n\ngsap.registerPlugin(ScrollToPlugin);\ngsap.defaults({\n duration: 0.2,\n ease: 'power3.out',\n});\n\nexport default function refinement(renderOptions, isFirstRender) {\n const { items, refine, createURL, widgetParams } = renderOptions;\n const { filtersManager, attribute } = widgetParams;\n\n const container = document.querySelector(widgetParams.container);\n const searchContainer = document.querySelector('.js-search');\n\n if (isFirstRender) {\n const refinementUl = document.createElement('ul');\n refinementUl.classList.add('search-refinement__list', 'js-filters');\n\n container.appendChild(refinementUl);\n }\n\n container.querySelector('ul').innerHTML = items\n .map(\n item => `\n
  • \n \n ${item.label} ${item.count}\n \n
  • \n `,\n )\n .join('');\n\n filtersManager.setFilters(\n attribute,\n items.filter(({ isRefined }) => isRefined),\n refine,\n );\n\n [...container.querySelectorAll('a')].forEach(element => {\n element.addEventListener('click', e => {\n e.preventDefault();\n refine(e.currentTarget.dataset.value);\n const searchTop = searchContainer.getBoundingClientRect().top;\n if (window.innerWidth >= 1200) {\n if (searchTop < 0) {\n gsap.set(window, { scrollTo: window.scrollY + searchTop });\n }\n }\n });\n });\n\n const refinementList = document.querySelector('.js-refinement-wrapper');\n\n items.length === 0\n ? refinementList.classList.add('is-empty')\n : refinementList.classList.remove('is-empty');\n\n document\n .querySelector('.search-filters__list')\n .classList.toggle('filter-list-is-visible', filtersManager.isVisible());\n}\n","export default function empty(results) {\n return `\n
    \n

    No Results Found for ${results.query}.

    \n
    \n `;\n}\n","import isEmpty from 'lodash.isempty';\n\n/**\n * Get search query parameter from current URL.\n *\n * @return string\n */\nexport function getSearchQuery() {\n const url = new URL(window.location.href);\n return url.searchParams.get('q') || '';\n}\n\n/**\n * Create an Algolia filters strings, applying given\n * attribute to every value and stringing them with\n * given operator.\n *\n * @param string attribute\n * @param string[] values\n * @param string operator\n *\n * @returns string e.g. 'type:post AND type:page'\n */\nexport function createFilters(attribute, values, operator = 'OR') {\n if (isEmpty(values)) {\n return '';\n }\n\n return `(${values.map(value => `${attribute}:${value}`).join(` ${operator} `)})`;\n}\n\n/**\n * JSON parse given value. Return null\n * if failure.\n *\n * @param string value\n *\n * @return object\n */\nexport function jsonParse(value) {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\n/**\n * Compare given months.\n *\n * @param string first\n * @param string second\n *\n * @return > 0 for correct, < 0 for reverse\n */\nexport function compareMonths(first, second) {\n const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n return months.indexOf(first.name) - months.indexOf(second.name);\n}\n/**\n * Apply constraints to given value. Return\n * min or max if value is under or over.\n *\n * @param {number} value\n * @param {number} min\n * @param {number} max\n *\n * @return {number}\n */\nexport function constrain(value, min, max) {\n const minimum = Math.max(value, min);\n return Math.min(minimum, max);\n}\n","import gsap from 'gsap';\n\nconst BREAKPOINT = 768;\n\ngsap.defaults({\n duration: 0.2,\n ease: 'power3.inOut',\n});\n\nclass Filters {\n constructor(parent) {\n this.parentSelector = parent;\n this.toggleSelector = `${parent} .js-filter-toggle`;\n this.filtersSelector = `${parent} .js-filters`;\n\n this.parent = document.querySelector(this.parentSelector);\n this.button = document.querySelector(this.toggleSelector);\n this.filtersIsOpen = false;\n\n if (this.button) {\n gsap.set(this.filtersSelector, { height: 0, y: -3, overflow: 'hidden', autoAlpha: 0 });\n this.resize();\n this.bindEvents();\n }\n }\n\n close() {\n this.filtersIsOpen = false;\n this.button.classList.remove('search-refinement-title--open');\n this.parent.classList.remove('search-refinement-attribute--open');\n\n this.tl = gsap.timeline();\n gsap.set(this.filtersSelector, { height: 'auto' });\n this.tl\n .to(this.filtersSelector, { duration: 0.3, autoAlpha: 0 })\n .to(this.filtersSelector, { height: 0, delay: 0.05 }, '<')\n .to(this.filtersSelector, { y: -3 }, '<');\n }\n\n open() {\n this.filtersIsOpen = true;\n this.button.classList.add('search-refinement-title--open');\n this.parent.classList.add('search-refinement-attribute--open');\n\n this.tl = gsap.timeline();\n gsap.set(this.filtersSelector, { height: 'auto' });\n this.tl\n .from(this.filtersSelector, { height: 0 })\n .to(this.filtersSelector, { duration: 0.3, autoAlpha: 1 }, '<')\n .to(this.filtersSelector, { y: 0, delay: 0.05 }, '<')\n .to(this.filtersSelector, { height: '100%' });\n }\n\n toggle() {\n if (this.filtersIsOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n resize() {\n if (window.innerWidth >= BREAKPOINT) {\n if (!this.filtersIsOpen) {\n this.open();\n }\n }\n }\n\n bindEvents() {\n this.button.addEventListener('click', () => this.toggle());\n window.addEventListener('resize', () => this.resize());\n }\n}\n\nexport default Filters;\n","import isEmpty from 'lodash.isempty';\n\n/**\n * Manages the refinement filters \"pills\" across\n * all refinement attributes.\n */\nclass RefinementFiltersManager {\n constructor(container) {\n this.container = document.querySelector(container);\n this.filters = {};\n\n const filtersUl = document.createElement('ul');\n filtersUl.classList.add('search-filters__list');\n\n this.container.appendChild(filtersUl);\n }\n\n /**\n * Set filter items for an attribute.\n *\n * @param string attribute filter attribute\n * @param array items current items for attribute\n * @param func refine refine function for attribute\n */\n setFilters(attribute, items, refine) {\n if (isEmpty(items)) {\n delete this.filters[attribute];\n } else {\n this.filters[attribute] = { items, refine };\n }\n\n this.update();\n }\n\n /**\n * Are any filter items toggled on?\n *\n * @return bool\n */\n isVisible() {\n return !isEmpty(this.filters);\n }\n\n /**\n * Update refinement filters container with\n * current items.\n */\n update() {\n const filterEntries = Object.entries(this.filters);\n\n const filtersHTML = filterEntries.reduce((acc, [attribute, { items }]) => {\n const itemsHTML = items\n .map(\n item => `\n
  • \n \n
  • \n `,\n )\n .join('');\n\n return acc + itemsHTML;\n }, '');\n\n this.container.querySelector('ul').innerHTML = filtersHTML;\n\n [...this.container.querySelectorAll('button')].forEach(element => {\n element.addEventListener('click', e => {\n e.preventDefault();\n const { refine } = this.filters[e.currentTarget.dataset.attribute];\n refine(e.currentTarget.dataset.value);\n });\n });\n }\n}\n\nexport default RefinementFiltersManager;\n","import algoliasearch from 'algoliasearch/lite';\n\nimport instantsearch from 'instantsearch.js';\nimport { stats, configure, hits } from 'instantsearch.js/es/widgets';\nimport {\n connectSearchBox,\n connectPagination,\n connectRefinementList,\n} from 'instantsearch.js/es/connectors';\n\nimport {\n getHitTemplate,\n getEmptyHitsTemplate,\n getSearchBoxTemplate,\n getPaginationTemplate,\n getRefinementTemplate,\n stats as getStatsTemplate,\n} from './templates';\nimport { getSearchQuery, jsonParse, compareMonths, constrain } from './utils';\n\nimport Filters from './filters';\nimport RefinementFiltersManager from './refinement-filters-manager';\n\nconst {\n ALGOLIA_APPLICATION_ID,\n ALGOLIA_SEARCH_ONLY_API_KEY,\n ALGOLIA_INDEX_NAME,\n SEARCH_SETTINGS,\n} = window.harvard.env;\n\nconst containers = {\n searchBox: '#search-searchbox',\n stats: '#search-stats',\n refinement: '#search-refinement',\n refinementFilters: '#search-refinement-filters',\n loading: '#search-loading',\n hits: '#search-hits',\n pagination: '#search-pagination',\n};\n\nclass SearchPage {\n constructor() {\n this.query = getSearchQuery();\n\n this.indexName = ALGOLIA_INDEX_NAME;\n\n const searchSettings = jsonParse(SEARCH_SETTINGS) || {};\n\n this.refinementAttributes = Object.entries(searchSettings.refinement_attributes);\n this.filters = searchSettings.filters;\n this.overline = searchSettings.overline;\n this.prompt = searchSettings.prompt || 'What can we help you find?';\n this.simple = searchSettings.simple;\n this.paginationSize = searchSettings.pagination_size\n ? constrain(searchSettings.pagination_size, 10, 80)\n : null;\n\n const searchClient = algoliasearch(ALGOLIA_APPLICATION_ID, ALGOLIA_SEARCH_ONLY_API_KEY);\n this.search = instantsearch({\n indexName: this.indexName,\n initialUiState: { [this.indexName]: { query: this.query } },\n searchClient,\n routing: true,\n });\n\n this.configure();\n this.search.start();\n\n this.refinementAttributes.forEach(\n ([_, attribute]) => new Filters(`${containers.refinement}-${attribute}`),\n );\n }\n\n configure() {\n const customPagination = connectPagination(getPaginationTemplate);\n const customSearchBox = connectSearchBox(getSearchBoxTemplate);\n const customRefinement = connectRefinementList(getRefinementTemplate);\n const refinementFiltersManager = new RefinementFiltersManager(containers.refinementFilters);\n\n const hitsPerPage = this.paginationSize ? { hitsPerPage: this.paginationSize } : {};\n\n const customRefinements = this.refinementAttributes.map(([_, attribute]) =>\n customRefinement({\n container: `${containers.refinement}-${attribute} .refinements`,\n filtersManager: refinementFiltersManager,\n attribute,\n limit: 30,\n sortBy: attribute === 'program_months' ? compareMonths : ['name:asc', 'count:desc'],\n }),\n );\n\n this.search.addWidgets([\n configure({\n distinct: 1,\n facetingAfterDistinct: true,\n filters: this.filters,\n ...hitsPerPage,\n }),\n\n customSearchBox({\n container: containers.searchBox,\n loadingContainer: containers.loading,\n prompt: this.prompt,\n }),\n\n stats({\n container: containers.stats,\n templates: {\n text: getStatsTemplate,\n },\n }),\n\n ...customRefinements,\n\n hits({\n container: containers.hits,\n templates: {\n empty: getEmptyHitsTemplate,\n item: getHitTemplate(this.overline, this.simple),\n },\n }),\n\n customPagination({\n container: containers.pagination,\n scrollTo: containers.searchBox,\n }),\n ]);\n }\n}\n\nexport default SearchPage;\n","// Hits templates\nimport post from './hits/post';\nimport page from './hits/page';\nimport studentStory from './hits/student-story';\nimport program from './hits/program';\nimport programPdp from './hits/program-pdp';\nimport studyAbroad from './hits/program-studyabroad';\nimport event from './hits/event';\nexport { default as stats } from './widgets/stats';\n\n// Custom widgets\nexport { default as getPaginationTemplate } from './widgets/pagination';\nexport { default as getSearchBoxTemplate } from './widgets/search-box';\nexport { default as getRefinementTemplate } from './widgets/refinement';\nexport { default as getEmptyHitsTemplate } from './empty';\n\n/**\n * Provide a template given hit type.\n *\n * @param string overline attribute for overline\n * @param boolean simple display simple tease?\n *\n * @returns function hit template\n */\nexport function getHitTemplate(overline, simple) {\n return hit => {\n const typeMapping = {\n post,\n page,\n program,\n ['student-story']: studentStory,\n ['pdp-program']: programPdp,\n ['studyabroad-program']: studyAbroad,\n event,\n };\n\n const templateFunction = typeMapping[hit.type] || typeMapping['page'];\n return templateFunction(hit, overline, simple);\n };\n}\n"],"sourceRoot":""}