From 0881002ec8b9ca66a791ab5c6376c019d1f5a137 Mon Sep 17 00:00:00 2001 From: Ibrahim Riaz Date: Mon, 17 Feb 2025 11:03:02 +0600 Subject: [PATCH 1/6] Radius Search Range Issue - Fixed --- assets/js/search-form.js | 6 +++--- assets/src/js/public/search-form.js | 6 +++--- templates/search-form/fields/radius_search.php | 13 +++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/assets/js/search-form.js b/assets/js/search-form.js index 8f2beccb7..307a30bc5 100644 --- a/assets/js/search-form.js +++ b/assets/js/search-form.js @@ -1872,13 +1872,13 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len // Parse the URL parameters var milesParams = new URLSearchParams(window.location.search).has('miles'); (_directoristCustomRan = directoristCustomRangeSlider) === null || _directoristCustomRan === void 0 || _directoristCustomRan.create(slider, { - start: [0, sliderDefaultValue ? sliderDefaultValue : 100], + start: [milesParams ? minInput.value : 0, milesParams ? maxInput.value : sliderDefaultValue], connect: true, direction: isRTL ? 'rtl' : 'ltr', step: sliderStep ? sliderStep : 1, range: { - 'min': Number(minInput.value ? minInput.value : 0), - 'max': Number(maxInput.value ? maxInput.value : 100) + 'min': Number(0), + 'max': Number(sliderMaxValue || 100) } }); (_slider$directoristCu = slider.directoristCustomRangeSlider) === null || _slider$directoristCu === void 0 || _slider$directoristCu.on('update', function (values, handle) { diff --git a/assets/src/js/public/search-form.js b/assets/src/js/public/search-form.js index 1b0819140..87168824e 100644 --- a/assets/src/js/public/search-form.js +++ b/assets/src/js/public/search-form.js @@ -1022,13 +1022,13 @@ import './components/directoristSelect'; const milesParams = new URLSearchParams(window.location.search).has('miles'); directoristCustomRangeSlider?.create(slider, { - start: [0, sliderDefaultValue ? sliderDefaultValue : 100], + start: [milesParams ? minInput.value : 0, milesParams ? maxInput.value : sliderDefaultValue], connect: true, direction: isRTL ? 'rtl' : 'ltr', step: sliderStep ? sliderStep : 1, range: { - 'min': Number(minInput.value ? minInput.value : 0), - 'max': Number(maxInput.value ? maxInput.value : 100) + 'min': Number(0), + 'max': Number(sliderMaxValue || 100) } }); diff --git a/templates/search-form/fields/radius_search.php b/templates/search-form/fields/radius_search.php index 9513b59c2..37db57b7b 100644 --- a/templates/search-form/fields/radius_search.php +++ b/templates/search-form/fields/radius_search.php @@ -7,10 +7,11 @@ if (!defined('ABSPATH')) exit; -$min_distance = '0'; -$default_distance = $data['default_radius_distance'] ?? 0; -$max_distance = $data['max_radius_distance'] ?? 1000; -$value = ! empty( $_REQUEST['miles'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['miles'] ) ) : $min_distance . '-' . $max_distance; +$min_distance = '0'; +$max_distance = '100'; +$default_distance = $data['default_radius_distance']; +$default_max_distance = $data['max_radius_distance']; +$distance = ! empty( $_REQUEST['miles'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['miles'] ) ) : $min_distance . '-' . $max_distance; if ( ! empty( $_REQUEST['miles'] ) ) { $distance = directorist_get_distance_range( $_REQUEST['miles'] ); @@ -28,11 +29,11 @@ range_slider_unit($data)); ?> -
+
- +
From cf3baa0e584fedc63afbbdae691fa18b7169b348 Mon Sep 17 00:00:00 2001 From: Ibrahim Riaz Date: Mon, 17 Feb 2025 15:05:52 +0600 Subject: [PATCH 2/6] Sidebar Filter Reset Issue - Fixed --- templates/search-form/fields/radius_search.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/search-form/fields/radius_search.php b/templates/search-form/fields/radius_search.php index 37db57b7b..66c9873f7 100644 --- a/templates/search-form/fields/radius_search.php +++ b/templates/search-form/fields/radius_search.php @@ -11,7 +11,7 @@ $max_distance = '100'; $default_distance = $data['default_radius_distance']; $default_max_distance = $data['max_radius_distance']; -$distance = ! empty( $_REQUEST['miles'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['miles'] ) ) : $min_distance . '-' . $max_distance; +$value = ! empty( $_REQUEST['miles'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['miles'] ) ) : $min_distance . '-' . $max_distance; if ( ! empty( $_REQUEST['miles'] ) ) { $distance = directorist_get_distance_range( $_REQUEST['miles'] ); @@ -33,7 +33,7 @@
- +
From 7996226682b56a24d38c342ae361f8cc2e7b2798 Mon Sep 17 00:00:00 2001 From: Ibrahim Riaz Date: Tue, 18 Feb 2025 12:17:29 +0600 Subject: [PATCH 3/6] Range Slider Value - Updated --- assets/js/search-form.js | 8 ++++---- assets/src/js/public/search-form.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/js/search-form.js b/assets/js/search-form.js index 307a30bc5..dff8accd2 100644 --- a/assets/js/search-form.js +++ b/assets/js/search-form.js @@ -1858,8 +1858,8 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len // Check if the slider is already initialized if (!slider || slider.directoristCustomRangeSlider) return; var sliderStep = parseInt(slider.getAttribute('step')) || 1; - var sliderDefaultValue = parseInt(slider.getAttribute('value') || 0); - var sliderMaxValue = parseInt(slider.getAttribute('max-value') || 100); + var distanceDefaultValue = parseInt(slider.getAttribute('value')); + var sliderMaxValue = parseInt(slider.getAttribute('max-value')); var minInput = sliderItem.querySelector('.directorist-custom-range-slider__value__min'); var maxInput = sliderItem.querySelector('.directorist-custom-range-slider__value__max'); var sliderRange = sliderItem.querySelector('.directorist-custom-range-slider__range'); @@ -1872,12 +1872,12 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len // Parse the URL parameters var milesParams = new URLSearchParams(window.location.search).has('miles'); (_directoristCustomRan = directoristCustomRangeSlider) === null || _directoristCustomRan === void 0 || _directoristCustomRan.create(slider, { - start: [milesParams ? minInput.value : 0, milesParams ? maxInput.value : sliderDefaultValue], + start: [minInput.value, milesParams ? maxInput.value : distanceDefaultValue || sliderMaxValue], connect: true, direction: isRTL ? 'rtl' : 'ltr', step: sliderStep ? sliderStep : 1, range: { - 'min': Number(0), + 'min': Number(distanceDefaultValue ? 0 : minInput.value), 'max': Number(sliderMaxValue || 100) } }); diff --git a/assets/src/js/public/search-form.js b/assets/src/js/public/search-form.js index 87168824e..fb482ffd4 100644 --- a/assets/src/js/public/search-form.js +++ b/assets/src/js/public/search-form.js @@ -1007,8 +1007,8 @@ import './components/directoristSelect'; if (!slider || slider.directoristCustomRangeSlider) return; let sliderStep = parseInt(slider.getAttribute('step')) || 1; - let sliderDefaultValue = parseInt(slider.getAttribute('value') || 0); - let sliderMaxValue = parseInt(slider.getAttribute('max-value') || 100); + let distanceDefaultValue = parseInt(slider.getAttribute('value')); + let sliderMaxValue = parseInt(slider.getAttribute('max-value')); let minInput = sliderItem.querySelector('.directorist-custom-range-slider__value__min'); let maxInput = sliderItem.querySelector('.directorist-custom-range-slider__value__max'); let sliderRange = sliderItem.querySelector('.directorist-custom-range-slider__range'); @@ -1022,12 +1022,12 @@ import './components/directoristSelect'; const milesParams = new URLSearchParams(window.location.search).has('miles'); directoristCustomRangeSlider?.create(slider, { - start: [milesParams ? minInput.value : 0, milesParams ? maxInput.value : sliderDefaultValue], + start: [minInput.value, milesParams ? maxInput.value : distanceDefaultValue || sliderMaxValue], connect: true, direction: isRTL ? 'rtl' : 'ltr', step: sliderStep ? sliderStep : 1, range: { - 'min': Number(0), + 'min': Number(distanceDefaultValue ? 0 : minInput.value), 'max': Number(sliderMaxValue || 100) } }); From 840da285a2d4bcb69f7dbbadc650b6563a2fa1c9 Mon Sep 17 00:00:00 2001 From: Ibrahim Riaz Date: Tue, 18 Feb 2025 12:31:41 +0600 Subject: [PATCH 4/6] instant search URL (custom_fields) - updated --- assets/js/all-listings.js | 6 ++++-- assets/src/js/public/components/instantSearch.js | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/assets/js/all-listings.js b/assets/js/all-listings.js index 1fbe78f50..fbd0afcf7 100644 --- a/assets/js/all-listings.js +++ b/assets/js/all-listings.js @@ -1456,8 +1456,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = if (form_data.phone && form_data.phone.length) { var query = query && query.length ? query + '&phone=' + form_data.phone : '?phone=' + form_data.phone; } - if (form_data.custom_field && form_data.custom_field.length) { - var query = query && query.length ? query + '&custom_field=' + form_data.custom_field : '?custom_field=' + form_data.custom_field; + if (form_data.custom_field && Object.keys(form_data.custom_field).length) { + Object.keys(form_data.custom_field).forEach(function (key) { + query = query.length ? query + "&".concat(key, "=").concat(form_data.custom_field[key]) : "?".concat(key, "=").concat(form_data.custom_field[key]); + }); } if (form_data.open_now && form_data.open_now.length) { var query = query && query.length ? query + '&open_now=' + form_data.open_now : '?open_now=' + form_data.open_now; diff --git a/assets/src/js/public/components/instantSearch.js b/assets/src/js/public/components/instantSearch.js index f36394fec..e77bf9487 100644 --- a/assets/src/js/public/components/instantSearch.js +++ b/assets/src/js/public/components/instantSearch.js @@ -69,8 +69,10 @@ import debounce from '../../global/components/debounce'; if (form_data.phone && form_data.phone.length) { var query = (query && query.length) ? query + '&phone=' + form_data.phone : '?phone=' + form_data.phone; } - if (form_data.custom_field && form_data.custom_field.length) { - var query = (query && query.length) ? query + '&custom_field=' + form_data.custom_field : '?custom_field=' + form_data.custom_field; + if (form_data.custom_field && Object.keys(form_data.custom_field).length) { + Object.keys(form_data.custom_field).forEach((key) => { + query = (query.length) ? query + `&${key}=${form_data.custom_field[key]}` : `?${key}=${form_data.custom_field[key]}`; + }); } if (form_data.open_now && form_data.open_now.length) { var query = (query && query.length) ? query + '&open_now=' + form_data.open_now : '?open_now=' + form_data.open_now; From b99e66ab453ba130ab9183ac14455e5628dc1ea4 Mon Sep 17 00:00:00 2001 From: Ibrahim Riaz Date: Tue, 18 Feb 2025 15:52:04 +0600 Subject: [PATCH 5/6] Range Slider Value Mismatch Issue in Custom Field - Fixed --- assets/js/search-form.js | 8 +++++--- assets/src/js/public/search-form.js | 8 +++++--- .../search-form/custom-fields/number/range.php | 14 ++++++++++---- templates/search-form/fields/radius_search.php | 11 ++++++----- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/assets/js/search-form.js b/assets/js/search-form.js index 09fc204e7..718af6523 100644 --- a/assets/js/search-form.js +++ b/assets/js/search-form.js @@ -1858,8 +1858,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len // Check if the slider is already initialized if (!slider || slider.directoristCustomRangeSlider) return; var sliderStep = parseInt(slider.getAttribute('step')) || 1; - var distanceDefaultValue = parseInt(slider.getAttribute('value')); + var sliderMinValue = parseInt(slider.getAttribute('min-value')); var sliderMaxValue = parseInt(slider.getAttribute('max-value')); + var sliderDefaultValue = parseInt(slider.getAttribute('default-value')); var minInput = sliderItem.querySelector('.directorist-custom-range-slider__value__min'); var maxInput = sliderItem.querySelector('.directorist-custom-range-slider__value__max'); var sliderRange = sliderItem.querySelector('.directorist-custom-range-slider__range'); @@ -1871,13 +1872,14 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len var rangeInitLoad = true; // Parse the URL parameters var milesParams = new URLSearchParams(window.location.search).has('miles'); + var customParams = new URLSearchParams(window.location.search).has('miles'); (_directoristCustomRan = directoristCustomRangeSlider) === null || _directoristCustomRan === void 0 || _directoristCustomRan.create(slider, { - start: [minInput.value, milesParams ? maxInput.value : distanceDefaultValue || sliderMaxValue], + start: [minInput.value, milesParams || customParams ? maxInput.value : sliderDefaultValue || sliderMaxValue], connect: true, direction: isRTL ? 'rtl' : 'ltr', step: sliderStep ? sliderStep : 1, range: { - 'min': Number(distanceDefaultValue ? 0 : minInput.value), + 'min': Number(sliderMinValue || 0), 'max': Number(sliderMaxValue || 100) } }); diff --git a/assets/src/js/public/search-form.js b/assets/src/js/public/search-form.js index 46a52e3cb..15d31b32b 100644 --- a/assets/src/js/public/search-form.js +++ b/assets/src/js/public/search-form.js @@ -1005,8 +1005,9 @@ import './components/directoristSelect'; if (!slider || slider.directoristCustomRangeSlider) return; let sliderStep = parseInt(slider.getAttribute('step')) || 1; - let distanceDefaultValue = parseInt(slider.getAttribute('value')); + let sliderMinValue = parseInt(slider.getAttribute('min-value')); let sliderMaxValue = parseInt(slider.getAttribute('max-value')); + let sliderDefaultValue = parseInt(slider.getAttribute('default-value')); let minInput = sliderItem.querySelector('.directorist-custom-range-slider__value__min'); let maxInput = sliderItem.querySelector('.directorist-custom-range-slider__value__max'); let sliderRange = sliderItem.querySelector('.directorist-custom-range-slider__range'); @@ -1018,14 +1019,15 @@ import './components/directoristSelect'; let rangeInitLoad = true; // Parse the URL parameters const milesParams = new URLSearchParams(window.location.search).has('miles'); + const customParams = new URLSearchParams(window.location.search).has('miles'); directoristCustomRangeSlider?.create(slider, { - start: [minInput.value, milesParams ? maxInput.value : distanceDefaultValue || sliderMaxValue], + start: [minInput.value, milesParams || customParams ? maxInput.value : sliderDefaultValue || sliderMaxValue], connect: true, direction: isRTL ? 'rtl' : 'ltr', step: sliderStep ? sliderStep : 1, range: { - 'min': Number(distanceDefaultValue ? 0 : minInput.value), + 'min': Number(sliderMinValue || 0), 'max': Number(sliderMaxValue || 100) } }); diff --git a/templates/search-form/custom-fields/number/range.php b/templates/search-form/custom-fields/number/range.php index dfeafc9c0..4f85cc75f 100644 --- a/templates/search-form/custom-fields/number/range.php +++ b/templates/search-form/custom-fields/number/range.php @@ -7,8 +7,14 @@ if ( ! defined( 'ABSPATH' ) ) exit; -$min_val = $data['options']['min_value'] ?? 1; +$min_value = $data['options']['min_value'] ?? 1; $max_value = $data['options']['max_value'] ?? 100; +$default_min_value = $data['options']['min_value'] ?? 1; +$default_max_value = $data['options']['max_value'] ?? 100; + +if (!empty($value) && strpos($value, '-') !== false) { + list($min_value, $max_value) = explode('-', $value); +} ?>
@@ -16,17 +22,17 @@
-
+
- +
- +
diff --git a/templates/search-form/fields/radius_search.php b/templates/search-form/fields/radius_search.php index 66c9873f7..1b114452a 100644 --- a/templates/search-form/fields/radius_search.php +++ b/templates/search-form/fields/radius_search.php @@ -7,10 +7,11 @@ if (!defined('ABSPATH')) exit; -$min_distance = '0'; -$max_distance = '100'; -$default_distance = $data['default_radius_distance']; -$default_max_distance = $data['max_radius_distance']; +$min_distance = 0; +$default_min_distance = 0; +$max_distance = $data['max_radius_distance'] ?? 0; +$default_max_distance = $data['max_radius_distance'] ?? 100; +$default_distance = $data['default_radius_distance'] ?? 50; $value = ! empty( $_REQUEST['miles'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['miles'] ) ) : $min_distance . '-' . $max_distance; if ( ! empty( $_REQUEST['miles'] ) ) { @@ -29,7 +30,7 @@ range_slider_unit($data)); ?>
-
+
From 0f27a165fc43d0e5b40da3af531f37271179e83d Mon Sep 17 00:00:00 2001 From: Ibrahim Riaz Date: Wed, 19 Feb 2025 12:17:17 +0600 Subject: [PATCH 6/6] FilterListing on Address, ZipCode Change --- assets/js/all-listings.js | 15 +++++++++++++ assets/js/range-slider.js | 2 +- assets/js/search-form.js | 17 +++++++++++++-- .../src/js/public/components/instantSearch.js | 18 ++++++++++++++++ assets/src/js/public/search-form.js | 21 +++++++++++++++++-- 5 files changed, 68 insertions(+), 5 deletions(-) diff --git a/assets/js/all-listings.js b/assets/js/all-listings.js index fbd0afcf7..9e4f7e8eb 100644 --- a/assets/js/all-listings.js +++ b/assets/js/all-listings.js @@ -2748,6 +2748,21 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = filterListing(searchElm); }, 250)); + // sidebar on change location, zipcode changing + $('body').on("change", ".directorist-instant-search .listing-with-sidebar .directorist-search-location, .directorist-instant-search .listing-with-sidebar .directorist-zipcode-search", Object(_global_components_debounce__WEBPACK_IMPORTED_MODULE_1__["default"])(function (e) { + e.preventDefault(); + var searchElm = $(this).closest('.listing-with-sidebar'); + + // If it's a location field, ensure it has a value before triggering the filter + if ($(this).hasClass('directorist-search-location')) { + var locationField = $(this).find('input[name="address"]'); + if (!locationField.val()) { + return; + } + } + filterListing(searchElm); + }, 250)); + // select on change with value - searching $('body').on("change", ".directorist-instant-search .listing-with-sidebar select", Object(_global_components_debounce__WEBPACK_IMPORTED_MODULE_1__["default"])(function (e) { e.preventDefault(); diff --git a/assets/js/range-slider.js b/assets/js/range-slider.js index 2d65a6a77..1c5d3e4bf 100644 --- a/assets/js/range-slider.js +++ b/assets/js/range-slider.js @@ -562,7 +562,7 @@ __webpack_require__.r(__webpack_exports__); - The provided value for the option; - A reference to the options object; - The name for the option; - The testing function returns false when an error is detected, + The testing function returns false when an error is detected, or true when everything is OK. It can also modify the option object, to make sure all values can be correctly looped elsewhere. */ //region Defaults diff --git a/assets/js/search-form.js b/assets/js/search-form.js index 718af6523..f8d3daa61 100644 --- a/assets/js/search-form.js +++ b/assets/js/search-form.js @@ -1779,6 +1779,10 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len $('.directorist-location-js, .atbdp-search-address').attr("data-value", data.display_name); $('#cityLat').val(lat); $('#cityLng').val(lng); + var locationSearch = $(".directorist-search-location"); + if (locationSearch.length) { + locationSearch.trigger("change"); + } } }); } @@ -1789,7 +1793,8 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len result_container.hide(); } locationAddressField.removeClass('atbdp-form-fade'); - $('body').on("click", '.address_result .current-location', function (e) { + $('body').off("click", '.address_result .current-location').on("click", '.address_result .current-location', function (e) { + e.preventDefault(); navigator.geolocation.getCurrentPosition(function (position) { return displayLocation(position, e); }); @@ -1808,7 +1813,15 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len // hide address result when click outside the input field $(document).on('click', function (e) { - if (!$(e.target).closest('.directorist-location-js, #q_addressss, .atbdp-search-address').length) { + if (!$(e.target).closest('.directorist-location-js, #q_addressss, .atbdp-search-address, .current-location').length) { + var locationSearch = $(e.target).closest(".directorist-search-location"); + var zipCodeSearch = $(e.target).closest(".directorist-zipcode-search"); + if (locationSearch.length) { + locationSearch.trigger("change"); + } + if (zipCodeSearch.length) { + zipCodeSearch.trigger("change"); + } $('.address_result').hide(); } }); diff --git a/assets/src/js/public/components/instantSearch.js b/assets/src/js/public/components/instantSearch.js index e77bf9487..f3749d242 100644 --- a/assets/src/js/public/components/instantSearch.js +++ b/assets/src/js/public/components/instantSearch.js @@ -1460,6 +1460,24 @@ import debounce from '../../global/components/debounce'; filterListing(searchElm); }, 250)); + // sidebar on change location, zipcode changing + $('body').on("change", ".directorist-instant-search .listing-with-sidebar .directorist-search-location, .directorist-instant-search .listing-with-sidebar .directorist-zipcode-search", debounce(function (e) { + e.preventDefault(); + + const searchElm = $(this).closest('.listing-with-sidebar'); + + // If it's a location field, ensure it has a value before triggering the filter + if ($(this).hasClass('directorist-search-location')) { + const locationField = $(this).find('input[name="address"]'); + if (!locationField.val()) { + return; + } + } + + filterListing(searchElm); + }, 250)); + + // select on change with value - searching $('body').on("change", ".directorist-instant-search .listing-with-sidebar select", debounce( function(e) { e.preventDefault(); diff --git a/assets/src/js/public/search-form.js b/assets/src/js/public/search-form.js index 15d31b32b..73fe7ddc9 100644 --- a/assets/src/js/public/search-form.js +++ b/assets/src/js/public/search-form.js @@ -904,6 +904,11 @@ import './components/directoristSelect'; $('.directorist-location-js, .atbdp-search-address').attr("data-value", data.display_name); $('#cityLat').val(lat); $('#cityLng').val(lng); + + const locationSearch = $(".directorist-search-location"); + if (locationSearch.length) { + locationSearch.trigger("change"); + } } }); } @@ -922,7 +927,9 @@ import './components/directoristSelect'; locationAddressField.removeClass('atbdp-form-fade'); - $('body').on("click", '.address_result .current-location', function (e) { + $('body').off("click", '.address_result .current-location').on("click", '.address_result .current-location', function (e) { + e.preventDefault(); + navigator.geolocation.getCurrentPosition(function (position) { return displayLocation(position, e); }); @@ -941,7 +948,17 @@ import './components/directoristSelect'; // hide address result when click outside the input field $(document).on('click', function (e) { - if (!$(e.target).closest('.directorist-location-js, #q_addressss, .atbdp-search-address').length) { + if (!$(e.target).closest('.directorist-location-js, #q_addressss, .atbdp-search-address, .current-location').length) { + const locationSearch = $(e.target).closest(".directorist-search-location"); + const zipCodeSearch = $(e.target).closest(".directorist-zipcode-search"); + + if (locationSearch.length) { + locationSearch.trigger("change"); + } + if (zipCodeSearch.length) { + zipCodeSearch.trigger("change"); + } + $('.address_result').hide(); } });