{"version":3,"mappings":"sTAgCA,IAAIA,EAA8B,IAAIC,EAASC,GAAa,CAE5D,CAAC,EACGC,EAAqBC,EAAE,EAE3B,MAAMC,EAAiCC,GAMjC,CAEE,MAAAC,EAAoBH,EAAE,qGAAqG,EAAE,KACvG,kFAAkF,EACxGI,EAAmB,SAASF,EAAK,oCAAqC,EAAE,EAAE,eAAe,EAC/FC,EAAkB,KAAK,GAAG,OAAAD,EAAK,2BAA4B,OAAAE,EAAkB,EAEvE,MAAAC,EAA2BL,EAAE,iHAAiH,EAC9IM,EAA0B,SAASJ,EAAK,qCAAsC,EAAE,EAElFI,GAA2B,GAC7BD,EAAyB,YAAY,iBAAiB,EAC7BA,EAAA,KAAK,IAAI,OAAAC,EAAuB,IAAG,IAE5DD,EAAyB,SAAS,iBAAiB,EAC1BA,EAAA,KAAK,GAAG,OAAAC,EAAuB,IAAG,GAGvD,MAAAC,EAAqBP,EAAE,sGAAsG,EAC7HQ,EAAoB,SAASN,EAAK,qCAAsC,EAAE,EAAE,eAAe,EACjGK,EAAmB,KAAKC,CAAiB,EAEnC,MAAAC,EAA4BT,EAAE,kHAAkH,EAChJU,EAA2B,SAASR,EAAK,sCAAuC,EAAE,EAEpFQ,GAA4B,GAC9BD,EAA0B,YAAY,iBAAiB,EAC7BA,EAAA,KAAK,IAAI,OAAAC,EAAwB,IAAG,IAE9DD,EAA0B,SAAS,iBAAiB,EAC1BA,EAAA,KAAK,GAAG,OAAAC,EAAwB,IAAG,EAEjE,EACMC,EAAoBT,GASpB,CACJD,EAA8BC,CAAI,EAE9BH,EAAmB,OAAS,IAC9BG,EAAK,cAAgBA,EAAK,0BAC1BN,EAAgBgB,EAAqB,OACnCb,EACAG,CACF,EAEJ,EAEMW,EAAmB,CACvBX,EAIAY,IAA2B,CACvB,GAAAf,EAAmB,OAAS,EAC9B,OAAOa,EAAqB,OAC1BhB,EACAM,EACAY,CACF,CAEJ,EAEMC,EAAO,IACJ,IAAIlB,EAASmB,GAAY,CAM1B,GAL6BC,EAAA,EAGNjB,EAAE,iBAAiB,EAEvB,SAAW,EAAG,CAC3BgB,EAAA,EACR,OAGFjB,EAAqBC,EAAE,6EAA6E,EAE9F,MAAAkB,EAAmBC,EAAc,IAAI,iBAAiB,EAExD,GADA,CAAC,SAAU,QAAQ,EAAE,QAAQ,OAAOD,CAAgB,IAAM,IAC1DA,EAAiB,SAAW,EAAK,OAE/B,MAAAE,EAA4BD,EAAc,IAAI,kBAAkB,EAIlE,GAHAC,IAA8B,GAEMpB,EAAE,yFAAyF,EAC/F,OAAS,EAAK,OAE5C,MAAAqB,EAA4CP,GAA2B,CACnEjB,EAAA,QAAAyB,EAAA,IACN,OACE,wBACF,OAED,KAAMC,GAAW,CAIPC,EAAA,CACP,IAAQD,EAAO,wEAAwE,CACrF,iBAAkBH,EAClB,SAAUN,EACV,UAAW,GACZ,EACD,OAAU,MACV,SAAU,MACX,GACA,KAAK,CAAC,CAAC,KAAAZ,KAAUW,EAAiBX,EAAK,KAAMY,CAAiB,CAAC,EAC/D,MAAM,CAAC,CAAC,SAAAW,KAAc,CAMjB,GAAAA,EAAS,SAAW,GAMpBA,EAAS,SAAW,IAGpBA,EAAS,SAAW,IAOxB,MAAM,IAAI,MACR,uIAEqB,OAAAA,EAAS,OAAM,oCACF,OAAAA,EAAS,WAC7C,CACD,GACA,KAAK,CACP,GACA,KAAK,CACR,GAEkDC,GAAqC,CAC7E7B,EAAA,QAAAyB,EAAA,IACN,OACE,wBACF,OAED,KAAMC,GAAW,CACPC,EAAA,CACP,IAAQD,EAAO,wEAAwE,CACrF,iBAAkBG,EAClB,SAAU,GACV,UAAW,GACZ,EACD,OAAU,MACV,SAAU,MACX,GACA,KAAK,CAAC,CAAC,KAAAxB,KAAU,CACZ,GAAAA,EAAK,MAAQ,KACf,MAAM,IAAI,MACR,yGAEqB,cAAM,WAClB,OAAAA,EAAI,IACf,EAGK,OAAAS,EAAiBT,EAAK,IAAI,CAClC,GACA,MAAM,CAAC,CAAC,SAAAuB,KAAc,CAMjB,GAAAA,EAAS,SAAW,GAMpBA,EAAS,SAAW,IAGpBA,EAAS,SAAW,IAOxB,MAAM,IAAI,MACR,uIAEqB,OAAAA,EAAS,OAAM,oCACF,OAAAA,EAAS,WAC7C,EACD,CACF,GACA,KAAK,CACR,GAEwCL,CAAyB,EAE3D,MAAAO,EAA2B3B,EAAG,iGAAkG,EAEtI2B,EAAyB,GAAG,QAAS,CAAC,CAAC,cAAAC,KAAmB,CAClD,MAAAC,EAAuB7B,EAAE4B,CAAa,EACtCd,EAAoBe,EAAqB,KAAK,UAAU,EAE9D,OAAAF,EAAyB,YAAY,qBAAqB,EAC1DE,EAAqB,SAAS,qBAAqB,EAE/C9B,EAAmB,OAAS,GAC9BH,EAAc,KAAMkC,GAAUA,EAAM,aAAa,EAG5CT,EAAwCP,CAAiB,EACjE,EAGOE,EAAA,EACT,EAIYe,EAAA,CACb,KAAAhB,CACF","names":["chart_promise","Promise","_resolve","$highcharts_canvas","$","update_analytics_header_tiles","data","$last_month_price","last_month_price","$last_month_price_change","last_month_price_change","$last_month_volume","last_month_volume","$last_month_volume_change","last_month_volume_change","create_highchart","TransactionDataChart","update_highchart","duration_selected","init","resolve","neighbourhood_follow_button_init","$current_city_id","DataRetriever","$current_neighbourhood_id","ajax_call_for_updating_highcharts_graph","__vitePreload","Routes","q_ajax_3","response","current_neighbourhood_id","$all_duration_list_items","currentTarget","$clicked_duration_el","chart","TransactionAnalytics"],"ignoreList":[],"sources":["../../../app/assets/javascripts/concepts/neighbourhoods/market_data_overview/index.ts"],"sourcesContent":["\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport Promise from \"plugins/bluebird/index\"\n// endregion External Modules\n\n// Private Modules\nimport DataRetriever from \"app/data_retriever\"\n\nimport {\n q_ajax_3,\n} from \"app/utils/q_ajax/q_ajax_3\"\n// Private Modules\n\n// region Public Components\nimport TransactionDataChart from \"components/chart/transaction_data_chart\"\nimport {\n TransactionCountsGroupedByMonth,\n} from \"components/chart/transaction_data_chart\"\nimport {\n init as neighbourhood_follow_button_init,\n} from \"concepts/neighbourhoods/neighbourhood_follow_button/index\"\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nlet chart_promise: Promise = new Promise((_resolve) => {\n // Will never call resolve or reject\n})\nlet $highcharts_canvas = $()\n\nconst update_analytics_header_tiles = (data: {\n transactions_last_month_price_value: string,\n transactions_last_month_price_growth: string,\n transactions_last_month_volume_value: string,\n transactions_last_month_volume_growth: string,\n currency_unit_for_display: string,\n}) => {\n\n const $last_month_price = $(\".cell--neighbourhoods--transaction--market-data-overview__tiles-container__content.last_month_price\").find(\n \".cell--neighbourhoods--transaction--market-data-overview__tiles-container__value\")\n const last_month_price = parseInt(data.transactions_last_month_price_value, 10).toLocaleString()\n $last_month_price.text(`${data.currency_unit_for_display}${last_month_price}`)\n\n const $last_month_price_change = $(\".cell--neighbourhoods--transaction--market-data-overview__tiles-container__title-change.last_month_price_change\")\n const last_month_price_change = parseInt(data.transactions_last_month_price_growth, 10)\n\n if (last_month_price_change >= 0){\n $last_month_price_change.removeClass(\"negative-growth\")\n $last_month_price_change.text(`+${last_month_price_change}%`)\n } else {\n $last_month_price_change.addClass(\"negative-growth\")\n $last_month_price_change.text(`${last_month_price_change}%`)\n }\n\n const $last_month_volume = $(\".cell--neighbourhoods--transaction--market-data-overview__tiles-container__content.last_month_volume\")\n const last_month_volume = parseInt(data.transactions_last_month_volume_value, 10).toLocaleString()\n $last_month_volume.text(last_month_volume)\n\n const $last_month_volume_change = $(\".cell--neighbourhoods--transaction--market-data-overview__tiles-container__title-change.last_month_volume_change\")\n const last_month_volume_change = parseInt(data.transactions_last_month_volume_growth, 10)\n\n if (last_month_volume_change >= 0){\n $last_month_volume_change.removeClass(\"negative-growth\")\n $last_month_volume_change.text(`+${last_month_volume_change}%`)\n } else {\n $last_month_volume_change.addClass(\"negative-growth\")\n $last_month_volume_change.text(`${last_month_volume_change}%`)\n }\n}\nconst create_highchart = (data: {\n transaction_counts_grouped_by_months: TransactionCountsGroupedByMonth[],\n transactions_price_spacious: number[],\n transactions_last_month_price_value: string,\n transactions_last_month_price_growth: string,\n transactions_last_month_volume_value: string,\n transactions_last_month_volume_growth: string,\n currency_unit_for_display: string,\n currency_unit: string | undefined,\n}) => {\n update_analytics_header_tiles(data)\n\n if ($highcharts_canvas.length > 0 ) {\n data.currency_unit = data.currency_unit_for_display\n chart_promise = TransactionDataChart.create(\n $highcharts_canvas,\n data\n )\n }\n}\n\nconst update_highchart = (\n data: {\n transaction_counts_grouped_by_months: TransactionCountsGroupedByMonth[],\n transactions_price_spacious: number[],\n },\n duration_selected: any) => {\n if ($highcharts_canvas.length > 0 ) {\n return TransactionDataChart.update(\n chart_promise,\n data,\n duration_selected\n )\n }\n}\n\nconst init = (): Promise => {\n return new Promise((resolve) => {\n neighbourhood_follow_button_init()\n\n // Query START\n const $section_container = $(\".page-container\")\n // This section is city specific, so could be absent\n if ($section_container.length === 0) {\n resolve()\n return\n }\n\n $highcharts_canvas = $(\".cell--neighbourhoods--transaction--market-data-overview__highcharts-canvas\")\n\n const $current_city_id = DataRetriever.get(\"current-city-id\")\n if ([\"string\", \"number\"].indexOf(typeof $current_city_id) === -1) { return }\n if ($current_city_id.length === 0) { return }\n\n const $current_neighbourhood_id = DataRetriever.get(\"neighbourhood-id\")\n if ($current_neighbourhood_id === 0) { return }\n\n const $empty_graph_if_not_enough_data = $(\".cell--neighbourhoods--transaction--market-data-overview__main-container--not-available\")\n if ($empty_graph_if_not_enough_data.length > 0) { return }\n\n const ajax_call_for_updating_highcharts_graph = ((duration_selected: any) => {\n Promise.resolve(\n import(\n \"plugins/js-routes\"\n )\n )\n .then((Routes) => {\n\n\n\n q_ajax_3({\n url: Routes.api_web_app_real_estate_transaction_statistics_neighbourhood_index_path({\n neighbourhood_id: $current_neighbourhood_id,\n duration: duration_selected,\n is_rental: false,\n }),\n method: \"GET\",\n dataType: \"json\",\n })\n .then(({data}) => update_highchart(data.data, duration_selected))\n .catch(({response}) => {\n\n // We noticed for some users the failure of ajax call with a returned status code 0\n // This failure might be due to a number of reason, external to our Rails app\n // For more information about the different reasons:\n // - http://stackoverflow.com/a/14507670/838346\n if (response.status === 0) {\n return\n }\n // Otherwise throw an error\n\n // Baiduspider-render issue\n if (response.status === 40) {\n return\n }\n if (response.status === 423) {\n return\n }\n\n // How to get HTTP status code from jQuery XHR obj:\n // - https://api.jquery.com/jQuery.ajax/#jqXHR\n // - https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status\n throw new Error(\n \"#ajax_call_for_updating_highcharts_graph failed in \" +\n \"App.Pages.Neighbourhoods.Show.Components.TransactionAnalytics, \" +\n `HTTP status code: ${response.status} ` +\n `with given textStatus message: ${response.statusText}`\n )\n })\n .done()\n })\n .done()\n })\n\n const ajax_call_for_creating_highcharts_graph = ((current_neighbourhood_id: number) => {\n Promise.resolve(\n import(\n \"plugins/js-routes\"\n )\n )\n .then((Routes) => {\n q_ajax_3({\n url: Routes.api_web_app_real_estate_transaction_statistics_neighbourhood_index_path({\n neighbourhood_id: current_neighbourhood_id,\n duration: 12,\n is_rental: false,\n }),\n method: \"GET\",\n dataType: \"json\",\n })\n .then(({data}) => {\n if (data.data == null) {\n throw new Error(\n \"data.data is null in \" +\n \"App.Pages.Neighbourhoods.Show.Components.TransactionAnalytics, \" +\n `HTTP status code: ${status} ` +\n `data: ${data} `\n )\n }\n\n return create_highchart(data.data)\n })\n .catch(({response}) => {\n\n // We noticed for some users the failure of ajax call with a returned status code 0\n // This failure might be due to a number of reason, external to our Rails app\n // For more information about the different reasons:\n // - http://stackoverflow.com/a/14507670/838346\n if (response.status === 0) {\n return\n }\n // Otherwise throw an error\n\n // Baiduspider-render issue\n if (response.status === 40) {\n return\n }\n if (response.status === 423) {\n return\n }\n\n // How to get HTTP status code from jQuery XHR obj:\n // - https://api.jquery.com/jQuery.ajax/#jqXHR\n // - https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status\n throw new Error(\n \"#ajax_call_for_creating_highcharts_graph failed in \" +\n \"App.Pages.Neighbourhoods.Show.Components.TransactionAnalytics, \" +\n `HTTP status code: ${response.status} ` +\n `with given textStatus message: ${response.statusText}`\n )\n })\n })\n .done()\n })\n\n ajax_call_for_creating_highcharts_graph($current_neighbourhood_id)\n\n const $all_duration_list_items = $( \".cell--neighbourhoods--transaction--market-data-overview__highcharts-sidebar__duration_data_box\" )\n\n $all_duration_list_items.on(\"click\", ({currentTarget}) => {\n const $clicked_duration_el = $(currentTarget)\n const duration_selected = $clicked_duration_el.data(\"duration\")\n\n $all_duration_list_items.removeClass(\"with-data--selected\")\n $clicked_duration_el.addClass(\"with-data--selected\")\n\n if ($highcharts_canvas.length > 0) {\n chart_promise.then((chart) => chart.showLoading())\n }\n\n return ajax_call_for_updating_highcharts_graph(duration_selected)\n })\n\n\n resolve()\n })\n}\n\n\nexport default {\n init: init,\n}\n"],"file":"assets/index-B0wExjjT.js"}