{"version":3,"sources":["custom/next-mondays-search.js"],"names":["$searchForm","$","currentPageIndex","isLoading","isLastPage","url","getJobsResultsAsync","type","$offersList","dataType","serialize","append","text","pageIndex","data","empty","filtersData","ajax","urlPushState","success","filteredGroups","urlTemplate","window","location","protocol","totalCount","encodeURIComponent","error","log","query","filteredRegions","jobAuthor","host","newUrl","queryText","regionFilters","history","replaceState","path","replace","pushState","find","val","buildUrl","document","ready","submit","e","refreshGroupFilterText","this","closest","resetDropdownMenu","$dropdownMenu","on","refreshFilterButtonText","$btnFilter","$filterElt","$checkedItems","prop","defautText","itemIndex","checkedItemLabel","length","selectedFilterText","elt","attr","toggleClass","toString","updateRegionHiddenInput","$hiddenInput","regionCode","hiddenVal","each","click.bs.dropdown","target","is","parent","addClass","preventDefault","removeClass","scrollTop","height","refreshRegionFilterText"],"mappings":"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","file":"next-mondays-search.min.js","sourcesContent":["\r\nconst $searchForm = $('.js-jobs-search-form');\r\n\r\nvar currentPageIndex = null;\r\nvar isLoading = false;\r\nvar isLastPage = false;\r\n\r\n$(document).ready(function () {\r\n \r\n // Group Filter: Reset and Submit dropdown menu buttons management.\r\n $(document).on('click', '.js-group-filter-submit-btn', function (e) {\r\n refreshGroupFilterText();\r\n $searchForm.submit();\r\n });\r\n\r\n $(document).on('click', '.js-group-filter-reset-btn', function (e) {\r\n const $dropdownMenu = $(this).closest('.dropdown-menu');\r\n resetDropdownMenu($dropdownMenu);\r\n refreshGroupFilterText();\r\n $searchForm.submit();\r\n });\r\n\r\n // Region Filter: Reset and Submit dropdown menu buttons management.\r\n $(document).on('click', '.js-region-filter-submit-btn', function (e) {\r\n updateRegionHiddenInput();\r\n refreshRegionFilterText();\r\n $searchForm.submit();\r\n });\r\n \r\n $(document).on('click', '.js-region-filter-reset-btn', function (e) {\r\n const $dropdownMenu = $(this).closest('.dropdown-menu');\r\n resetDropdownMenu($dropdownMenu);\r\n updateRegionHiddenInput();\r\n refreshRegionFilterText();\r\n $searchForm.submit();\r\n });\r\n\r\n var refreshGroupFilterText = function () {\r\n refreshFilterButtonText($searchForm.find(\".js-group-filter\"), \"Domaines\");\r\n };\r\n\r\n var refreshRegionFilterText = function () {\r\n refreshFilterButtonText($searchForm.find(\".js-region-filter\"), \"Localisation\");\r\n };\r\n\r\n var resetDropdownMenu = function ($dropdownMenu) {\r\n $dropdownMenu.find(':checkbox').prop('checked', false);\r\n };\r\n\r\n var refreshFilterButtonText = function ($filterElt, defautText) {\r\n const $btnFilter = $filterElt.find(\".btn-filter\");\r\n let $checkedItems = $filterElt.find(\"input:checked\");\r\n if ($checkedItems.length > 0) {\r\n let selectedFilterText = \"\";\r\n $checkedItems.each(function (itemIndex, elt) {\r\n const checkedItemLabel = $filterElt.find('label[for=\"' + $(this).attr('id') + '\"]').text();\r\n if (itemIndex === 0) {\r\n selectedFilterText = checkedItemLabel;\r\n }\r\n else if (itemIndex < 1) {\r\n selectedFilterText += \", \" + checkedItemLabel;\r\n }\r\n else {\r\n selectedFilterText += \", +\" + ($checkedItems.length - 1).toString();\r\n return false;\r\n }\r\n });\r\n $btnFilter.text(selectedFilterText);\r\n $btnFilter.toggleClass(\"active\", true);\r\n }\r\n else {\r\n $btnFilter.text(defautText);\r\n $btnFilter.toggleClass(\"active\", false);\r\n }\r\n };\r\n\r\n // Region filter values are maintained into an hidden input.\r\n var updateRegionHiddenInput = function () {\r\n const $hiddenInput = $searchForm.find(\".js-hidden-input-regions\");\r\n const $checkedItems = $searchForm.find(\".js-region-filter input:checked\");\r\n let hiddenVal = \"\";\r\n if ($checkedItems.length > 0) {\r\n $checkedItems.each(function (itemIndex, elt) {\r\n const regionCode = $(this).data(\"regionCode\");\r\n if (itemIndex === 0) {\r\n hiddenVal = regionCode;\r\n }\r\n else {\r\n hiddenVal += \",\" + regionCode;\r\n }\r\n });\r\n }\r\n $hiddenInput.val(hiddenVal);\r\n };\r\n\r\n //Prevents the bootstrap dropdown menu close when clicked inside.\r\n $('.js-dropdown-dont-close').on({\r\n \"click.bs.dropdown\": function (e) {\r\n if (!$(e.target).is(\".js-dropdown-footer > button\")\r\n && !$(e.target).is(\".js-dropdown-close-btn > span\"))\r\n e.stopPropagation();\r\n }\r\n });\r\n\r\n //Prevents page scrolling when full-screen dropdown is open.\r\n $('.js-dropdown-dont-close').parent().on({\r\n \"shown.bs.dropdown\": function (e) {\r\n $(\"body\").addClass(\"mobile-fixed-no-overflow\");\r\n },\r\n \"hidden.bs.dropdown\": function (e) {\r\n $(\"body\").removeClass(\"mobile-fixed-no-overflow\");\r\n }\r\n }); \r\n\r\n \r\n\r\n $searchForm.on('submit', function(e) {\r\n e.preventDefault();\r\n currentPageIndex = null;\r\n \r\n getJobsResultsAsync(currentPageIndex);\r\n });\r\n\r\n // infinite scroll.\r\n $(window).on('scroll', function() {\r\n let height = $(document).height();\r\n let scrollTop = $(document).scrollTop();\r\n if ((scrollTop / height) * 100 > 70 && !isLoading && !isLastPage) {\r\n isLoading = true;\r\n currentPageIndex++;\r\n getJobsResultsAsync(currentPageIndex);\r\n }\r\n });\r\n\r\n refreshGroupFilterText();\r\n refreshRegionFilterText();\r\n getJobsResultsAsync(currentPageIndex);\r\n});\r\n\r\n\r\n\r\nfunction getJobsResultsAsync(currentPageIndex) {\r\n const $offersList = $('.js-offers-list');\r\n \r\n var filtersData = $searchForm.serialize();\r\n \r\n var pageIndex = null;\r\n if (currentPageIndex !== null) {\r\n pageIndex = currentPageIndex + 1;\r\n }\r\n else { // clear results if we load the firt page of result.\r\n $offersList.empty();\r\n }\r\n\r\n let data = filtersData + '&pageIndex=' + pageIndex;\r\n \r\n $.ajax({\r\n url: \"/Search/GetJobsResults\",\r\n type: 'GET',\r\n data: data,\r\n dataType: 'json',\r\n success: function (data) {\r\n $offersList.append(data.html);\r\n $('.js-jobs-count').text(data.totalCount);\r\n $('.js-jobs-count-label').text(data.totalCount > 1 ? \"offres de job\" : \"offre de job\");\r\n isLoading = false;\r\n isLastPage = data.isLastPage;\r\n },\r\n error: function (data) {\r\n console.log(\"Unexpected error occured while loading job offers.\");\r\n isLoading = false;\r\n }\r\n });\r\n //return pageIndex;\r\n\r\n urlPushState();\r\n}\r\n\r\nfunction buildUrl(query, filteredGroups, filteredRegions, jobAuthor) {\r\n let urlTemplate = window.location.protocol + \"//\" + window.location.host\r\n + '/Search?';\r\n if (query != \"\") {\r\n query = encodeURIComponent(query);\r\n urlTemplate += \"queryText={query}&\";\r\n }\r\n if (filteredGroups != \"\") {\r\n urlTemplate += \"{groups}&\";\r\n }\r\n if (filteredRegions != \"\") {\r\n urlTemplate += \"regions={regions}&\";\r\n }\r\n if (jobAuthor != \"\") {\r\n urlTemplate += \"jobAuthor={jobAuthor}&\";\r\n }\r\n // + \"?queryText={query}&{filters}\";\r\n // + \"?queryText={query}&location={where}&{filters}\";\r\n let newUrl = urlTemplate.replace('{query}', query)\r\n .replace('{groups}', filteredGroups)\r\n .replace('{regions}', filteredRegions)\r\n .replace('{jobAuthor}', jobAuthor);\r\n\r\n return newUrl;\r\n};\r\n\r\nfunction urlPushState() {\r\n if (history.pushState) {\r\n const queryText = $searchForm.find('.js-jobs-search-query-input').val();\r\n const regionFilters = $searchForm.find('.js-hidden-input-regions').val();\r\n const groupFilters = $searchForm.find('.js-group-filter input').serialize();\r\n const jobAuthor = $searchForm.find('.js-hidden-input-job-author').val();\r\n\r\n\r\n const newUrl = buildUrl(queryText, groupFilters, regionFilters, jobAuthor);\r\n window.history.replaceState({ path: newUrl }, '', newUrl);\r\n }\r\n};\r\n"]}