@maplander/components 0.21.41 → 0.21.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,6 @@
2
2
  * @fileoverview added by tsickle
3
3
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
- import * as tslib_1 from "tslib";
6
5
  import { Injectable } from '@angular/core';
7
6
  import { Address, Currency, NewPropertyLite } from '@maplander/types';
8
7
  import { ConstantsComponents } from '../../constantsComponents';
@@ -286,88 +285,6 @@ var MarkersService = /** @class */ (function () {
286
285
  response.markers = list;
287
286
  return response;
288
287
  };
289
- /**
290
- * @param {?} list
291
- * @return {?}
292
- */
293
- MarkersService.prototype.buildNewSpider = /**
294
- * @param {?} list
295
- * @return {?}
296
- */
297
- function (list) {
298
- var e_1, _a;
299
- /** @type {?} */
300
- var response = { markers: [], polyLines: [] };
301
- /** @type {?} */
302
- var newList = [];
303
- try {
304
- for (var list_1 = tslib_1.__values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) {
305
- var listElement = list_1_1.value;
306
- newList.push({
307
- id: listElement.id,
308
- location: listElement.location,
309
- price: listElement.price,
310
- currency: listElement.currency,
311
- url: listElement.url,
312
- type: listElement.type,
313
- extras: {}
314
- });
315
- }
316
- }
317
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
318
- finally {
319
- try {
320
- if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1);
321
- }
322
- finally { if (e_1) throw e_1.error; }
323
- }
324
- newList.map((/**
325
- * @param {?} el
326
- * @return {?}
327
- */
328
- function (el) {
329
- el.extras['repeat'] = false;
330
- /** @type {?} */
331
- var size = newList.filter((/**
332
- * @param {?} item
333
- * @return {?}
334
- */
335
- function (item) {
336
- return el.location.latitude === item.location.latitude && el.location.longitude === item.location.longitude;
337
- }));
338
- /** @type {?} */
339
- var distance = 30 * size.length / 2.0;
340
- /** @type {?} */
341
- var radiansBetweenAnnotations = (Math.PI * 2) / size.length;
342
- if (!el.extras['repeat'] && size.length > 1) {
343
- /** @type {?} */
344
- var locationShare = Object.assign({}, el.location);
345
- for (var i = 0; i < size.length; i++) {
346
- /** @type {?} */
347
- var heading = radiansBetweenAnnotations * i;
348
- size[i]['repeat'] = true;
349
- /** @type {?} */
350
- var newLocation = MarkersService.calculateLocationFrom(locationShare, heading, distance);
351
- response.polyLines.push({
352
- path: [
353
- {
354
- latitude: Number(locationShare.latitude),
355
- longitude: Number(locationShare.longitude)
356
- },
357
- {
358
- latitude: Number(newLocation.latitude),
359
- longitude: Number(newLocation.longitude)
360
- }
361
- ]
362
- });
363
- size[i].location = newLocation;
364
- }
365
- }
366
- return el;
367
- }));
368
- response.markers = newList;
369
- return response;
370
- };
371
288
  /**
372
289
  * @private
373
290
  * @param {?} entity
@@ -427,4 +344,4 @@ if (false) {
427
344
  */
428
345
  MarkersService.prototype._converter;
429
346
  }
