From 4cb2b101d7d82a80428495d240009c32ed6faaf7 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Fri, 11 Jan 2019 15:18:29 +0000 Subject: [PATCH] WIP: make the search work with filters --- .../funds/base_submissions_table.html | 45 ++++++++++--------- .../templates/funds/includes/search.html | 6 --- .../javascript/apply/submission-filters.js | 21 +++++++-- 3 files changed, 43 insertions(+), 29 deletions(-) delete mode 100644 opentech/apply/funds/templates/funds/includes/search.html diff --git a/opentech/apply/funds/templates/funds/base_submissions_table.html b/opentech/apply/funds/templates/funds/base_submissions_table.html index 5ab3e1796..66dbdbeb3 100644 --- a/opentech/apply/funds/templates/funds/base_submissions_table.html +++ b/opentech/apply/funds/templates/funds/base_submissions_table.html @@ -8,29 +8,33 @@ {% block content %} {% block table %} - <div class="wrapper wrapper--table-actions"> - <button class="button button--filters button--contains-icons js-toggle-filters">Filters</button> - {% include "funds/includes/search.html" %} - </div> + <div class="wrapper wrapper--table-actions"> + <button class="button button--filters button--contains-icons js-toggle-filters">Filters</button> - {% if table.data or active_filters %} - <div class="filters"> - <div class="filters__header"> - <button class="filters__button js-clear-filters">Clear</button> - <div>Filter by</div> - <button class="filters__button js-close-filters">Close</button> - </div> + <form method="get" role="search" class="form form--search-desktop js-search-form"> + <button class="button button--search" type="submit" aria-label="Search"> + <svg class="icon icon--magnifying-glass icon--search"><use xlink:href="#magnifying-glass"></use></svg> + </button> + <input class="input input--search js-search-input" type="text" placeholder="Search submissions" name="query"{% if search_term %} value="{{ search_term }}"{% endif %} aria-label="Search input"> + </form> + </div> - <form action="" method="get" class="form form--filters"> - <ul class="form__filters select2"> - {{ filter.form.as_ul }} - <li> - <button class="button button--primary" type="submit" value="Filter">Filter</button> - </li> - </ul> - </form> + <div class="filters"> + <div class="filters__header"> + <button class="filters__button js-clear-filters">Clear</button> + <div>Filter by</div> + <button class="filters__button js-close-filters">Close</button> </div> - {% endif %} + + <form action="" method="get" class="form form--filters js-filter-form"> + <ul class="form__filters select2"> + {{ filter.form.as_ul }} + <li> + <button class="button button--primary" type="submit" value="Filter">Filter</button> + </li> + </ul> + </form> + </div> {% render_table table %} {% endblock %} @@ -39,6 +43,7 @@ {% block extra_js %} {{ filter.form.media.js }} <script src="{% static 'js/apply/all-submissions-table.js' %}"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/url-search-params/1.1.0/url-search-params.js"></script> <script src="{% static 'js/apply/submission-filters.js' %}"></script> <script src="{% static 'js/apply/submission-tooltips.js' %}"></script> {% endblock %} diff --git a/opentech/apply/funds/templates/funds/includes/search.html b/opentech/apply/funds/templates/funds/includes/search.html deleted file mode 100644 index 525771944..000000000 --- a/opentech/apply/funds/templates/funds/includes/search.html +++ /dev/null @@ -1,6 +0,0 @@ -<form action="" method="get" role="search" class="form form--search-desktop"> - <button class="button button--search" type="submit" aria-label="Search"> - <svg class="icon icon--magnifying-glass icon--search"><use xlink:href="#magnifying-glass"></use></svg> - </button> - <input class="input input--search" type="text" placeholder="Search submissions" name="query"{% if search_term %} value="{{ search_term }}"{% endif %} aria-label="Search input"> -</form> diff --git a/opentech/static_src/src/javascript/apply/submission-filters.js b/opentech/static_src/src/javascript/apply/submission-filters.js index 1049f923a..eaaf37d31 100644 --- a/opentech/static_src/src/javascript/apply/submission-filters.js +++ b/opentech/static_src/src/javascript/apply/submission-filters.js @@ -10,12 +10,28 @@ const filterOpenClass = 'filters-open'; const filterActiveClass = 'is-active'; + const $searchInput = $('.js-search-input'); + const $queryInput = $('#id_query'); + const $searchForm = $('.js-search-form'); + + const $filterForm = $('.js-filter-form'); + + const urlParams = new URLSearchParams(window.location.search); + // check if the page has a query string and keep filters open if so on desktop - if (window.location.href.indexOf('?') > -1 && $(window).width() > 1024) { + const minimumNumberParams = 1 + urlParams.has('query') ? 1 : 0; + + if ([...urlParams].length > minimumNumberParams && $(window).width() > 1024) { $body.addClass(filterOpenClass); updateButtonText(); } + $searchForm.submit((e) => { + e.preventDefault(); + $queryInput.val($searchInput.val()); + $filterForm.submit(); + }); + // Add active class to filters - dropdowns are dynamically appended to the dom, // so we have to listen for the event higher up $body.on('click', '.select2-dropdown', (e) => { @@ -61,7 +77,7 @@ // redirect to submissions home to clear filters function handleClearFilters() { - window.location.href = window.location.href.split('?')[0]; + window.location.href = window.location.href.split('?')[0] + '?query=' + urlParams.get('query'); } // toggle filters button wording @@ -144,4 +160,3 @@ }).trigger('resize'); })(jQuery); - -- GitLab