{"version":3,"file":"search.js","mappings":"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","sources":["webpack://cornell-engineering/./static/js/components/algolia/program-finder.js"],"sourcesContent":["import instantsearch from 'instantsearch.js';\nimport {\n configure,\n hits,\n clearRefinements,\n refinementList,\n searchBox,\n} from 'instantsearch.js/es/widgets';\nimport searchClient from './search-client';\nimport { createDropdown } from './vendor/dropdown';\n\n/**\n * ProgramFinder\n *\n * Set up the Algolia filtering for degree programs\n */\nclass ProgramFinder {\n constructor(rootEl) {\n this.rootEl = rootEl;\n if (!this.rootEl) {\n throw new Error('Root program finder element not found.');\n }\n\n const indexName = this.rootEl.dataset['algoliaIndex'];\n\n this.search = instantsearch({\n indexName,\n searchClient: searchClient,\n routing: true,\n });\n\n this.init();\n this.search.start();\n }\n\n init() {\n this.configureSearchParams();\n this.configureSearchBox();\n this.configureClearRefinements();\n this.configureDegreeTypeRefinementDropdown();\n this.configureDepartmentRefinementDropdown();\n this.configureResultsList();\n this.addWidgets();\n }\n\n addWidgets() {\n const widgets = [\n this.searchParams,\n this.searchBox,\n this.clearRefinements,\n this.degreeTypeRefinementDropdown,\n this.departmentRefinementDropdown,\n this.resultsList,\n ];\n\n this.search.addWidgets(widgets);\n }\n\n configureSearchParams() {\n this.searchParams = configure({\n distinct: true,\n // Force faceting to be applied after de-duplication (via the Distinct setting)\n facetingAfterDistinct: true,\n });\n }\n\n configureSearchBox() {\n this.searchBox = searchBox({\n container: '.js-program-finder-search-input',\n placeholder: 'Search by name',\n showSubmit: false,\n });\n }\n\n configureClearRefinements() {\n this.clearRefinements = clearRefinements({\n container: '.js-program-finder-clear',\n templates: {\n resetLabel(_options, { html }) {\n return html`Reset filters`;\n },\n },\n });\n }\n\n configureDegreeTypeRefinementDropdown() {\n if (!document.querySelector('.js-program-finder-degree-types-input')) {\n return;\n }\n\n const degreeTypeDropdown = createDropdown(refinementList, {\n cssClasses: { root: 'ais-Dropdown-degree-types' },\n buttonText: 'All Degree Types',\n });\n\n this.degreeTypeRefinementDropdown = degreeTypeDropdown({\n container: '.js-program-finder-degree-types-input',\n attribute: 'degrees.degree_type.abbrev',\n });\n }\n\n configureDepartmentRefinementDropdown() {\n if (!document.querySelector('.js-program-finder-departments-input')) {\n return;\n }\n\n const departmentDropdown = createDropdown(refinementList, {\n cssClasses: { root: 'ais-Dropdown-departments' },\n buttonText: 'All Departments',\n });\n\n this.departmentRefinementDropdown = departmentDropdown({\n container: '.js-program-finder-departments-input',\n attribute: 'departments.name',\n limit: 10,\n showMore: true,\n showMoreLimit: 100,\n sortBy: ['name:asc'],\n });\n }\n\n configureResultsList() {\n this.resultsList = hits({\n container: '.js-program-finder-hits',\n cssClasses: {\n list: 'program-table__list',\n item: 'program-table__program',\n },\n templates: {\n /* eslint-disable */\n item: (hit, { html }) => {\n const { title, description, degrees } = hit;\n return html`\n <div class=\"program-table__program-inner program-hit\">\n <div class=\"program-table__program-titles\">\n <button\n onClick=\"${e => this.handleProgramClick(e)}\"\n class=\"program-table__program-name\">\n <span class=\"program-table__program-name-text\">${title}</span>\n </button>\n <span class=\"program-table__program-name--mobile program-table__program-name-text\"\n >${title}</span\n >\n <button\n onClick=\"${e => this.closeDescription(e)}\"\n class=\"program-table__program-close-btn\">\n Close\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 14 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.00015 8.00015L2.00015 13.0002L0.585938 11.5859L5.58594 6.58594L1.00015 2.00015L2.41436 0.585938L7.00015 5.17172L11.5859 0.585938L13.0001 2.00015L8.41436 6.58594L13.4144 11.5859L12.0001 13.0002L7.00015 8.00015Z\"\n fill=\"#54565A\" />\n </svg>\n </button>\n <p class=\"program-table__program-description\">${description}</p>\n </div>\n <ul class=\"program-table__program-degrees\">\n ${degrees.map(degree => {\n // CERTIFICATES: Remove the if statement below to display certificates\n if (!degree.degree_type || degree.degree_type['abbrev'] === 'Certificate') {\n return null;\n }\n\n return html`\n <li\n class=\"program-table__program-degree degree--${degree.degree_type['abbrev']\n .toLowerCase()\n .replaceAll('.', '')\n .split(' ')\n .join('-')}\">\n <a\n class=\"program-table__program-degree-link\"\n href=\"${degree.link}\"\n aria-label=\"${degree.degree_type['name']} in ${title}\">\n <span class=\"program-table__program-degree-link-text\"\n >${degree.degree_type['abbrev']}</span\n >\n <span class=\"program-table__program-degree-link-icon\">\n <svg class=\"arrow-icon\" aria-hidden=\"true\">\n <use xlink:href=\"#arrow\"></use>\n </svg>\n </span>\n </a>\n </li>\n `;\n })}\n </ul>\n </div>\n `;\n },\n /* eslint-enable */\n },\n });\n }\n\n openProgram(event) {\n const program = event.target.closest('.program-table__program-inner');\n program.classList.add('expanded');\n }\n\n closeDescription(event) {\n const program = event.target.closest('.program-table__program-inner');\n program.classList.remove('expanded');\n }\n\n handleProgramClick(event) {\n const program = event.target.closest('.program-table__program-inner');\n\n if (program.classList.contains('expanded')) {\n this.closeDescription(event);\n } else {\n this.openProgram(event);\n }\n }\n}\n\nexport default ProgramFinder;\n"],"names":["ProgramFinder","rootEl","_classCallCheck","this","Error","indexName","dataset","search","instantsearch","searchClient","routing","init","start","key","value","configureSearchParams","configureSearchBox","configureClearRefinements","configureDegreeTypeRefinementDropdown","configureDepartmentRefinementDropdown","configureResultsList","addWidgets","widgets","searchParams","searchBox","clearRefinements","degreeTypeRefinementDropdown","departmentRefinementDropdown","resultsList","configure","distinct","facetingAfterDistinct","container","placeholder","showSubmit","templates","resetLabel","_options","_ref","html","_templateObject","_taggedTemplateLiteral","document","querySelector","degreeTypeDropdown","createDropdown","refinementList","cssClasses","root","buttonText","attribute","departmentDropdown","limit","showMore","showMoreLimit","sortBy","_this","hits","list","item","hit","_ref2","title","description","degrees","_templateObject2","e","handleProgramClick","closeDescription","map","degree","degree_type","_templateObject3","toLowerCase","replaceAll","split","join","link","event","target","closest","classList","add","remove","contains","openProgram"],"sourceRoot":""}