430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG1hcGxhbmRlci9jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL21hcmtlcnMvbWFya2Vycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsT0FBTyxFQUVQLFFBQVEsRUFFUixlQUFlLEVBSWhCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJOUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUkxRjtJQUdFLHdCQUNVLGlCQUFtQyxFQUNuQyxpQkFBbUMsRUFDbkMsVUFBb0M7UUFGcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGVBQVUsR0FBVixVQUFVLENBQTBCO0lBRTlDLENBQUM7Ozs7OztJQUVjLHdDQUF5Qjs7Ozs7SUFBeEMsVUFBeUMsSUFBc0I7O1lBQ3pELElBQUksR0FBcUIsSUFBSTtRQUNqQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQyxPQUFPO1lBQ25ELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLElBQUksR0FBRyxPQUFPLENBQUM7YUFDaEI7UUFDSCxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUVjLDBDQUEyQjs7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QztDQUFBLEFBL05ELElBK05DO1NBOU5ZLGNBQWM7Ozs7OztJQUd2QiwyQ0FBMkM7Ozs7O0lBQzNDLDJDQUEyQzs7Ozs7SUFDM0Msb0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzLFxyXG4gIENFUixcclxuICBDdXJyZW5jeSxcclxuICBHZW9QdCxcclxuICBOZXdQcm9wZXJ0eUxpdGUsXHJcbiAgTmV3UHJvcGVydHlMaXRlU3VnZ2VzdCxcclxuICBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gIFByb3BlcnR5VHlwZUVudW1cclxufSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuaW1wb3J0IHtDb25zdGFudHNDb21wb25lbnRzfSBmcm9tICcuLi8uLi9jb25zdGFudHNDb21wb25lbnRzJztcclxuaW1wb3J0IHtNYXJrZXJ9IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9tYXJrZXInO1xyXG5pbXBvcnQge1Byb3BlcnR5Q2FyZEluZm99IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS1jYXJkLWluZm8nO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZUl0ZW19IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS10eXBlLWl0ZW0nO1xyXG5pbXBvcnQge09mZmVyaW5nVHlwZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzL29mZmVyaW5nLXR5cGUvb2ZmZXJpbmctdHlwZS5waXBlJztcclxuaW1wb3J0IHtQcm9wZXJ0eVR5cGVQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9wcm9wZXJ0eS10eXBlL3Byb3BlcnR5LXR5cGUucGlwZSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHtDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4uL2N1cnJlbmN5LWNvbnZlcnRlci9jdXJyZW5jeS1jb252ZXJ0ZXIuc2VydmljZSc7XHJcblxyXG5kZWNsYXJlIHZhciBnb29nbGU6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1hcmtlcnNTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9wcm9wZXJ0eVR5cGVQaXBlOiBQcm9wZXJ0eVR5cGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfb2ZmZXJpbmdUeXBlUGlwZTogT2ZmZXJpbmdUeXBlUGlwZSxcclxuICAgIHByaXZhdGUgX2NvbnZlcnRlcjogQ3VycmVuY3lDb252ZXJ0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRQcm9wZXJ0eVR5cGVJdGVtQnlUeXBlKHR5cGU6IFByb3BlcnR5VHlwZUVudW0pOiBQcm9wZXJ0eVR5cGVJdGVtIHtcclxuICAgIGxldCBpdGVtOiBQcm9wZXJ0eVR5cGVJdGVtID0gbnVsbDtcclxuICAgIENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnZhbHVlID09PSB0eXBlKSB7XHJcbiAgICAgICAgaXRlbSA9IGVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVByb3BlcnR5SW5GYXZvcml0ZXMocHJvcGVydHlJZDogc3RyaW5nLCBmYXZvcml0ZXM6IE5ld1Byb3BlcnR5TGl0ZVtdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZhdm9yaXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocHJvcGVydHlJZCA9PT0gZmF2b3JpdGVzW2ldLmlkKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUxvY2F0aW9uRnJvbShsb2NhdGlvbjogR2VvUHQsIGJlYXJpbmdJblJhZGlhbnM6IG51bWJlciwgZGlzdGFuY2VJbk1ldHJlczogbnVtYmVyKTogR2VvUHQge1xyXG4gICAgY29uc3QgY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zID0gbG9jYXRpb24ubGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgY29uc3QgY29vcmRpbmF0ZUxvbmdpdHVkZUluUmFkaWFucyA9IGxvY2F0aW9uLmxvbmdpdHVkZSAqIE1hdGguUEkgLyAxODA7XHJcbiAgICBjb25zdCBkaXN0YW5jZUNvbXBhcmVkVG9FYXJ0aCA9IGRpc3RhbmNlSW5NZXRyZXMgLyA2Mzc4MTAwLjA7XHJcbiAgICBjb25zdCByZXN1bHRMYXRpdHVkZUluUmFkaWFucyA9IE1hdGguYXNpbihNYXRoLnNpbihjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMpICogTWF0aC5jb3MoZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICtcclxuICAgICAgTWF0aC5jb3MoY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSAqIE1hdGguc2luKGRpc3RhbmNlQ29tcGFyZWRUb0VhcnRoKSAqIE1hdGguY29zKGJlYXJpbmdJblJhZGlhbnMpKTtcclxuICAgIGNvbnN0IHJlc3VsdExvbmdpdHVkZUluUmFkaWFucyA9IGNvb3JkaW5hdGVMb25naXR1ZGVJblJhZGlhbnMgKyBNYXRoLmF0YW4yKE1hdGguc2luKGJlYXJpbmdJblJhZGlhbnMpICpcclxuICAgICAgTWF0aC5zaW4oZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICogTWF0aC5jb3MoY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSwgTWF0aC5jb3MoZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpIC1cclxuICAgICAgTWF0aC5zaW4oY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSAqIE1hdGguc2luKHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zKSk7XHJcbiAgICBjb25zdCBuZXdDb29yZGluYXRlczogYW55ID0ge307XHJcbiAgICBuZXdDb29yZGluYXRlcy5sYXRpdHVkZSA9IHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zICogMTgwIC8gTWF0aC5QSTtcclxuICAgIG5ld0Nvb3JkaW5hdGVzLmxvbmdpdHVkZSA9IHJlc3VsdExvbmdpdHVkZUluUmFkaWFucyAqIDE4MCAvIE1hdGguUEk7XHJcbiAgICByZXR1cm4gbmV3Q29vcmRpbmF0ZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZFVSTChjb25maWc6IHtcclxuICAgIHByb3BlcnR5SWQ6IHN0cmluZyxcclxuICAgIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gICAgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtLFxyXG4gICAgYWRkcmVzczogQWRkcmVzc1xyXG4gIH0pOiBzdHJpbmcge1xyXG4gICAgbGV0IHVybCA9ICdwcm9wZXJ0eS8nO1xyXG4gICAgdXJsICs9IGAke3RoaXMuX3Byb3BlcnR5VHlwZVBpcGUudHJhbnNmb3JtKGNvbmZpZy5wcm9wZXJ0eVR5cGUsIHRydWUpfS1gO1xyXG4gICAgdXJsICs9IGAke3RoaXMuX29mZmVyaW5nVHlwZVBpcGUudHJhbnNmb3JtKGNvbmZpZy5vZmZlcmluZywgJyAnKS5yZXBsYWNlKC8gL2csICcnKX0tYDtcclxuICAgIHVybCArPSBjb25maWcuYWRkcmVzcy5jb2xvbnkgPyBgJHtjb25maWcuYWRkcmVzcy5jb2xvbnl9LWAgOiAnJztcclxuICAgIHVybCArPSBjb25maWcuYWRkcmVzcy5jaXR5ID8gYCR7Y29uZmlnLmFkZHJlc3MuY2l0eX0tYCA6ICcnO1xyXG4gICAgdXJsICs9IGNvbmZpZy5wcm9wZXJ0eUlkO1xyXG4gICAgdXJsID0gVXRpbHMucmVtb3ZlRGlhY3JpdGljcyh1cmwpLnJlcGxhY2UoLyAvZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHVybDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlUHJvcGVydGllc0luUG9seShwcm9wZXJ0aWVzOiBNYXJrZXJbXSwgcGF0aHM6IGFueVtdKTogTWFya2VyW10ge1xyXG4gICAgY29uc3QgcG9seWdvbiA9IG5ldyBnb29nbGUubWFwcy5Qb2x5Z29uKHtwYXRoczogcGF0aHN9KTtcclxuICAgIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcm9wZXJ0aWVzLm1hcCgoZWw6IE1hcmtlcikgPT4ge1xyXG4gICAgICAgIGVsLmV4dHJhc1snc2hvd0luUG9seWdvbiddID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tTGF0TG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhlbC5sb2NhdGlvbi5sYXRpdHVkZSwgZWwubG9jYXRpb24ubG9uZ2l0dWRlKTtcclxuICAgICAgICBpZiAoZ29vZ2xlLm1hcHMuZ2VvbWV0cnkucG9seS5jb250YWluc0xvY2F0aW9uKGN1c3RvbUxhdExuZywgcG9seWdvbikpIHtcclxuICAgICAgICAgIGVsLmV4dHJhc1snc2hvd0luUG9seWdvbiddID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZWwuZXh0cmFzWydzaG93SW5Qb2x5Z29uJ10gPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5leHRyYXNbJ3Nob3dJblBvbHlnb24nXSkge1xyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYXJrZXJzVG9DdXJyZW5jeShtYXJrZXJzOiBNYXJrZXJbXSwgdG9DdXJyZW5jeTogQ3VycmVuY3ksIGN1cnJlbmNpZXM6IENFUltdKTogTWFya2VyW10ge1xyXG4gICAgbWFya2VycyA9IG1hcmtlcnMubWFwPE1hcmtlcj4oaXRlbSA9PiB7XHJcbiAgICAgIGlmIChDdXJyZW5jeVtpdGVtLmluZm8uY3VycmVuY3ldICE9PSB0b0N1cnJlbmN5KSB7XHJcbiAgICAgICAgaXRlbS5pbmZvLnByaWNlID0gdGhpcy5fY29udmVydGVyLm51bWJlcihpdGVtLmluZm8ucHJpY2UsIGN1cnJlbmNpZXMsIEN1cnJlbmN5W2l0ZW0uaW5mby5jdXJyZW5jeV0sIHRvQ3VycmVuY3kpO1xyXG4gICAgICAgIGl0ZW0uaW5mby5jdXJyZW5jeSA9IHRvQ3VycmVuY3kudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1hcmtlcnM7XHJcbiAgfVxyXG5cclxuICBidWlsZE1hcmtlcnMoZW50aXRpZXM6IE5ld1Byb3BlcnR5TGl0ZVtdIHwgTmV3UHJvcGVydHlMaXRlU3VnZ2VzdFtdLCBmYXZvcml0ZXM/OiBOZXdQcm9wZXJ0eUxpdGVbXSk6IE1hcmtlcltdIHtcclxuICAgIGNvbnN0IG1hcmtlcnM6IE1hcmtlcltdID0gW107XHJcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgY29uc3QgbTogTWFya2VyID0ge1xyXG4gICAgICAgIGxvY2F0aW9uOiBlbnRpdHkuYWRkcmVzcy5sb2NhdGlvbixcclxuICAgICAgICBob3ZlcjogZmFsc2UsXHJcbiAgICAgICAgdmlzaXRlZDogZmFsc2UsXHJcbiAgICAgICAgdHlwZTogTWFya2Vyc1NlcnZpY2UuZ2V0UHJvcGVydHlUeXBlSXRlbUJ5VHlwZShlbnRpdHkudHlwZSksXHJcbiAgICAgICAgaW5mbzogdGhpcy5jcmVhdGVQcm9wZXJ0eUluZm9DYXJkKGVudGl0eSksXHJcbiAgICAgICAgaXNGYXZvcml0ZTogZmFsc2UsXHJcbiAgICAgICAgZXh0cmFzOiB7fVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSB7XHJcbiAgICAgICAgbS5pc0Zhdm9yaXRlID0gZmF2b3JpdGVzICYmIGZhdm9yaXRlcy5sZW5ndGggPiAwID8gTWFya2Vyc1NlcnZpY2UudmFsaWRhdGVQcm9wZXJ0eUluRmF2b3JpdGVzKGVudGl0eS5pZCwgZmF2b3JpdGVzKSA6IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG0uaXNGYXZvcml0ZSA9IGZhdm9yaXRlcyAmJiBmYXZvcml0ZXMubGVuZ3RoID4gMCA/IE1hcmtlcnNTZXJ2aWNlLnZhbGlkYXRlUHJvcGVydHlJbkZhdm9yaXRlcyhlbnRpdHkucHJvcGVydHlJZCwgZmF2b3JpdGVzKSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIG1hcmtlcnMucHVzaChtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1hcmtlcnM7XHJcbiAgfVxyXG5cclxuICBidWlsZFNwaWRlcihsaXN0OiBNYXJrZXJbXSk6IHsgbWFya2VyczogTWFya2VyW10sIHBvbHlMaW5lczogYW55W10gfSB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IHttYXJrZXJzOiBbXSwgcG9seUxpbmVzOiBbXX07XHJcbiAgICBsaXN0Lm1hcCgoZWwpID0+IHtcclxuICAgICAgZWwuZXh0cmFzWydyZXBlYXQnXSA9IGZhbHNlO1xyXG4gICAgICBjb25zdCBzaXplID0gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmxvY2F0aW9uLmxhdGl0dWRlID09PSBpdGVtLmxvY2F0aW9uLmxhdGl0dWRlICYmIGVsLmxvY2F0aW9uLmxvbmdpdHVkZSA9PT0gaXRlbS5sb2NhdGlvbi5sb25naXR1ZGU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IDEyICogc2l6ZS5sZW5ndGggLyAyLjA7XHJcbiAgICAgIGNvbnN0IHJhZGlhbnNCZXR3ZWVuQW5ub3RhdGlvbnMgPSAoTWF0aC5QSSAqIDIpIC8gc2l6ZS5sZW5ndGg7XHJcbiAgICAgIGlmICghZWwuZXh0cmFzWydyZXBlYXQnXSAmJiBzaXplLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvblNoYXJlOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBlbC5sb2NhdGlvbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBoZWFkaW5nID0gcmFkaWFuc0JldHdlZW5Bbm5vdGF0aW9ucyAqIGk7XHJcbiAgICAgICAgICBzaXplW2ldWydyZXBlYXQnXSA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBuZXdMb2NhdGlvbiA9IE1hcmtlcnNTZXJ2aWNlLmNhbGN1bGF0ZUxvY2F0aW9uRnJvbShsb2NhdGlvblNoYXJlLCBoZWFkaW5nLCBkaXN0YW5jZSk7XHJcbiAgICAgICAgICByZXNwb25zZS5wb2x5TGluZXMucHVzaCh7XHJcbiAgICAgICAgICAgIHBhdGg6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogTnVtYmVyKGxvY2F0aW9uU2hhcmUubGF0aXR1ZGUpLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBOdW1iZXIobG9jYXRpb25TaGFyZS5sb25naXR1ZGUpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogTnVtYmVyKG5ld0xvY2F0aW9uLmxhdGl0dWRlKSxcclxuICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogTnVtYmVyKG5ld0xvY2F0aW9uLmxvbmdpdHVkZSlcclxuICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzaXplW2ldLmxvY2F0aW9uID0gbmV3TG9jYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlbDtcclxuICAgIH0pO1xyXG4gICAgcmVzcG9uc2UubWFya2VycyA9IGxpc3Q7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBidWlsZE5ld1NwaWRlcihsaXN0OiBBcnJheTx7IGlkOiBzdHJpbmcsIGxvY2F0aW9uOiBHZW9QdCwgcHJpY2U6IG51bWJlcixcclxuICAgIGN1cnJlbmN5OiBzdHJpbmcsIHVybDogc3RyaW5nLCB0eXBlOiBQcm9wZXJ0eVR5cGVFbnVtIH0+KTogeyBtYXJrZXJzOiBhbnlbXSwgcG9seUxpbmVzOiBhbnlbXSB9IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0ge21hcmtlcnM6IFtdLCBwb2x5TGluZXM6IFtdfTtcclxuICAgIGNvbnN0IG5ld0xpc3QgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGlzdEVsZW1lbnQgb2YgbGlzdCkge1xyXG4gICAgICBuZXdMaXN0LnB1c2goe1xyXG4gICAgICAgIGlkOiBsaXN0RWxlbWVudC5pZCxcclxuICAgICAgICBsb2NhdGlvbjogbGlzdEVsZW1lbnQubG9jYXRpb24sXHJcbiAgICAgICAgcHJpY2U6IGxpc3RFbGVtZW50LnByaWNlLFxyXG4gICAgICAgIGN1cnJlbmN5OiBsaXN0RWxlbWVudC5jdXJyZW5jeSxcclxuICAgICAgICB1cmw6IGxpc3RFbGVtZW50LnVybCxcclxuICAgICAgICB0eXBlOiBsaXN0RWxlbWVudC50eXBlLFxyXG4gICAgICAgIGV4dHJhczoge31cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuZXdMaXN0Lm1hcCgoZWwpID0+IHtcclxuICAgICAgZWwuZXh0cmFzWydyZXBlYXQnXSA9IGZhbHNlO1xyXG4gICAgICBjb25zdCBzaXplID0gbmV3TGlzdC5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmxvY2F0aW9uLmxhdGl0dWRlID09PSBpdGVtLmxvY2F0aW9uLmxhdGl0dWRlICYmIGVsLmxvY2F0aW9uLmxvbmdpdHVkZSA9PT0gaXRlbS5sb2NhdGlvbi5sb25naXR1ZGU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IDMwICogc2l6ZS5sZW5ndGggLyAyLjA7XHJcbiAgICAgIGNvbnN0IHJhZGlhbnNCZXR3ZWVuQW5ub3RhdGlvbnMgPSAoTWF0aC5QSSAqIDIpIC8gc2l6ZS5sZW5ndGg7XHJcbiAgICAgIGlmICghZWwuZXh0cmFzWydyZXBlYXQnXSAmJiBzaXplLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvblNoYXJlOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBlbC5sb2NhdGlvbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBoZWFkaW5nID0gcmFkaWFuc0JldHdlZW5Bbm5vdGF0aW9ucyAqIGk7XHJcbiAgICAgICAgICBzaXplW2ldWydyZXBlYXQnXSA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBuZXdMb2NhdGlvbiA9IE1hcmtlcnNTZXJ2aWNlLmNhbGN1bGF0ZUxvY2F0aW9uRnJvbShsb2NhdGlvblNoYXJlLCBoZWFkaW5nLCBkaXN0YW5jZSk7XHJcbiAgICAgICAgICByZXNwb25zZS5wb2x5TGluZXMucHVzaCh7XHJcbiAgICAgICAgICAgIHBhdGg6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogTnVtYmVyKGxvY2F0aW9uU2hhcmUubGF0aXR1ZGUpLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBOdW1iZXIobG9jYXRpb25TaGFyZS5sb25naXR1ZGUpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogTnVtYmVyKG5ld0xvY2F0aW9uLmxhdGl0dWRlKSxcclxuICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogTnVtYmVyKG5ld0xvY2F0aW9uLmxvbmdpdHVkZSlcclxuICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzaXplW2ldLmxvY2F0aW9uID0gbmV3TG9jYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlbDtcclxuICAgIH0pO1xyXG4gICAgcmVzcG9uc2UubWFya2VycyA9IG5ld0xpc3Q7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVByb3BlcnR5SW5mb0NhcmQoZW50aXR5OiBOZXdQcm9wZXJ0eUxpdGUgfCBOZXdQcm9wZXJ0eUxpdGVTdWdnZXN0KTogUHJvcGVydHlDYXJkSW5mbyB7XHJcbiAgICByZXR1cm4gIHtcclxuICAgICAgYWRkcmVzczogbmV3IEFkZHJlc3MoZW50aXR5LmFkZHJlc3MgfHwgbnVsbCksXHJcbiAgICAgIGF1dGhVc2VyczogKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkgPyBlbnRpdHkuYXV0aFVzZXJzIDogJycsXHJcbiAgICAgIGN1cnJlbmN5OiBlbnRpdHkuY3VycmVuY3ksXHJcbiAgICAgIHByb3BlcnR5SWQ6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LmlkIDogZW50aXR5LnByb3BlcnR5SWQsXHJcbiAgICAgIGltYWdlOiBlbnRpdHkuaW1hZ2UsXHJcbiAgICAgIG9mZmVyaW5nOiBlbnRpdHkub2ZmZXJpbmcsXHJcbiAgICAgIHByaWNlOiBlbnRpdHkucHJpY2UsXHJcbiAgICAgIHR5cGU6IGVudGl0eS50eXBlLFxyXG4gICAgICB1cmw6IHRoaXMuYnVpbGRVUkwoe1xyXG4gICAgICAgIGFkZHJlc3M6IGVudGl0eS5hZGRyZXNzLFxyXG4gICAgICAgIG9mZmVyaW5nOiBlbnRpdHkub2ZmZXJpbmcsXHJcbiAgICAgICAgcHJvcGVydHlUeXBlOiBlbnRpdHkudHlwZSxcclxuICAgICAgICBwcm9wZXJ0eUlkOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5pZCA6IGVudGl0eS5wcm9wZXJ0eUlkXHJcbiAgICAgIH0pLFxyXG4gICAgICBzdGF0dXM6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LnN0YXR1cyA6IG51bGwsXHJcbiAgICAgIGZlYXR1cmVzOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5mZWF0dXJlcyA6IG51bGwsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG1hcGxhbmRlci9jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL21hcmtlcnMvbWFya2Vycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxPQUFPLEVBRVAsUUFBUSxFQUVSLGVBQWUsRUFJaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUk5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBSTFGO0lBR0Usd0JBQ1UsaUJBQW1DLEVBQ25DLGlCQUFtQyxFQUNuQyxVQUFvQztRQUZwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBMEI7SUFFOUMsQ0FBQzs7Ozs7O0lBRWMsd0NBQXlCOzs7OztJQUF4QyxVQUF5QyxJQUFzQjs7WUFDekQsSUFBSSxHQUFxQixJQUFJO1FBQ2pDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLE9BQU87WUFDbkQsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDMUIsSUFBSSxHQUFHLE9BQU8sQ0FBQzthQUNoQjtRQUNILENBQUMsRUFBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7Ozs7O0lBRWMsMENBQTJCOzs7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QUM7O2dCQTlLRixVQUFVOzs7O2dCQU5ILGdCQUFnQjtnQkFEaEIsZ0JBQWdCO2dCQUdoQix3QkFBd0I7O0lBbUxoQyxxQkFBQztDQUFBLEFBL0tELElBK0tDO1NBOUtZLGNBQWM7Ozs7OztJQUd2QiwyQ0FBMkM7Ozs7O0lBQzNDLDJDQUEyQzs7Ozs7SUFDM0Msb0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzLFxyXG4gIENFUixcclxuICBDdXJyZW5jeSxcclxuICBHZW9QdCxcclxuICBOZXdQcm9wZXJ0eUxpdGUsXHJcbiAgTmV3UHJvcGVydHlMaXRlU3VnZ2VzdCxcclxuICBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gIFByb3BlcnR5VHlwZUVudW1cclxufSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuaW1wb3J0IHtDb25zdGFudHNDb21wb25lbnRzfSBmcm9tICcuLi8uLi9jb25zdGFudHNDb21wb25lbnRzJztcclxuaW1wb3J0IHtNYXJrZXJ9IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9tYXJrZXInO1xyXG5pbXBvcnQge1Byb3BlcnR5Q2FyZEluZm99IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS1jYXJkLWluZm8nO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZUl0ZW19IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS10eXBlLWl0ZW0nO1xyXG5pbXBvcnQge09mZmVyaW5nVHlwZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzL29mZmVyaW5nLXR5cGUvb2ZmZXJpbmctdHlwZS5waXBlJztcclxuaW1wb3J0IHtQcm9wZXJ0eVR5cGVQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9wcm9wZXJ0eS10eXBlL3Byb3BlcnR5LXR5cGUucGlwZSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHtDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4uL2N1cnJlbmN5LWNvbnZlcnRlci9jdXJyZW5jeS1jb252ZXJ0ZXIuc2VydmljZSc7XHJcblxyXG5kZWNsYXJlIHZhciBnb29nbGU6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1hcmtlcnNTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9wcm9wZXJ0eVR5cGVQaXBlOiBQcm9wZXJ0eVR5cGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfb2ZmZXJpbmdUeXBlUGlwZTogT2ZmZXJpbmdUeXBlUGlwZSxcclxuICAgIHByaXZhdGUgX2NvbnZlcnRlcjogQ3VycmVuY3lDb252ZXJ0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRQcm9wZXJ0eVR5cGVJdGVtQnlUeXBlKHR5cGU6IFByb3BlcnR5VHlwZUVudW0pOiBQcm9wZXJ0eVR5cGVJdGVtIHtcclxuICAgIGxldCBpdGVtOiBQcm9wZXJ0eVR5cGVJdGVtID0gbnVsbDtcclxuICAgIENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnZhbHVlID09PSB0eXBlKSB7XHJcbiAgICAgICAgaXRlbSA9IGVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVByb3BlcnR5SW5GYXZvcml0ZXMocHJvcGVydHlJZDogc3RyaW5nLCBmYXZvcml0ZXM6IE5ld1Byb3BlcnR5TGl0ZVtdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZhdm9yaXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocHJvcGVydHlJZCA9PT0gZmF2b3JpdGVzW2ldLmlkKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUxvY2F0aW9uRnJvbShsb2NhdGlvbjogR2VvUHQsIGJlYXJpbmdJblJhZGlhbnM6IG51bWJlciwgZGlzdGFuY2VJbk1ldHJlczogbnVtYmVyKTogR2VvUHQge1xyXG4gICAgY29uc3QgY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zID0gbG9jYXRpb24ubGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgY29uc3QgY29vcmRpbmF0ZUxvbmdpdHVkZUluUmFkaWFucyA9IGxvY2F0aW9uLmxvbmdpdHVkZSAqIE1hdGguUEkgLyAxODA7XHJcbiAgICBjb25zdCBkaXN0YW5jZUNvbXBhcmVkVG9FYXJ0aCA9IGRpc3RhbmNlSW5NZXRyZXMgLyA2Mzc4MTAwLjA7XHJcbiAgICBjb25zdCByZXN1bHRMYXRpdHVkZUluUmFkaWFucyA9IE1hdGguYXNpbihNYXRoLnNpbihjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMpICogTWF0aC5jb3MoZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICtcclxuICAgICAgTWF0aC5jb3MoY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSAqIE1hdGguc2luKGRpc3RhbmNlQ29tcGFyZWRUb0VhcnRoKSAqIE1hdGguY29zKGJlYXJpbmdJblJhZGlhbnMpKTtcclxuICAgIGNvbnN0IHJlc3VsdExvbmdpdHVkZUluUmFkaWFucyA9IGNvb3JkaW5hdGVMb25naXR1ZGVJblJhZGlhbnMgKyBNYXRoLmF0YW4yKE1hdGguc2luKGJlYXJpbmdJblJhZGlhbnMpICpcclxuICAgICAgTWF0aC5zaW4oZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICogTWF0aC5jb3MoY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSwgTWF0aC5jb3MoZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpIC1cclxuICAgICAgTWF0aC5zaW4oY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSAqIE1hdGguc2luKHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zKSk7XHJcbiAgICBjb25zdCBuZXdDb29yZGluYXRlczogYW55ID0ge307XHJcbiAgICBuZXdDb29yZGluYXRlcy5sYXRpdHVkZSA9IHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zICogMTgwIC8gTWF0aC5QSTtcclxuICAgIG5ld0Nvb3JkaW5hdGVzLmxvbmdpdHVkZSA9IHJlc3VsdExvbmdpdHVkZUluUmFkaWFucyAqIDE4MCAvIE1hdGguUEk7XHJcbiAgICByZXR1cm4gbmV3Q29vcmRpbmF0ZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZFVSTChjb25maWc6IHtcclxuICAgIHByb3BlcnR5SWQ6IHN0cmluZyxcclxuICAgIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gICAgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtLFxyXG4gICAgYWRkcmVzczogQWRkcmVzc1xyXG4gIH0pOiBzdHJpbmcge1xyXG4gICAgbGV0IHVybCA9ICdwcm9wZXJ0eS8nO1xyXG4gICAgdXJsICs9IGAke3RoaXMuX3Byb3BlcnR5VHlwZVBpcGUudHJhbnNmb3JtKGNvbmZpZy5wcm9wZXJ0eVR5cGUsIHRydWUpfS1gO1xyXG4gICAgdXJsICs9IGAke3RoaXMuX29mZmVyaW5nVHlwZVBpcGUudHJhbnNmb3JtKGNvbmZpZy5vZmZlcmluZywgJyAnKS5yZXBsYWNlKC8gL2csICcnKX0tYDtcclxuICAgIHVybCArPSBjb25maWcuYWRkcmVzcy5jb2xvbnkgPyBgJHtjb25maWcuYWRkcmVzcy5jb2xvbnl9LWAgOiAnJztcclxuICAgIHVybCArPSBjb25maWcuYWRkcmVzcy5jaXR5ID8gYCR7Y29uZmlnLmFkZHJlc3MuY2l0eX0tYCA6ICcnO1xyXG4gICAgdXJsICs9IGNvbmZpZy5wcm9wZXJ0eUlkO1xyXG4gICAgdXJsID0gVXRpbHMucmVtb3ZlRGlhY3JpdGljcyh1cmwpLnJlcGxhY2UoLyAvZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHVybDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlUHJvcGVydGllc0luUG9seShwcm9wZXJ0aWVzOiBNYXJrZXJbXSwgcGF0aHM6IGFueVtdKTogTWFya2VyW10ge1xyXG4gICAgY29uc3QgcG9seWdvbiA9IG5ldyBnb29nbGUubWFwcy5Qb2x5Z29uKHtwYXRoczogcGF0aHN9KTtcclxuICAgIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcm9wZXJ0aWVzLm1hcCgoZWw6IE1hcmtlcikgPT4ge1xyXG4gICAgICAgIGVsLmV4dHJhc1snc2hvd0luUG9seWdvbiddID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tTGF0TG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhlbC5sb2NhdGlvbi5sYXRpdHVkZSwgZWwubG9jYXRpb24ubG9uZ2l0dWRlKTtcclxuICAgICAgICBpZiAoZ29vZ2xlLm1hcHMuZ2VvbWV0cnkucG9seS5jb250YWluc0xvY2F0aW9uKGN1c3RvbUxhdExuZywgcG9seWdvbikpIHtcclxuICAgICAgICAgIGVsLmV4dHJhc1snc2hvd0luUG9seWdvbiddID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZWwuZXh0cmFzWydzaG93SW5Qb2x5Z29uJ10gPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5leHRyYXNbJ3Nob3dJblBvbHlnb24nXSkge1xyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYXJrZXJzVG9DdXJyZW5jeShtYXJrZXJzOiBNYXJrZXJbXSwgdG9DdXJyZW5jeTogQ3VycmVuY3ksIGN1cnJlbmNpZXM6IENFUltdKTogTWFya2VyW10ge1xyXG4gICAgbWFya2VycyA9IG1hcmtlcnMubWFwPE1hcmtlcj4oaXRlbSA9PiB7XHJcbiAgICAgIGlmIChDdXJyZW5jeVtpdGVtLmluZm8uY3VycmVuY3ldICE9PSB0b0N1cnJlbmN5KSB7XHJcbiAgICAgICAgaXRlbS5pbmZvLnByaWNlID0gdGhpcy5fY29udmVydGVyLm51bWJlcihpdGVtLmluZm8ucHJpY2UsIGN1cnJlbmNpZXMsIEN1cnJlbmN5W2l0ZW0uaW5mby5jdXJyZW5jeV0sIHRvQ3VycmVuY3kpO1xyXG4gICAgICAgIGl0ZW0uaW5mby5jdXJyZW5jeSA9IHRvQ3VycmVuY3kudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1hcmtlcnM7XHJcbiAgfVxyXG5cclxuICBidWlsZE1hcmtlcnMoZW50aXRpZXM6IE5ld1Byb3BlcnR5TGl0ZVtdIHwgTmV3UHJvcGVydHlMaXRlU3VnZ2VzdFtdLCBmYXZvcml0ZXM/OiBOZXdQcm9wZXJ0eUxpdGVbXSk6IE1hcmtlcltdIHtcclxuICAgIGNvbnN0IG1hcmtlcnM6IE1hcmtlcltdID0gW107XHJcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgY29uc3QgbTogTWFya2VyID0ge1xyXG4gICAgICAgIGxvY2F0aW9uOiBlbnRpdHkuYWRkcmVzcy5sb2NhdGlvbixcclxuICAgICAgICBob3ZlcjogZmFsc2UsXHJcbiAgICAgICAgdmlzaXRlZDogZmFsc2UsXHJcbiAgICAgICAgdHlwZTogTWFya2Vyc1NlcnZpY2UuZ2V0UHJvcGVydHlUeXBlSXRlbUJ5VHlwZShlbnRpdHkudHlwZSksXHJcbiAgICAgICAgaW5mbzogdGhpcy5jcmVhdGVQcm9wZXJ0eUluZm9DYXJkKGVudGl0eSksXHJcbiAgICAgICAgaXNGYXZvcml0ZTogZmFsc2UsXHJcbiAgICAgICAgZXh0cmFzOiB7fVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSB7XHJcbiAgICAgICAgbS5pc0Zhdm9yaXRlID0gZmF2b3JpdGVzICYmIGZhdm9yaXRlcy5sZW5ndGggPiAwID8gTWFya2Vyc1NlcnZpY2UudmFsaWRhdGVQcm9wZXJ0eUluRmF2b3JpdGVzKGVudGl0eS5pZCwgZmF2b3JpdGVzKSA6IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG0uaXNGYXZvcml0ZSA9IGZhdm9yaXRlcyAmJiBmYXZvcml0ZXMubGVuZ3RoID4gMCA/IE1hcmtlcnNTZXJ2aWNlLnZhbGlkYXRlUHJvcGVydHlJbkZhdm9yaXRlcyhlbnRpdHkucHJvcGVydHlJZCwgZmF2b3JpdGVzKSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIG1hcmtlcnMucHVzaChtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1hcmtlcnM7XHJcbiAgfVxyXG5cclxuICBidWlsZFNwaWRlcihsaXN0OiBNYXJrZXJbXSk6IHsgbWFya2VyczogTWFya2VyW10sIHBvbHlMaW5lczogYW55W10gfSB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IHttYXJrZXJzOiBbXSwgcG9seUxpbmVzOiBbXX07XHJcbiAgICBsaXN0Lm1hcCgoZWwpID0+IHtcclxuICAgICAgZWwuZXh0cmFzWydyZXBlYXQnXSA9IGZhbHNlO1xyXG4gICAgICBjb25zdCBzaXplID0gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmxvY2F0aW9uLmxhdGl0dWRlID09PSBpdGVtLmxvY2F0aW9uLmxhdGl0dWRlICYmIGVsLmxvY2F0aW9uLmxvbmdpdHVkZSA9PT0gaXRlbS5sb2NhdGlvbi5sb25naXR1ZGU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IDEyICogc2l6ZS5sZW5ndGggLyAyLjA7XHJcbiAgICAgIGNvbnN0IHJhZGlhbnNCZXR3ZWVuQW5ub3RhdGlvbnMgPSAoTWF0aC5QSSAqIDIpIC8gc2l6ZS5sZW5ndGg7XHJcbiAgICAgIGlmICghZWwuZXh0cmFzWydyZXBlYXQnXSAmJiBzaXplLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvblNoYXJlOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBlbC5sb2NhdGlvbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBoZWFkaW5nID0gcmFkaWFuc0JldHdlZW5Bbm5vdGF0aW9ucyAqIGk7XHJcbiAgICAgICAgICBzaXplW2ldWydyZXBlYXQnXSA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBuZXdMb2NhdGlvbiA9IE1hcmtlcnNTZXJ2aWNlLmNhbGN1bGF0ZUxvY2F0aW9uRnJvbShsb2NhdGlvblNoYXJlLCBoZWFkaW5nLCBkaXN0YW5jZSk7XHJcbiAgICAgICAgICByZXNwb25zZS5wb2x5TGluZXMucHVzaCh7XHJcbiAgICAgICAgICAgIHBhdGg6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogTnVtYmVyKGxvY2F0aW9uU2hhcmUubGF0aXR1ZGUpLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBOdW1iZXIobG9jYXRpb25TaGFyZS5sb25naXR1ZGUpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogTnVtYmVyKG5ld0xvY2F0aW9uLmxhdGl0dWRlKSxcclxuICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogTnVtYmVyKG5ld0xvY2F0aW9uLmxvbmdpdHVkZSlcclxuICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzaXplW2ldLmxvY2F0aW9uID0gbmV3TG9jYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlbDtcclxuICAgIH0pO1xyXG4gICAgcmVzcG9uc2UubWFya2VycyA9IGxpc3Q7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVByb3BlcnR5SW5mb0NhcmQoZW50aXR5OiBOZXdQcm9wZXJ0eUxpdGUgfCBOZXdQcm9wZXJ0eUxpdGVTdWdnZXN0KTogUHJvcGVydHlDYXJkSW5mbyB7XHJcbiAgICByZXR1cm4gIHtcclxuICAgICAgYWRkcmVzczogbmV3IEFkZHJlc3MoZW50aXR5LmFkZHJlc3MgfHwgbnVsbCksXHJcbiAgICAgIGF1dGhVc2VyczogKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkgPyBlbnRpdHkuYXV0aFVzZXJzIDogJycsXHJcbiAgICAgIGN1cnJlbmN5OiBlbnRpdHkuY3VycmVuY3ksXHJcbiAgICAgIHByb3BlcnR5SWQ6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LmlkIDogZW50aXR5LnByb3BlcnR5SWQsXHJcbiAgICAgIGltYWdlOiBlbnRpdHkuaW1hZ2UsXHJcbiAgICAgIG9mZmVyaW5nOiBlbnRpdHkub2ZmZXJpbmcsXHJcbiAgICAgIHByaWNlOiBlbnRpdHkucHJpY2UsXHJcbiAgICAgIHR5cGU6IGVudGl0eS50eXBlLFxyXG4gICAgICB1cmw6IHRoaXMuYnVpbGRVUkwoe1xyXG4gICAgICAgIGFkZHJlc3M6IGVudGl0eS5hZGRyZXNzLFxyXG4gICAgICAgIG9mZmVyaW5nOiBlbnRpdHkub2ZmZXJpbmcsXHJcbiAgICAgICAgcHJvcGVydHlUeXBlOiBlbnRpdHkudHlwZSxcclxuICAgICAgICBwcm9wZXJ0eUlkOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5pZCA6IGVudGl0eS5wcm9wZXJ0eUlkXHJcbiAgICAgIH0pLFxyXG4gICAgICBzdGF0dXM6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LnN0YXR1cyA6IG51bGwsXHJcbiAgICAgIGZlYXR1cmVzOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5mZWF0dXJlcyA6IG51bGwsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -2446,7 +2446,6 @@ class FiltersComponent {
2446
2446
  this._formBuilder = _formBuilder;
2447
2447
  this._converter = _converter;
2448
2448
  this.METERS_TO_SQ = 10.76391042;
2449
- this._lastState = null;
2450
2449
  this.changeFilter = new EventEmitter();
2451
2450
  this.isOPI = this._config || false;
2452
2451
  this._subscription = new Subscription();
@@ -2490,19 +2489,6 @@ class FiltersComponent {
2490
2489
  console.log('[FiltersComponent] utils ready');
2491
2490
  this.initComponent();
2492
2491
  }
2493
- if (changes['stateOptions'] && changes['stateOptions'].currentValue) {
2494
- if (this._lastState !== null) {
2495
- for (const stateOption of this.stateOptions) {
2496
- if (stateOption.name === this._lastState) {
2497
- this.filter.state = this._lastState;
2498
- this.filtersForm.patchValue({
2499
- state: this._lastState
2500
- });
2501
- break;
2502
- }
2503
- }
2504
- }
2505
- }
2506
2492
  }
