{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,SAAS,gBAAgB,CAAC,oBAAoB;IAC5C,MAAM,YAAY,SAAS,aAAa,CAAC;IACzC,MAAM,aAAa,SAAS,aAAa,CAAC;IAC1C,MAAM,WAAW,SAAS,aAAa,CAAC;IACxC,MAAM,eAAe,SAAS,aAAa,CAAC;IAC5C,MAAM,gBAAgB,SAAS,aAAa,CAAC;IAC7C,MAAM,WAAW,SAAS,aAAa,CAAC;IAExC,eAAe,iBAAiB,UAAU,CAAC;QACzC,MAAM,SAAS,MAAM,MAAM;QAC3B,OAAO,OAAO,KAAK;QACnB;IACF;IACA,UAAU,iBAAiB,SAAS;QAClC,WAAW;QACX,SAAS;QACT,UAAU;QACV,OAAO;QACP,cAAc,KAAK,GAAG;QACtB,MAAM,cAAc,SAAS,gBAAgB,CAAC;QAC9C,YAAY,OAAO,CAAC,CAAC,QAAW,AAAC,MAA2B,OAAO,GAAG;QACtE;IACF;IAEA,SAAS,gBAAgB,CAAoB,6BAA6B,OAAO,CAAC,CAAC;QACjF,OAAO,gBAAgB,CAAC,SAAS;YAC/B,MAAM,eAAe,SAAS,cAAc,CAAC;YAC7C,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,WAAW;gBACvC,OAAO,SAAS,CAAC,MAAM,CAAC;gBACxB,IAAI,cAAc,aAAa,KAAK,CAAC,OAAO,GAAG;YACjD,OAAO;gBACL,OAAO,SAAS,CAAC,GAAG,CAAC;gBACrB,IAAI,cAAc,aAAa,KAAK,CAAC,OAAO,GAAG;YACjD;QACF;IACF;IAEA,MAAM,eAAe,SAAS,gBAAgB,CAAiB;IAE/D,MAAM,OAAO,MAAM,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,KAAK,YAAY,CAAC,oBAAoB;QAClD,MAAM,KAAK,KAAK,YAAY,CAAC,mBAAmB;QAEhD,OAAO;YACL,MAAM;YACN,MAAM;gBACJ,QAAQ,KAAK,OAAO,CAAC,MAAM;gBAC3B,UAAU,KAAK,OAAO,CAAC,IAAI;gBAC3B,YAAY,KAAK,OAAO,CAAC,QAAQ;YACnC;YACA,QAAQ;gBACN,KAAK,MAAM,CAAC,OAAO,YAAY,CAAC;gBAChC,IAAI,MAAM,CAAC,MAAM,YAAY,CAAC;YAChC;QACF;IACF;IACA,QAAQ,GAAG,CAAC;IAEZ,IAAI,OAAa;IACjB,IAAI,WAAyB;IAC7B,IAAI;IACJ,IAAI,UAAsB;IAE1B,IAAI,YAAY;QACd,MAAM,WAAW,CAAC;YAChB,MAAM,SAAS,MAAM,MAAM;YAC3B,IAAI,UAAU,OAAO,IAAI,KAAK,SAAS;gBACrC,UAAW,OAAO,KAAK,IAAI;gBAC3B;YACF;QACF;QAEA,WAAW,gBAAgB,CAAC,UAAU;IACxC;IACA,IAAI,UAAU;QACZ,MAAM,WAAW,CAAC;YAChB,MAAM,SAAS,MAAM,MAAM;YAC3B,IAAI,UAAU,OAAO,IAAI,KAAK,SAAS;gBACrC,SAAS,OAAO,KAAK,KAAK;gBAC1B;YACF;QACF;QACA,SAAS,gBAAgB,CAAC,UAAU;IACtC;IACA,IAAI,cAAc;QAChB,MAAM,WAAW,CAAC;YAChB,MAAM,SAAS,MAAM,MAAM;YAC3B,IAAI,UAAU,OAAO,IAAI,KAAK,SAAS;gBACrC,WAAY,OAAO,KAAK,IAAI;gBAC5B;YACF;QACF;QACA,aAAa,gBAAgB,CAAC,UAAU;IAC1C;IAEA,MAAM,SAAS;QACb,MAAM,WAAW;sBAAE;oBAAU;qBAAQ;QAAQ;QAE7C,MAAM,eAAe,CAAA,GAAA,6CAAA,EAAE,MAAM,CAAC,MAAM,CAAC,QAAE,IAAI,EAAE,GAC3C,CAAA,GAAA,6CAAA,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;gBACxB,OAAQ;oBACN,KAAK;wBACH,oDAAoD;wBACpD,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,UAAU;oBACxF,KAAK;wBACH,OAAO,UAAU,YAAY,OAAO,MAAM,QAAQ,OAAO,KAAK,MAAM;oBAEtE,KAAK;wBACH,kDAAkD;wBAClD,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,QAAQ;oBACtF;wBACE,OAAO;gBACX;YACF;QAGF,MAAM,cAAc,CAAA,GAAA,6CAAA,EAAE,OAAO,CAC3B,cACA;YACE,CAAC;gBACC,IAAI,SAAS,OACX,OAAO,GAAG,MAAM,CAAC,GAAG;qBACf,IAAI,SAAS,MAClB,OAAO,GAAG,MAAM,CAAC,EAAE;qBAEnB,OAAO;YAEX;SACD,EACD;YAAC,SAAS,SAAS,SAAS,OAAO,QAAQ;SAAO;QAGpD,KAAK,OAAO,CAAC,CAAC;YACZ,GAAG,IAAI,CAAC,MAAM;QAChB;QAEA,YAAY,OAAO,CAAC,CAAC;YACnB,UAAU,WAAW,CAAC,GAAG,IAAI;QAC/B;QACA,MAAM,iBAAiB,SAAS,aAAa,CAAC;QAC9C,MAAM,cAAc,SAAS,aAAa,CAAC;QAC3C,MAAM,eAAe,SAAS,aAAa,CAAC;QAE5C,IAAI,YAAY,MAAM,KAAK,GAAG;YAC5B,IAAI,aACF,YAAY,KAAK,CAAC,OAAO,GAAG;YAE9B,IAAI,gBACF,eAAe,KAAK,CAAC,OAAO,GAAG;YAEjC,IAAI,iBAAiB,MAAM;gBACzB,MAAM,kBAAkB,SAAS,aAAa,CAAC;gBAC/C,gBAAgB,SAAS,GAAG;gBAC5B,gBAAgB,WAAW,GAAG;gBAC9B,UAAU,WAAW,CAAC;YACxB,OACE,aAAa,KAAK,CAAC,OAAO,GAAG;QAEjC,OAAO;YACL,IAAI,cACF,aAAa,KAAK,CAAC,OAAO,GAAG;YAE/B,IAAI,aACF,YAAY,KAAK,CAAC,OAAO,GAAG;YAE9B,IAAI,gBACF,eAAe,KAAK,CAAC,OAAO,GAAG;QAEnC;IACF;AACF","sources":["src/ts/components/mortgagesFilters.ts"],"sourcesContent":["import _ from 'lodash';\n\ntype MortgageType = 'all' | 'discounted' | 'fixed' | undefined;\ntype LookingFor = 'all' | 'under-3-years' | 'over-3-years' | undefined;\ninterface Data {\n rented: boolean | undefined | any;\n mortgage: MortgageType | undefined;\n lookingFor: LookingFor | undefined;\n}\ntype Sort = 'ltv' | 'ir' | undefined;\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const container = document.querySelector('.mortgages__block') as HTMLElement;\n const lookingFor = document.querySelector('#looking-for') as Element;\n const isRented = document.querySelector('#rented') as Element;\n const mortgageType = document.querySelector('#mortgage-type') as Element;\n const sortingSelect = document.querySelector('#mortgages-sorting') as HTMLSelectElement;\n const resetBtn = document.querySelector('#reset-btn') as HTMLElement;\n\n sortingSelect?.addEventListener('change', (event: Event) => {\n const select = event.target as HTMLSelectElement;\n sort = select.value as Sort;\n filter();\n });\n resetBtn?.addEventListener('click', () => {\n mortgage = undefined;\n rented = undefined;\n looking = undefined;\n sort = undefined;\n sortingSelect.value = '';\n const radioGroups = document.querySelectorAll('.filters-block input[type=\"radio\"]');\n radioGroups.forEach((radio) => ((radio as HTMLInputElement).checked = false));\n filter();\n });\n\n document.querySelectorAll('.mortgages__filter-button').forEach((button) => {\n button.addEventListener('click', () => {\n const filtersBlock = document.getElementById('filters-block');\n if (button.classList.contains('active')) {\n button.classList.remove('active');\n if (filtersBlock) filtersBlock.style.display = 'none';\n } else {\n button.classList.add('active');\n if (filtersBlock) filtersBlock.style.display = 'block';\n }\n });\n });\n\n const compareItems = document.querySelectorAll('.mortgages__item');\n\n const data = Array.from(compareItems).map((item) => {\n const ltv = item.getAttribute('data-sort-ltv') || '';\n const ir = item.getAttribute('data-sort-ir') || '';\n\n return {\n item: item,\n data: {\n rented: item.dataset.rented as boolean | undefined,\n mortgage: item.dataset.type as MortgageType,\n lookingFor: item.dataset.dealTerm as LookingFor,\n } as Data,\n values: {\n ltv: isNaN(+ltv) ? undefined : +ltv,\n ir: isNaN(+ir) ? undefined : +ir,\n },\n };\n });\n console.log(data);\n\n let sort: Sort = undefined;\n let mortgage: MortgageType = undefined;\n let rented: boolean | undefined;\n let looking: LookingFor = undefined;\n\n if (lookingFor) {\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (target && target.type === 'radio') {\n looking = (target.value || undefined) as LookingFor;\n filter();\n }\n };\n\n lookingFor.addEventListener('change', onChange);\n }\n if (isRented) {\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (target && target.type === 'radio') {\n rented = target.value === 'true';\n filter();\n }\n };\n isRented.addEventListener('change', onChange);\n }\n if (mortgageType) {\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (target && target.type === 'radio') {\n mortgage = (target.value || undefined) as MortgageType;\n filter();\n }\n };\n mortgageType.addEventListener('change', onChange);\n }\n\n const filter = () => {\n const criteria = { mortgage, rented, looking };\n\n const filteredList = _.filter(data, ({ data }) =>\n _.every(criteria, (value, key) => {\n switch (key) {\n case 'looking':\n // return !value ? true : value === data.lookingFor;\n return value === 'all' ? true : value === undefined ? true : value === data.lookingFor;\n case 'rented':\n return value === undefined ? true : value.toString() === data.rented;\n\n case 'mortgage':\n // return !value ? true : value === data.mortgage;\n return value === 'all' ? true : value === undefined ? true : value === data.mortgage;\n default:\n return true;\n }\n }),\n );\n\n const orderedData = _.orderBy(\n filteredList,\n [\n (el) => {\n if (sort === 'ltv') {\n return el.values.ltv;\n } else if (sort === 'ir') {\n return el.values.ir;\n } else {\n return null;\n }\n },\n ],\n [sort === 'ltv' || sort === 'ir' ? 'asc' : 'desc'],\n );\n\n data.forEach((el) => {\n el.item.remove();\n });\n\n orderedData.forEach((el) => {\n container.appendChild(el.item);\n });\n const mortgageNotice = document.querySelector('.mortgages__notice') as HTMLElement | null;\n const compareHead = document.querySelector('.compare__head') as HTMLElement | null;\n const noResultsDiv = document.querySelector('.no-results-message') as HTMLElement | null;\n\n if (orderedData.length === 0) {\n if (compareHead) {\n compareHead.style.display = 'none';\n }\n if (mortgageNotice) {\n mortgageNotice.style.display = 'none';\n }\n if (noResultsDiv === null) {\n const newNoResultsDiv = document.createElement('div');\n newNoResultsDiv.className = 'no-results-message';\n newNoResultsDiv.textContent = 'No results found. Try adjusting your filters to see more options.';\n container.appendChild(newNoResultsDiv);\n } else {\n noResultsDiv.style.display = 'block';\n }\n } else {\n if (noResultsDiv) {\n noResultsDiv.style.display = 'none';\n }\n if (compareHead) {\n compareHead.style.display = 'grid';\n }\n if (mortgageNotice) {\n mortgageNotice.style.display = 'block';\n }\n }\n };\n});\n"],"names":[],"version":3,"file":"compare.0c98c26a.js.map"}