{"version":3,"file":"search.js","names":["angular","module","controller","$scope","$http","$timeout","$filter","ctrl","this","_q","tios","util","parseQuery","_searchTO","_sF","getFromStorage","_sSort","_sC","PROVIDER","GeoSearch","OpenStreetMapProvider","params","countrycodes","_priceArr","fillArray","map","item","label","int","_rentArr","_hasFilter","prop","preFilters","_clickOffMap","event","target","closest","$applyAsync","ux","showMap","document","removeEventListener","_setRadius","mapRadius","Math","round","Radius","_clickOff","showMustHaves","getCheckCount","Object","values","preChecks","filter","length","filters","Lat","parseFloat","Long","Label","BedroomsMin","parseInt","PriceMin","PriceMax","AddedToSite","PropertyType","IncludeSSTC","Lettings","TerritoryID","Prestige","Parking","Situation","Special","Garage","sort","Sort","propListMax","Code","checks","garden","annexe","garage","conservatory","land","tennis","swimming","outbuilding","offstreet","equestrian","residents","checkCanClear","key","searchTab","fixSearch","expandSearch","canClear","typeCount","orderBy","reverse","territory","fromBack","removeFromStorage","mustHave","particular","enums","PropertyTypeValues","sortList","model","radii","radius","pricesLow","copy","pricesHigh","added","isMobile","areaSearch","clearGeoArea","searching","string","cancel","search","query","then","response","areaResults","r","raw","class","openMap","addEventListener","selectGeoArea","y","x","setGeoArea","selectFilter","Name","value","selectSort","ob","rv","storeFilters","code","saveToStorage","updateMustHaves","type","check","flagValue","find","getMustHaveLabel","reset","url","urls","Api","method","data","rd","results","Items","Territories","toLowerCase","Location","scrollingElement","scrollTop","getElementById","scrollIntoView","scrollPos","showMore","window","scrollY","scrollTo","viewPropertyURL","highfields","Microsites_Highfields_Index","PropertyDetail","c","viewProperty","$on"],"sources":["jscript-pages/search.js"],"mappings":"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","sourcesContent":["(function () {\r\n angular.module('agweb').controller('SearchController', ['$scope', '$http', '$timeout', '$filter',\r\n function ($scope, $http, $timeout, $filter) {\r\n var ctrl = this;\r\n\r\n var _q = tios.util.parseQuery(null, true);\r\n\r\n var _searchTO = null;\r\n\r\n var _sF = tios.util.getFromStorage('filters', true);\r\n var _sSort = tios.util.getFromStorage('sort', true);\r\n var _sC = tios.util.getFromStorage('checks', true);\r\n\r\n const PROVIDER = new GeoSearch.OpenStreetMapProvider({\r\n params: {\r\n countrycodes: 'gb'\r\n }\r\n });\r\n\r\n var _priceArr = [\r\n ...tios.util.fillArray(15, 50000, 25000),\r\n ...tios.util.fillArray(12, 450000, 50000),\r\n ...tios.util.fillArray(4, 1250000, 250000),\r\n ...tios.util.fillArray(3, 3000000, 1000000)\r\n ].map(function (item) {\r\n return { label: $filter('currency')(item, '£', 0), int: item };\r\n });\r\n\r\n var _rentArr = [\r\n ...tios.util.fillArray(10, 400, 50),\r\n ...tios.util.fillArray(11, 900, 100),\r\n ...tios.util.fillArray(7, 2000, 500)\r\n ].map(function (item) {\r\n return { label: $filter('currency')(item, '£', 0), int: item };\r\n });\r\n\r\n //checks if storage, if there is use set the filters to the stored values otherwise set to default.\r\n ctrl.filters = {};\r\n ctrl.preFilters = {\r\n Lat: !!_sF ? _sF.Lat : (!!_q.Lat ? parseFloat(_q.Lat) : null),\r\n Long: !!_sF ? _sF.Long : (!!_q.Long ? parseFloat(_q.Long) : null),\r\n Label: !!_sF ? _sF.Label : (!!_q.Label ? _q.Label : ''),\r\n Radius: !!_sF ? _sF.Radius : (!!_q.Radius ? parseFloat(_q.Radius) : 2),\r\n BedroomsMin: !!_sF ? _sF.BedroomsMin : (!!_q.BedroomsMin ? parseInt(_q.BedroomsMin) : null),\r\n PriceMin: !!_sF ? _sF.PriceMin : (!!_q.PriceMin ? parseInt(_q.PriceMin) : null),\r\n PriceMax: !!_sF ? _sF.PriceMax : (!!_q.PriceMax ? parseInt(_q.PriceMax) : null),\r\n AddedToSite: !!_sF ? _sF.AddedToSite : (!!_q.AddedToSite ? parseFloat(_q.AddedToSite) : 0),\r\n PropertyType: !!_sF ? _sF.PropertyType : (!!_q.PropertyType ? _q.PropertyType : null),\r\n IncludeSSTC: !!_sF ? _sF.IncludeSSTC : false,\r\n Lettings: !!_sF ? _sF.Lettings : !!_q.Lettings,\r\n TerritoryID: !!_sF ? _sF.TerritoryID : (!!_q.TerritoryID ? _q.TerritoryID : null),\r\n Prestige: !!_q.Prestige,\r\n Parking: !!_sF ? _sF.Parking : null,\r\n Situation: !!_sF ? _sF.Situation : null,\r\n Special: !!_sF ? _sF.Special : null,\r\n Garage: !!_sF ? _sF.Garage : false\r\n };\r\n\r\n ctrl.sort = {\r\n Sort: !!_sSort ? _sSort.Sort : 'highLow',\r\n propListMax: !!_sSort ? _sSort.propListMax : 10,\r\n Code: !!_sSort ? _sSort.Code : null\r\n };\r\n\r\n ctrl.checks = {};\r\n ctrl.preChecks = {\r\n garden: !!_sC ? _sC.garden : false,\r\n annexe: !!_sC ? _sC.annexe : false,\r\n garage: !!_sC ? _sC.garage : false,\r\n conservatory: !!_sC ? _sC.conservatory : false,\r\n land: !!_sC ? _sC.land : false,\r\n tennis: !!_sC ? _sC.tennis : false,\r\n swimming: !!_sC ? _sC.swimming : false,\r\n outbuilding: !!_sC ? _sC.outbuilding : false,\r\n offstreet: !!_sC ? _sC.offstreet : false,\r\n equestrian: !!_sC ? _sC.equestrian : false,\r\n residents: !!_sC ? _sC.residents : false\r\n };\r\n\r\n ctrl.checkCanClear = function () {\r\n for (var key in ctrl.preFilters) {\r\n if (key !== 'Radius') {\r\n if (ctrl.preFilters[key]) {\r\n return true; \r\n }\r\n }\r\n }\r\n };\r\n\r\n ctrl.ux = {\r\n searchTab: 'location',\r\n fixSearch: false,\r\n expandSearch: false,\r\n canClear: ctrl.checkCanClear(),\r\n // Map\r\n showMap: false,\r\n mapRadius: 0,\r\n //Types\r\n typeCount: 'All',\r\n showMustHaves: false,\r\n // Sort by\r\n sort: 'highLow',\r\n orderBy: 'p',\r\n reverse: true,\r\n territory: '',\r\n // scroll pos\r\n fromBack = false\r\n };\r\n\r\n // check for data in storage produced by clicking \"View\";\r\n if (!!_sF && !!_sSort) {\r\n ctrl.ux.fromBack = true; // tells the search page that it has come back from a property details page. \r\n tios.util.removeFromStorage('filters', true); // storage is emptied upon as storage is stored in sF var so actual storage doesn't need maintaining. \r\n tios.util.removeFromStorage('sort', true); \r\n tios.util.removeFromStorage('checks', true); \r\n\r\n if (!!_q.Lettings !== !!_sF.Lettings) _sF = null;\r\n }\r\n\r\n ctrl.mustHave = [\r\n { label: 'parking' },\r\n { label: 'garden' },\r\n { label: 'ensuite' },\r\n { label: 'garage' },\r\n { label: 'driveway' }\r\n ];\r\n\r\n ctrl.particular = Object.values(enums.PropertyTypeValues);\r\n\r\n ctrl.sortList = [\r\n { model: 'highLow', label: 'Price high to low' },\r\n { model: 'lowHigh', label: 'Price low to high' },\r\n { model: 'recent', label: 'Most recent first' }\r\n ];\r\n\r\n ctrl.radii = [\r\n { label: '+1/2 mile', radius: 0.5 },\r\n { label: '+1 mile', radius: 1 },\r\n { label: '+2 miles', radius: 2 },\r\n { label: '+5 miles', radius: 5 },\r\n { label: '+10 miles', radius: 10 },\r\n { label: '+15 miles', radius: 15 },\r\n { label: '+20 miles', radius: 20 }\r\n ];\r\n\r\n ctrl.pricesLow = !!ctrl.preFilters.Lettings ? angular.copy(_rentArr) : angular.copy(_priceArr);\r\n ctrl.pricesHigh = !!ctrl.preFilters.Lettings ? angular.copy(_rentArr) : angular.copy(_priceArr);\r\n\r\n ctrl.added = [\r\n { label: 'Anytime', int: 0 },\r\n { label: 'Last 24 hours', int: 1 },\r\n { label: 'Last week', int: 7 },\r\n { label: 'Last Month', int: 30 }\r\n ];\r\n\r\n ctrl.isMobile = tios.util.isMobile();\r\n\r\n //-\r\n ctrl.areaSearch = function (event) {\r\n ctrl.clearGeoArea();\r\n ctrl.ux.searching = !!event.string;\r\n if (!!_searchTO) $timeout.cancel(_searchTO);\r\n _searchTO = $timeout(function () {\r\n PROVIDER.search({ query: event.string })\r\n .then(function (response) {\r\n $scope.$applyAsync(() =>\r\n ctrl.areaResults = response.filter(r => r.raw.class === 'place' ||\r\n r.raw.class === 'boundary'));\r\n });\r\n }, 300);\r\n };\r\n\r\n function _hasFilter() {\r\n for (prop in ctrl.preFilters) {\r\n if (prop !== 'Radius' && !!ctrl.preFilters[prop]) return true;\r\n }\r\n return false;\r\n }\r\n\r\n function _clickOffMap(event) {\r\n if (!event.target.closest(\".map-trigger\") && !event.target.closest(\".results\")) {\r\n $scope.$applyAsync(function () {\r\n ctrl.ux.showMap = false;\r\n document.removeEventListener('click', _clickOffMap);\r\n });\r\n }\r\n }\r\n\r\n ctrl.openMap = function () {\r\n ctrl.ux.showMap = true;\r\n\r\n document.addEventListener('click', _clickOffMap);\r\n };\r\n\r\n ctrl.selectGeoArea = function (event) {\r\n // Update the selection for the map view\r\n ctrl.preFilters.Lat = event.item.y;\r\n ctrl.preFilters.Long = event.item.x;\r\n ctrl.preFilters.Label = event.item.label;\r\n ctrl.preFilters.Radius = 2;\r\n\r\n ctrl.ux.searching = false;\r\n ctrl.ux.showMap = true;\r\n ctrl.ux.setGeoArea = true;\r\n\r\n ctrl.ux.canClear = true;\r\n\r\n document.addEventListener('click', _clickOffMap);\r\n };\r\n\r\n ctrl.clearGeoArea = function () {\r\n ctrl.preFilters.Lat = null;\r\n ctrl.preFilters.Long = null;\r\n ctrl.preFilters.Label = '';\r\n ctrl.preFilters.Radius = 2;\r\n\r\n ctrl.ux.showMap = false;\r\n ctrl.ux.setGeoArea = false;\r\n\r\n ctrl.ux.canClear = _hasFilter();\r\n\r\n document.removeEventListener('click', _clickOffMap);\r\n };\r\n\r\n function _setRadius() {\r\n $scope.$applyAsync(() => ctrl.ux.mapRadius = Math.round(ctrl.preFilters.Radius * 1609.344));\r\n }\r\n\r\n ctrl.selectFilter = function (event, filter) {\r\n switch (filter) {\r\n case 'priceMin':\r\n ctrl.preFilters.PriceMin = event.item.int;\r\n if (event.item.int > ctrl.preFilters.PriceMax) ctrl.preFilters.PriceMax = null;\r\n break;\r\n case 'priceMax':\r\n ctrl.preFilters.PriceMax = event.item.int;\r\n if (event.item.int < ctrl.preFilters.PriceMin) ctrl.preFilters.PriceMin = null;\r\n break;\r\n case 'added':\r\n ctrl.preFilters.AddedToSite = event.item.int;\r\n break;\r\n case 'radius':\r\n ctrl.preFilters.Radius = event.item.radius;\r\n _setRadius();\r\n break;\r\n case 'propertyType':\r\n ctrl.preFilters.PropertyType = event.item.Name;\r\n break;\r\n case 'sstc':\r\n ctrl.preFilters.IncludeSSTC = event.value;\r\n break;\r\n }\r\n ctrl.ux.canClear = (!filter || filter !== 'beds' || !!ctrl.preFilters.BedroomsMin);\r\n };\r\n\r\n ctrl.selectSort = function (event) {\r\n var ob = null;\r\n var rv = false;\r\n\r\n if (!event) {\r\n ctrl.ux.sort = ctrl.sort.Sort;\r\n } else {\r\n ctrl.sort.Sort = event.item.model;\r\n ctrl.ux.sort = event.item.model;\r\n }\r\n\r\n switch (ctrl.ux.sort) {\r\n case 'highLow':\r\n // Set the rv bool then drop through to the next case\r\n // without breaking as the ob is the same.\r\n rv = true;\r\n case 'lowHigh':\r\n ob = 'p';\r\n break;\r\n case 'recent':\r\n ob = 'd';\r\n rv = true;\r\n break;\r\n }\r\n $scope.$applyAsync(function () {\r\n ctrl.ux.orderBy = ob;\r\n ctrl.ux.reverse = rv;\r\n });\r\n };\r\n\r\n ctrl.storeFilters = function (code) {\r\n tios.util.saveToStorage('filters', ctrl.filters, true);\r\n tios.util.saveToStorage('sort', ctrl.sort, true);\r\n tios.util.saveToStorage('checks', ctrl.checks, true);\r\n };\r\n\r\n function _clickOff(event) {\r\n if (!event.target.closest(\".must-haves-trigger\")) {\r\n $scope.$applyAsync(function () {\r\n ctrl.ux.showMustHaves = false;\r\n document.removeEventListener('click', _clickOff);\r\n });\r\n }\r\n }\r\n\r\n ctrl.showMustHaves = function () {\r\n ctrl.ux.showMustHaves = !ctrl.ux.showMustHaves;\r\n if (ctrl.ux.showMustHaves) {\r\n document.addEventListener('click', _clickOff);\r\n } else {\r\n document.removeEventListener('click', _clickOff);\r\n }\r\n };\r\n\r\n function getCheckCount() {\r\n return Object.values(ctrl.preChecks).filter(item => !!item).length;\r\n }\r\n\r\n ctrl.updateMustHaves = function (event, type, check, flagValue) {\r\n switch (type) {\r\n case 'Garage':\r\n ctrl.preFilters.Garage = event.value;\r\n ctrl.preChecks.garage = event.value;\r\n break;\r\n case 'Situation':\r\n ctrl.preFilters.Situation ^= flagValue;\r\n break;\r\n case 'Special': Object.values(ctrl.preFilters).find(item => !!item)\r\n ctrl.preFilters.Special ^= flagValue;\r\n break;\r\n case 'Parking':\r\n ctrl.preFilters.Parking ^= flagValue;\r\n break;\r\n }\r\n ctrl.preChecks[check] = event.value;\r\n ctrl.ux.canClear = _hasFilter() || getCheckCount();\r\n };\r\n\r\n ctrl.getMustHaveLabel = function () {\r\n var checks = getCheckCount();\r\n return 'Must have' + (!!checks ? ' (' + checks + ')' : '');\r\n };\r\n\r\n ctrl.search = function (event, reset) {\r\n if (!!reset) {\r\n ctrl.preFilters = {\r\n Lat: null,\r\n Long: null,\r\n Label: '',\r\n Radius: 2,\r\n BedroomsMin: null,\r\n PriceMin: null,\r\n PriceMax: null,\r\n AddedToSite: 0,\r\n PropertyType: null,\r\n IncludeSSTC: false,\r\n Lettings: !!_q.Lettings,\r\n TerritoryID: !!_q.TerritoryID ? _q.TerritoryID : null,\r\n Prestige: !!_q.Prestige,\r\n Parking: null,\r\n Situation: null,\r\n Special: null,\r\n Garage: false\r\n };\r\n ctrl.sort = {\r\n Sort: 'highLow',\r\n propListMax: 10,\r\n Code: null\r\n };\r\n ctrl.preChecks = {\r\n garden: false,\r\n annexe: false,\r\n garage: false,\r\n conservatory: false,\r\n land: false,\r\n tennis: false,\r\n swimming: false,\r\n outbuilding: false,\r\n offstreet: false,\r\n equestrian: false,\r\n residents: false\r\n };\r\n ctrl.ux.canClear = false;\r\n }\r\n ctrl.filters = angular.copy(ctrl.preFilters);\r\n ctrl.checks = angular.copy(ctrl.preChecks);\r\n\r\n ctrl.preFilters.Situation = ctrl.preFilters.Situation || null;\r\n ctrl.preFilters.Special = ctrl.preFilters.Special || null;\r\n ctrl.preFilters.Parking = ctrl.preFilters.Parking || null;\r\n\r\n ctrl.ux.showMap = false;\r\n ctrl.ux.expandSearch = false;\r\n ctrl.ux.setGeoArea = false;\r\n\r\n $http({\r\n url: urls.Api + 'Property/Search',\r\n method: 'POST',\r\n data: ctrl.preFilters\r\n }).then(function success(response) {\r\n var rd = response && response.data;\r\n if (!!rd) {\r\n\r\n ctrl.results = rd.Items;\r\n\r\n ctrl.ux.territory =\r\n ctrl.preFilters.TerritoryID ?\r\n rd.Territories.find(item => item.TerritoryID === ctrl.preFilters.TerritoryID.toLowerCase()).Location :\r\n '';\r\n\r\n _setRadius();\r\n\r\n if (!event) { ctrl.selectSort() } // event is click on \"FindProperties\" \r\n $timeout(function () {\r\n if (event) {\r\n ctrl.sort.propListMax = 10; // if findproperties button clicked reset list to 10 and scroll top \r\n document.scrollingElement.scrollTop = 0;\r\n } else if (ctrl.ux.fromBack) { // if findproperties is not clicked and you have come back from property details find the clicked and scroll to it \r\n document.getElementById('listing-' + ctrl.sort.Code).scrollIntoView(); //each property in list has id = to property code. \r\n }\r\n }, 500);\r\n }\r\n });\r\n };\r\n\r\n ctrl.scrollPos = 0;\r\n ctrl.showMore = function () {\r\n\r\n ctrl.scrollPos = window.scrollY;\r\n\r\n ctrl.sort.propListMax = ctrl.sort.propListMax + 10;\r\n\r\n $timeout(function () {\r\n window.scrollTo(0, ctrl.scrollPos);\r\n });\r\n\r\n };\r\n\r\n ctrl.viewPropertyURL = function (item, highfields) {\r\n if (highfields) {\r\n return urls.Microsites_Highfields_Index;\r\n } else {\r\n return urls.PropertyDetail + item.c + (ctrl.preFilters.Lettings ? '?Lettings=true' : (ctrl.preFilters.Prestige ? '?Prestige=true' : ''));\r\n }\r\n };\r\n\r\n ctrl.viewProperty = function (item) {\r\n ctrl.sort.Code = item.c;\r\n ctrl.storeFilters(); // stores filters in session storage\r\n return false;\r\n };\r\n\r\n $scope.$on('$destroy', function () {\r\n document.removeEventListener('click', _clickOff);\r\n document.removeEventListener('click', _clickOffMap);\r\n\r\n });\r\n\r\n //-i\r\n\r\n ctrl.search();\r\n }\r\n ]);\r\n})();"]}