2507
2493
  /**
2508
2494
  * @return {?}
@@ -2528,7 +2514,6 @@ class FiltersComponent {
2528
2514
  * @return {?}
2529
2515
  */
2530
2516
  changePropertyType(index) {
2531
- this._lastState = this.filter.state;
2532
2517
  this.resetFilters(index);
2533
2518
  this.applyAmenities();
2534
2519
  this.filter.type = this.propertyTypeSelected.value;
@@ -2540,7 +2525,7 @@ class FiltersComponent {
2540
2525
  this.filtersForm.controls['offering'].setValue(OfferingTypeEnum.SALE);
2541
2526
  break;
2542
2527
  }
2543
- this.filter.locationType = 'STATE';
2528
+ this.filter.locationType = null;
2544
2529
  this.filter.state = null;
2545
2530
  this.filter.municipality = null;
2546
2531
  this.filter.colony = null;
@@ -2551,8 +2536,7 @@ class FiltersComponent {
2551
2536
  * @return {?}
2552
2537
  */
2553
2538
  changeOffering(ev) {
2554
- this._lastState = this.filter.state;
2555
- this.filter.locationType = 'STATE';
2539
+ this.filter.locationType = null;
2556
2540
  this.filter.state = null;
2557
2541
  this.filter.municipality = null;
2558
2542
  this.filter.colony = null;
@@ -2567,14 +2551,6 @@ class FiltersComponent {
2567
2551
  this.filter.currency = ev;
2568
2552
  this.changeFilterStatus();
2569
2553
  }
2570
- /**
2571
- * @param {?} ev
2572
- * @return {?}
2573
- */
2574
- changeState(ev) {
2575
- this.filter.state = ev;
2576
- this.changeFilterStatus();
2577
- }
2578
2554
  /**
2579
2555
  * @param {?} amenity
2580
2556
  * @return {?}
@@ -2638,7 +2614,6 @@ class FiltersComponent {
2638
2614
  */
2639
2615
  buildForm() {
2640
2616
  this.filtersForm = this._formBuilder.group({
2641
- state: ['', [Validators.required]],
2642
2617
  offering: [],
2643
2618
  currency: [],
2644
2619
  minPrice: ['', [Validators.required, Validators.pattern(new RegExp('(^[0-9]+)'))]],
@@ -2683,7 +2658,6 @@ class FiltersComponent {
2683
2658
  */
2684
2659
  updateFormByFilters() {
2685
2660
  this.filtersForm.patchValue({
2686
- state: this.filter.state,
2687
2661
  offering: this.filter.offering,
2688
2662
  currency: this.filter.currency,
2689
2663
  minPrice: this.filter.downLimitPrice,
@@ -2703,7 +2677,6 @@ class FiltersComponent {
2703
2677
  getFilterByForm() {
2704
2678
  /** @type {?} */
2705
2679
  const data = this.filtersForm.value;
2706
- this.filter.state = data.state;
2707
2680
  this.filter.offering = data.offering;
2708
2681
  this.filter.currency = data.currency;
2709
2682
  this.filter.downLimitPrice = Number(data.minPrice);
@@ -2931,7 +2904,7 @@ class FiltersComponent {
2931
2904
  FiltersComponent.decorators = [
2932
2905
  { type: Component, args: [{
2933
2906
  selector: 'lib-filters',
2934
- template: "<!-- Todo: [FiltersComponent] Refactor code -->\r\n<form class=\"filters\" [formGroup]=\"filtersForm\" [ngClass]=\"{'filters--opened': propertyTypeSelected.value !== 'NONE'}\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <div class=\"float-button-close\">\r\n <button mat-icon-button type=\"button\" class=\"float-button-close__button\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <div class=\"body\">\r\n <div class=\"--padding\">\r\n <div class=\"header\">\r\n <mat-form-field class=\"currency\" appearance=\"outline\">\r\n <mat-label>Divisa</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\" (click)=\"changeCurrency(currency.type)\">\r\n {{currency.type}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group class=\"offering-type-list\" name=\"offering-type\" formControlName=\"offering\"\r\n aria-label=\"Offering type\">\r\n <mat-button-toggle (click)=\"changeOffering('SALE')\" [value]=\"'SALE'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'ROOM'\">\r\n Venta\r\n </mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeOffering('RENT')\" [value]=\"'RENT'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'INVESTMENT'\">\r\n Renta\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"mat-elevation-z2\" [ngClass]=\"{'property-type-list': !newFilters, 'new-property-type-list': newFilters}\">\r\n <ng-container *ngFor=\"let type of propertyTypeList; let i = index\">\r\n <ng-template [ngIf]=\"type.value !== 'NONE' && (type.value !== 'ROOM' && newFilters)\">\r\n <div class=\"property-type-list__button\">\r\n <div\r\n class=\"property-type-list__border\"\r\n [ngClass]=\"{'property-type-list__border--active': (type.value === propertyTypeSelected.value) || (propertyTypeSelected.value === 'NONE') || ((type.value === 'HOUSE' || type.value === 'APARTMENT') && propertyTypeSelected.value === 'RESIDENTIAL')}\"\r\n [ngStyle]=\"{'border-color': 'var(--' + type.iconName + ')'}\">\r\n <button mat-mini-fab=\"\" type=\"button\" (click)=\"changePropertyType(i)\"\r\n [ngStyle]=\"{'background-color': 'var(--' + type.iconName + ')'}\">\r\n <span class=\"property-type-list__icon ic-property-{{type.iconName}}\"></span>\r\n </button>\r\n </div>\r\n <span class=\"property-type-list__label\">{{type.shortName}}</span>\r\n <ng-template [ngIf]=\"type.value === 'RESIDENTIAL' && propertyTypeSelected.value === 'RESIDENTIAL'\">\r\n <div class=\"property-type-list__divider property-type-list__divider--left\"></div>\r\n <div class=\"property-type-list__divider property-type-list__divider--right\"></div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n <ng-template [ngIf]=\"isOPI\">\r\n <div class=\"all\">\r\n <button mat-raised-button=\"\" type=\"button\" class=\"all__button\"\r\n [ngClass]=\"{'all__button--active': propertyTypeSelected.value === 'NONE'}\"\r\n (click)=\"changePropertyType(9)\">Todo\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <ng-template [ngIf]=\"newFilters && propertyTypeSelected.value !== 'NONE'\">\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n Estado\r\n </h4>\r\n <div class=\"budget\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Estado</mat-label>\r\n <mat-select formControlName=\"state\">\r\n <ng-container *ngFor=\"let state of stateOptions\">\r\n <mat-option [value]=\"state.name\" (click)=\"changeState(state.name)\">\r\n {{state.name}} ({{state.total}})\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"filtersForm.controls['state'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'NONE'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-price\"></span>\r\n Presupuesto\r\n </h4>\r\n <div class=\"budget\">\r\n <!-- Min price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00EDnimo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"Min price\" formControlName=\"minPrice\" min=\"1\" (focusout)=\"changeFilterStatus()\">\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Min price [END] -->\r\n <!-- Max price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00E1ximo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"max price\" formControlName=\"maxPrice\" (focusout)=\"changeFilterStatus()\">\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('currency')\">\r\n Valor m\u00EDnimo excedido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Max price [END] -->\r\n </div>\r\n <div class=\"features\">\r\n <ng-template\r\n [ngIf]=\"propertyTypeSelected.value === 'RESIDENTIAL' || propertyTypeSelected.value === 'HOUSE' || propertyTypeSelected.value === 'APARTMENT'\">\r\n <div class=\"features__bedrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bedroom\"></span>\r\n Habitaciones\r\n </h4>\r\n <mat-button-toggle-group name=\"bedrooms\" aria-label=\"Bedrooms\" formControlName=\"bedrooms\">\r\n <ng-container *ngFor=\"let bedroom of bedroomsList\">\r\n <ng-template [ngIf]=\"bedroom === 0\" [ngIfElse]=\"bedroomNumber\">\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilterStatus()\" class=\"features__bedrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bedroomNumber>\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilterStatus()\">{{bedroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"features__bathrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bathroom\"></span>\r\n Ba\u00F1os\r\n </h4>\r\n <mat-button-toggle-group name=\"bathrooms\" aria-label=\"Bathrooms\" formControlName=\"bathrooms\">\r\n <ng-container *ngFor=\"let bathroom of bathroomsList\">\r\n <ng-template [ngIf]=\"bathroom === 0\" [ngIfElse]=\"bathroomNumber\">\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilterStatus()\"\r\n class=\"features__bathrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bathroomNumber>\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilterStatus()\">{{bathroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'LAND' && propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__parking-places\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-parking\"></span>\r\n Estacionamientos\r\n </h4>\r\n <mat-button-toggle-group name=\"parking_places\" aria-label=\"Parking Places\"\r\n formControlName=\"parkingPlaces\">\r\n <ng-container *ngFor=\"let parking of parkingPlacesList\">\r\n <ng-template [ngIf]=\"parking === 0\" [ngIfElse]=\"parkingNumber\">\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilterStatus()\"\r\n class=\"features__parking-places--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #parkingNumber>\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilterStatus()\">{{parking}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__surface\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-surface\"></span>\r\n Superficie\r\n </h4>\r\n <div class=\"--row\">\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>\u00C1rea</mat-label>\r\n <mat-select formControlName=\"surface\" (selectionChange)=\"changeFilterStatus()\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilterStatus()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let surface of surfaceList\">\r\n <mat-option [value]=\"surface\" (click)=\"changeFilterStatus()\">\r\n {{surface}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group name=\"unit_surface\" aria-label=\"Unit surface\" formControlName=\"surfaceUnit\">\r\n <mat-button-toggle (click)=\"changeFilterStatus()\" [value]=\"0\">m2</mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeFilterStatus()\" [value]=\"1\">sq ft</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value === 'INVESTMENT'\">\r\n <div class=\"feature investment\">\r\n <h4 class=\"--title\">Retorno de inversi\u00F3n</h4>\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>Porcentaje</mat-label>\r\n <mat-select formControlName=\"roi\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilterStatus()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let roi of roiList\">\r\n <mat-option [value]=\"roi\" (click)=\"changeFilterStatus()\">\r\n {{roi}}%\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n <div class=\"amenities-container\">\r\n <ng-template [ngIf]=\"propertyTypeSelected.amenities.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Amenidades\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let amenity of propertyTypeSelected.amenities\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity--active': amenity.checked}\"></span>\r\n <span class=\"amenity__label\">{{amenity.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.features.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Caracteristicas de la ubicaci\u00F3n\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let feature of propertyTypeSelected.features\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity--active': feature.checked}\"></span>\r\n <span class=\"amenity__label\">{{feature.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <button mat-flat-button type=\"submit\" class=\"apply-button\" color=\"primary\" [disabled]=\"(propertyTotal === 0 || filtersForm.invalid) && newFilters\"\r\n (click)=\"applyFilters()\">\r\n VER <span *ngIf=\"propertyTotal > 0 && newFilters\">{{propertyTotal}}</span> {{(propertyTotal === 1 ? 'PROPIEDAD' : 'PROPIEDADES')}}\r\n </button>\r\n </div>\r\n <!--div class=\"actions\">\r\n <ng-template [ngIf]=\"!isOPI\" [ngIfElse]=\"closeButtonTemplate\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template>\r\n <ng-template #closeButtonTemplate>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"close()\">CERRAR</button>\r\n </ng-template>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\"\r\n (click)=\"resetFilters()\">LIMPIAR\r\n </button>\r\n </div-->\r\n</form>\r\n",
2907
+ template: "<!-- Todo: [FiltersComponent] Refactor code -->\r\n<form class=\"filters\" [formGroup]=\"filtersForm\" [ngClass]=\"{'filters--opened': propertyTypeSelected.value !== 'NONE'}\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <div class=\"float-button-close\">\r\n <button mat-icon-button type=\"button\" class=\"float-button-close__button\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <div class=\"body\">\r\n <div class=\"--padding\">\r\n <div class=\"header\">\r\n <mat-form-field class=\"currency\" appearance=\"outline\">\r\n <mat-label>Divisa</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\" (click)=\"changeCurrency(currency.type)\">\r\n {{currency.type}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group class=\"offering-type-list\" name=\"offering-type\" formControlName=\"offering\"\r\n aria-label=\"Offering type\">\r\n <mat-button-toggle (click)=\"changeOffering('SALE')\" [value]=\"'SALE'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'ROOM'\">\r\n Venta\r\n </mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeOffering('RENT')\" [value]=\"'RENT'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'INVESTMENT'\">\r\n Renta\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"mat-elevation-z2\" [ngClass]=\"{'property-type-list': !newFilters, 'new-property-type-list': newFilters}\">\r\n <ng-container *ngFor=\"let type of propertyTypeList; let i = index\">\r\n <ng-template [ngIf]=\"type.value !== 'NONE' && (type.value !== 'ROOM' && newFilters)\">\r\n <div class=\"property-type-list__button\">\r\n <div\r\n class=\"property-type-list__border\"\r\n [ngClass]=\"{'property-type-list__border--active': (type.value === propertyTypeSelected.value) || (propertyTypeSelected.value === 'NONE') || ((type.value === 'HOUSE' || type.value === 'APARTMENT') && propertyTypeSelected.value === 'RESIDENTIAL')}\"\r\n [ngStyle]=\"{'border-color': 'var(--' + type.iconName + ')'}\">\r\n <button mat-mini-fab=\"\" type=\"button\" (click)=\"changePropertyType(i)\"\r\n [ngStyle]=\"{'background-color': 'var(--' + type.iconName + ')'}\">\r\n <span class=\"property-type-list__icon ic-property-{{type.iconName}}\"></span>\r\n </button>\r\n </div>\r\n <span class=\"property-type-list__label\">{{type.shortName}}</span>\r\n <ng-template [ngIf]=\"type.value === 'RESIDENTIAL' && propertyTypeSelected.value === 'RESIDENTIAL'\">\r\n <div class=\"property-type-list__divider property-type-list__divider--left\"></div>\r\n <div class=\"property-type-list__divider property-type-list__divider--right\"></div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n <ng-template [ngIf]=\"isOPI\">\r\n <div class=\"all\">\r\n <button mat-raised-button=\"\" type=\"button\" class=\"all__button\"\r\n [ngClass]=\"{'all__button--active': propertyTypeSelected.value === 'NONE'}\"\r\n (click)=\"changePropertyType(9)\">Todo\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'NONE'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-price\"></span>\r\n Presupuesto\r\n </h4>\r\n <div class=\"budget\">\r\n <!-- Min price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00EDnimo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"Min price\" formControlName=\"minPrice\" min=\"1\" (focusout)=\"changeFilterStatus()\">\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Min price [END] -->\r\n <!-- Max price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00E1ximo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"max price\" formControlName=\"maxPrice\" (focusout)=\"changeFilterStatus()\">\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('currency')\">\r\n Valor m\u00EDnimo excedido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Max price [END] -->\r\n </div>\r\n <div class=\"features\">\r\n <ng-template\r\n [ngIf]=\"propertyTypeSelected.value === 'RESIDENTIAL' || propertyTypeSelected.value === 'HOUSE' || propertyTypeSelected.value === 'APARTMENT'\">\r\n <div class=\"features__bedrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bedroom\"></span>\r\n Habitaciones\r\n </h4>\r\n <mat-button-toggle-group name=\"bedrooms\" aria-label=\"Bedrooms\" formControlName=\"bedrooms\">\r\n <ng-container *ngFor=\"let bedroom of bedroomsList\">\r\n <ng-template [ngIf]=\"bedroom === 0\" [ngIfElse]=\"bedroomNumber\">\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilterStatus()\" class=\"features__bedrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bedroomNumber>\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilterStatus()\">{{bedroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"features__bathrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bathroom\"></span>\r\n Ba\u00F1os\r\n </h4>\r\n <mat-button-toggle-group name=\"bathrooms\" aria-label=\"Bathrooms\" formControlName=\"bathrooms\">\r\n <ng-container *ngFor=\"let bathroom of bathroomsList\">\r\n <ng-template [ngIf]=\"bathroom === 0\" [ngIfElse]=\"bathroomNumber\">\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilterStatus()\"\r\n class=\"features__bathrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bathroomNumber>\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilterStatus()\">{{bathroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'LAND' && propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__parking-places\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-parking\"></span>\r\n Estacionamientos\r\n </h4>\r\n <mat-button-toggle-group name=\"parking_places\" aria-label=\"Parking Places\"\r\n formControlName=\"parkingPlaces\">\r\n <ng-container *ngFor=\"let parking of parkingPlacesList\">\r\n <ng-template [ngIf]=\"parking === 0\" [ngIfElse]=\"parkingNumber\">\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilterStatus()\"\r\n class=\"features__parking-places--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #parkingNumber>\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilterStatus()\">{{parking}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__surface\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-surface\"></span>\r\n Superficie\r\n </h4>\r\n <div class=\"--row\">\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>\u00C1rea</mat-label>\r\n <mat-select formControlName=\"surface\" (selectionChange)=\"changeFilterStatus()\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilterStatus()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let surface of surfaceList\">\r\n <mat-option [value]=\"surface\" (click)=\"changeFilterStatus()\">\r\n {{surface}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group name=\"unit_surface\" aria-label=\"Unit surface\" formControlName=\"surfaceUnit\">\r\n <mat-button-toggle (click)=\"changeFilterStatus()\" [value]=\"0\">m2</mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeFilterStatus()\" [value]=\"1\">sq ft</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value === 'INVESTMENT'\">\r\n <div class=\"feature investment\">\r\n <h4 class=\"--title\">Retorno de inversi\u00F3n</h4>\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>Porcentaje</mat-label>\r\n <mat-select formControlName=\"roi\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilterStatus()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let roi of roiList\">\r\n <mat-option [value]=\"roi\" (click)=\"changeFilterStatus()\">\r\n {{roi}}%\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n <div class=\"amenities-container\">\r\n <ng-template [ngIf]=\"propertyTypeSelected.amenities.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Amenidades\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let amenity of propertyTypeSelected.amenities\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity--active': amenity.checked}\"></span>\r\n <span class=\"amenity__label\">{{amenity.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.features.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Caracteristicas de la ubicaci\u00F3n\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let feature of propertyTypeSelected.features\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity--active': feature.checked}\"></span>\r\n <span class=\"amenity__label\">{{feature.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <button mat-flat-button type=\"submit\" class=\"apply-button\" color=\"primary\" [disabled]=\"(propertyTotal === 0 || filtersForm.invalid) && newFilters\"\r\n (click)=\"applyFilters()\">\r\n VER <span *ngIf=\"propertyTotal > 0 && newFilters\">{{propertyTotal}}</span> {{(propertyTotal === 1 ? 'PROPIEDAD' : 'PROPIEDADES')}}\r\n </button>\r\n </div>\r\n <!--div class=\"actions\">\r\n <ng-template [ngIf]=\"!isOPI\" [ngIfElse]=\"closeButtonTemplate\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template>\r\n <ng-template #closeButtonTemplate>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"close()\">CERRAR</button>\r\n </ng-template>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\"\r\n (click)=\"resetFilters()\">LIMPIAR\r\n </button>\r\n </div-->\r\n</form>\r\n",
2935
2908
  styles: [":host{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;display:flex;background:var(--overlay);transition:250ms}.filters--opened{height:90%!important}@media screen and (max-width:600px){.filters--opened{width:100%!important;height:100%!important;top:0!important}}.filters{width:700px;height:auto;margin:auto;border-radius:16px;position:relative;overflow:hidden;transition:150ms}.filters .--padding{padding:16px 48px;box-sizing:border-box}.filters .--row{display:flex;justify-content:space-between;align-items:flex-start}.filters .--col{width:45%}.filters .--title{margin:16px 0;color:#707070}.filters .float-button-close{position:absolute;top:16px;right:16px;height:16px;border-radius:50%}.filters .apply-button{width:100%;position:absolute;bottom:0}.filters .body{height:calc(100% - 36px);overflow-x:hidden;overflow-y:auto}.filters .header{display:flex;align-items:center;justify-content:space-around;margin-bottom:8px}.filters .listing-types{width:100%;border-radius:16px}.filters .listing-types mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .listing-types mat-button-toggle button{height:36px}.filters ::ng-deep .listing-types mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .currency ::ng-deep .mat-form-field-wrapper{padding:0}@media screen and (max-width:600px){.filters{width:100%;position:absolute;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;top:initial;bottom:0;left:0}.filters .--padding{padding:16px 24px}.filters .header{flex-direction:column}.filters .currency{width:70%;margin-bottom:8px}}.filters .offering-type-list{width:40%;border-radius:16px}.filters .offering-type-list mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button{height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .property-type-list{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 9))[9];grid-template-columns:repeat(9,calc(100% / 9));-ms-grid-rows:(80px)[1];grid-template-rows:repeat(1,80px);border-radius:40px;padding:8px;box-sizing:border-box}@media screen and (max-width:600px){.filters .offering-type-list{width:70%}.filters .property-type-list{-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3));-ms-grid-rows:(80px)[3];grid-template-rows:repeat(3,80px)}}.filters .new-property-type-list{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 8))[8];grid-template-columns:repeat(8,calc(100% / 8));-ms-grid-rows:(80px)[1];grid-template-rows:repeat(1,80px);border-radius:40px;padding:8px;box-sizing:border-box}.filters .property-type-list .property-type-list__button{margin:auto;position:relative}.filters .property-type-list .property-type-list__button button{box-shadow:none}.filters .property-type-list .property-type-list__icon{width:24px;height:24px;font-size:24px}.filters .property-type-list .property-type-list__border{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:auto;opacity:.7;border-radius:50%;box-sizing:border-box}.filters .property-type-list .property-type-list__border--active{padding:4px;border:2px solid;opacity:1!important}.filters .property-type-list .property-type-list__label{font-size:12px;display:block;margin:8px 0;text-align:center}.filters .property-type-list .property-type-list__divider{width:14%;height:2px;background:#707070;top:30%;position:absolute}.filters .property-type-list .property-type-list__divider--left{left:-9px}.filters .property-type-list .property-type-list__divider--right{right:-9px}@media screen and (max-width:600px){.filters .new-property-type-list{-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3));-ms-grid-rows:(80px)[3];grid-template-rows:repeat(3,80px)}.filters .property-type-list .property-type-list__divider{width:60%}.filters .property-type-list .property-type-list__divider--left{left:-38px}.filters .property-type-list .property-type-list__divider--right{right:-38px}}.filters .new-property-type-list .property-type-list__button{margin:auto;position:relative}.filters .new-property-type-list .property-type-list__button button{box-shadow:none}.filters .new-property-type-list .property-type-list__icon{width:24px;height:24px;font-size:24px}.filters .new-property-type-list .property-type-list__border{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:auto;opacity:.7;border-radius:50%;box-sizing:border-box}.filters .new-property-type-list .property-type-list__border--active{padding:4px;border:2px solid;opacity:1!important}.filters .new-property-type-list .property-type-list__label{font-size:12px;display:block;margin:8px 0;text-align:center}.filters .new-property-type-list .property-type-list__divider{width:14%;height:2px;background:#707070;top:30%;position:absolute}.filters .new-property-type-list .property-type-list__divider--left{left:-9px}.filters .new-property-type-list .property-type-list__divider--right{right:-9px}@media screen and (max-width:600px){.filters .new-property-type-list .property-type-list__divider{width:60%}.filters .new-property-type-list .property-type-list__divider--left{left:-38px}.filters .new-property-type-list .property-type-list__divider--right{right:-38px}}.filters .all{width:100%;margin:8px 0}.filters .all .all__button{margin:0 40%;width:20%;border-radius:16px;background:0 0}.filters .budget{display:flex}.filters .budget mat-form-field{margin-right:8px;width:calc(100% / 2 - 8px)}.filters .features{display:-ms-grid;display:grid;-ms-grid-columns:(50%)[2];grid-template-columns:repeat(2,50%);-ms-grid-rows:(auto)[2];grid-template-rows:repeat(2,auto)}@media screen and (max-width:600px){.filters .all .all__button{width:50%;margin:0 25%}.filters .features{display:block}.filters .amenities-container{flex-direction:column}}.filters .features .features__bathrooms mat-button-toggle-group,.filters .features .features__bedrooms mat-button-toggle-group,.filters .features .features__parking-places mat-button-toggle-group{width:calc(100% - 16px)}.filters .features .features__bathrooms mat-button-toggle-group mat-button-toggle,.filters .features .features__bedrooms mat-button-toggle-group mat-button-toggle,.filters .features .features__parking-places mat-button-toggle-group mat-button-toggle{width:calc(100% / 5)}.filters .features .features__bedrooms--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__bathrooms--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__parking-places--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__surface mat-button-toggle-group{margin-top:6px;margin-right:16px}.filters .amenities-container{width:100%;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:2;grid-column-end:3;display:flex}.filters .amenities{width:50%}@media screen and (max-width:600px){.filters .amenities{width:100%}}.filters .amenities__amenity{width:calc(100% / 3 - 24px);height:120px;border-radius:8px;padding:8px;display:inline-flex;flex-direction:column;align-items:center;box-sizing:border-box;margin:0 8px 8px 0;cursor:pointer}.filters .amenity__icon{display:block;width:24px;height:24px;margin:8px auto;font-size:24px;padding:8px;border-radius:50%}.filters .amenity__label{width:100%;display:block;text-align:center;font-size:12px;margin:auto}.filters .actions{display:flex}.filters .actions .action__button{width:50%;border-radius:0}"]
2936
2909
  }] }
2937
2910
  ];
@@ -2947,7 +2920,6 @@ FiltersComponent.ctorParameters = () => [
2947
2920
  FiltersComponent.propDecorators = {
2948
2921
  utils: [{ type: Input }],
2949
2922
  newFilters: [{ type: Input }],
2950
- stateOptions: [{ type: Input }],
2951
2923
  propertyTotal: [{ type: Input }],
2952
2924
  changeFilter: [{ type: Output }]
2953
2925
  };
@@ -6672,73 +6644,6 @@ class MarkersService {
6672
6644
  response.markers = list;
6673
6645
  return response;
6674
6646
  }
6675
- /**
6676
- * @param {?} list
6677
- * @return {?}
6678
- */
6679
- buildNewSpider(list) {
6680
- /** @type {?} */
6681
- const response = { markers: [], polyLines: [] };
6682
- /** @type {?} */
6683
- const newList = [];
6684
- for (const listElement of list) {
6685
- newList.push({
6686
- id: listElement.id,
6687
- location: listElement.location,
6688
- price: listElement.price,
6689
- currency: listElement.currency,
6690
- url: listElement.url,
6691
- type: listElement.type,
6692
- extras: {}
6693
- });
6694
- }
6695
- newList.map((/**
6696
- * @param {?} el
6697
- * @return {?}
6698
- */
6699
- (el) => {
6700
- el.extras['repeat'] = false;
6701
- /** @type {?} */
6702
- const size = newList.filter((/**
6703
- * @param {?} item
6704
- * @return {?}
6705
- */
6706
- item => {
6707
- return el.location.latitude === item.location.latitude && el.location.longitude === item.location.longitude;
6708
- }));
6709
- /** @type {?} */
6710
- const distance = 30 * size.length / 2.0;
6711
- /** @type {?} */
6712
- const radiansBetweenAnnotations = (Math.PI * 2) / size.length;
6713
- if (!el.extras['repeat'] && size.length > 1) {
6714
- /** @type {?} */
6715
- const locationShare = Object.assign({}, el.location);
6716
- for (let i = 0; i < size.length; i++) {
6717
- /** @type {?} */
6718
- const heading = radiansBetweenAnnotations * i;
6719
- size[i]['repeat'] = true;
6720
- /** @type {?} */
6721
- const newLocation = MarkersService.calculateLocationFrom(locationShare, heading, distance);
6722
- response.polyLines.push({
6723
- path: [
6724
- {
6725
- latitude: Number(locationShare.latitude),
6726
- longitude: Number(locationShare.longitude)
6727
- },
6728
- {
6729
- latitude: Number(newLocation.latitude),
6730
- longitude: Number(newLocation.longitude)
6731
- }
6732
- ]
6733
- });
6734
- size[i].location = newLocation;
6735
- }
6736
- }
6737
- return el;
6738
- }));
6739
- response.markers = newList;
6740
- return response;
6741
- }
6742
6647
  /**
6743
6648
  * @private
6744
6649
  * @param {?} entity