{"version":3,"sources":["webpack:///./pages/explore/projects/index.js","webpack:///./filterable_list.js","webpack:///./projects_list.js"],"names":["document","addEventListener","_projects_list__WEBPACK_IMPORTED_MODULE_0__","FilterableList","form","filter","holder","filterInputField","arguments","length","undefined","_classCallCheck","this","filterForm","listFilterElement","listHolderElement","isBusy","getAttribute","jquery__WEBPACK_IMPORTED_MODULE_0___default","serialize","getFilterEndpoint","debounceFilter","underscore__WEBPACK_IMPORTED_MODULE_1___default","a","debounce","onFilterInput","bind","unbindEvents","bindEvents","queryData","filterGroupsParam","find","val","filterResults","setDefaultFilterOption","removeEventListener","params","_this","fadeTo","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_2__","get","then","res","onFilterSuccess","onFilterComplete","catch","response","data","html","innerHTML","currentPath","getPagePath","window","history","replaceState","page","title","ProjectsList","querySelector","_filterable_list__WEBPACK_IMPORTED_MODULE_0__","initSearch"],"mappings":"6GAEAA,SAASC,iBAAiB,mBAAoB,kBAAM,IAAIC,EAAA,wXCOnCC,aACnB,SAAAA,EAAYC,EAAMC,EAAQC,GAA4C,IAApCC,EAAoCC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAjB,6GAAiBG,CAAAC,KAAAT,GACpES,KAAKC,WAAaT,EAClBQ,KAAKE,kBAAoBT,EACzBO,KAAKG,kBAAoBT,EACzBM,KAAKL,iBAAmBA,EACxBK,KAAKI,QAAS,wDAId,OAAUJ,KAAKC,WAAWI,aAAa,UAAvC,IAAoDC,IAAEN,KAAKC,YAAYM,kDAIvE,OAAOP,KAAKQ,yDAKZR,KAAKS,eAAiBC,EAAAC,EAAEC,SAASZ,KAAKa,cAAcC,KAAKd,MAAO,KAEhEA,KAAKe,eACLf,KAAKgB,qDAIL,IACMC,KACAC,EAFQZ,IAAEN,KAAKC,YAEWkB,KAAN,UAAqBnB,KAAKL,iBAA1B,MAAgDyB,MAEtEF,IACFD,EAAUjB,KAAKL,kBAAoBuB,GAGrClB,KAAKqB,cAAcJ,GAEfjB,KAAKsB,wBACPtB,KAAKsB,8DAKPtB,KAAKE,kBAAkBb,iBAAiB,QAASW,KAAKS,uDAItDT,KAAKE,kBAAkBqB,oBAAoB,QAASvB,KAAKS,sDAG7Ce,GAAQ,IAAAC,EAAAzB,KACpB,OAAIA,KAAKI,SAITE,IAAEN,KAAKG,mBAAmBuB,OAAO,IAAK,IAEtC1B,KAAKI,QAAS,EAEPuB,EAAA,EAAMC,IAAI5B,KAAKQ,qBACpBgB,WACCK,KAAK,SAACC,GACPL,EAAKM,gBAAgBD,EAAKN,GAC1BC,EAAKO,qBACJC,MAAM,kBAAMR,EAAKO,8DAGNE,EAAUjB,GACpBiB,EAASC,KAAKC,OAChBpC,KAAKG,kBAAkBkC,UAAYH,EAASC,KAAKC,MAInD,IAAME,EAActC,KAAKuC,YAAYtB,GAErC,OAAOuB,OAAOC,QAAQC,cACpBC,KAAML,GACLlD,SAASwD,MAAON,8CAInBtC,KAAKI,QAAS,EACdE,IAAEN,KAAKG,mBAAmBuB,OAAO,IAAK,qECnFxC,SAAAmB,iGAAc9C,CAAAC,KAAA6C,GACZ,IAAMrD,EAAOJ,SAAS0D,cAAc,4BAC9BrD,EAASL,SAAS0D,cAAc,4BAChCpD,EAASN,SAAS0D,cAAc,4BAElCtD,GAAQC,GAAUC,GACP,IAAIqD,EAAA,EAAevD,EAAMC,EAAQC,GACzCsD","file":"pages.explore.projects.22c39428.chunk.js","sourcesContent":["import ProjectsList from '~/projects_list';\n\ndocument.addEventListener('DOMContentLoaded', () => new ProjectsList());\n","import $ from 'jquery';\nimport _ from 'underscore';\nimport axios from './lib/utils/axios_utils';\n\n/**\n * Makes search request for content when user types a value in the search input.\n * Updates the html content of the page with the received one.\n */\n\nexport default class FilterableList {\n constructor(form, filter, holder, filterInputField = 'filter_groups') {\n this.filterForm = form;\n this.listFilterElement = filter;\n this.listHolderElement = holder;\n this.filterInputField = filterInputField;\n this.isBusy = false;\n }\n\n getFilterEndpoint() {\n return `${this.filterForm.getAttribute('action')}?${$(this.filterForm).serialize()}`;\n }\n\n getPagePath() {\n return this.getFilterEndpoint();\n }\n\n initSearch() {\n // Wrap to prevent passing event arguments to .filterResults;\n this.debounceFilter = _.debounce(this.onFilterInput.bind(this), 500);\n\n this.unbindEvents();\n this.bindEvents();\n }\n\n onFilterInput() {\n const $form = $(this.filterForm);\n const queryData = {};\n const filterGroupsParam = $form.find(`[name=\"${this.filterInputField}\"]`).val();\n\n if (filterGroupsParam) {\n queryData[this.filterInputField] = filterGroupsParam;\n }\n\n this.filterResults(queryData);\n\n if (this.setDefaultFilterOption) {\n this.setDefaultFilterOption();\n }\n }\n\n bindEvents() {\n this.listFilterElement.addEventListener('input', this.debounceFilter);\n }\n\n unbindEvents() {\n this.listFilterElement.removeEventListener('input', this.debounceFilter);\n }\n\n filterResults(params) {\n if (this.isBusy) {\n return false;\n }\n\n $(this.listHolderElement).fadeTo(250, 0.5);\n\n this.isBusy = true;\n\n return axios.get(this.getFilterEndpoint(), {\n params,\n }).then((res) => {\n this.onFilterSuccess(res, params);\n this.onFilterComplete();\n }).catch(() => this.onFilterComplete());\n }\n\n onFilterSuccess(response, queryData) {\n if (response.data.html) {\n this.listHolderElement.innerHTML = response.data.html;\n }\n\n // Change url so if user reload a page - search results are saved\n const currentPath = this.getPagePath(queryData);\n\n return window.history.replaceState({\n page: currentPath,\n }, document.title, currentPath);\n }\n\n onFilterComplete() {\n this.isBusy = false;\n $(this.listHolderElement).fadeTo(250, 1);\n }\n}\n","import FilterableList from './filterable_list';\n\n/**\n * Makes search request for projects when user types a value in the search input.\n * Updates the html content of the page with the received one.\n */\nexport default class ProjectsList {\n constructor() {\n const form = document.querySelector('form#project-filter-form');\n const filter = document.querySelector('.js-projects-list-filter');\n const holder = document.querySelector('.js-projects-list-holder');\n\n if (form && filter && holder) {\n const list = new FilterableList(form, filter, holder);\n list.initSearch();\n }\n }\n}\n"],"sourceRoot":""}