From 154db8cae53e77efa68191cbe86b57ba96fa86bf Mon Sep 17 00:00:00 2001 From: Antoine M Date: Fri, 17 Nov 2023 12:57:06 +0100 Subject: [PATCH] Adapting filter toolbars to handle results amount --- resources/css/components/filters-toolbar.css | 36 +++++--- resources/js/archive-template-news.js | 36 ++++++-- template-archive-news.php | 87 ++++++++++++-------- 3 files changed, 110 insertions(+), 49 deletions(-) diff --git a/resources/css/components/filters-toolbar.css b/resources/css/components/filters-toolbar.css index 01d3ea6..d9357a9 100644 --- a/resources/css/components/filters-toolbar.css +++ b/resources/css/components/filters-toolbar.css @@ -1,17 +1,33 @@ .filters-toolbar { - @apply flex - flex-row - justify-start - md:justify-center - lg:justify-start - - flex-wrap - container - mx-auto - gap-x-4 gap-y-3 p-0 py-8; + @apply py-8; + ul { + @apply flex + flex-row + justify-start + md:justify-center + lg:justify-start + + flex-wrap + container + mx-auto + gap-x-4 gap-y-3 p-0; + } li { @apply h-auto; } + &__posts-results-amount { + @apply pb-4; + + .results-filter-name { + @apply font-bold; + } + &.filter-disable { + .results-filter-name, + .results-for { + @apply hidden sr-only; + } + } + } &__action-button { @apply bg-white shadowed py-4 px-4 rounded-xl font-bold diff --git a/resources/js/archive-template-news.js b/resources/js/archive-template-news.js index eba41d9..ee7ba3b 100644 --- a/resources/js/archive-template-news.js +++ b/resources/js/archive-template-news.js @@ -3,30 +3,54 @@ async function filterPosts(e) { e.target.getAttribute('data-term-id') ?? e.target.parentElement.getAttribute('data-term-id') ?? null; + const termName = + e.target.getAttribute('data-term-name') ?? + e.target.parentElement.getAttribute('data-term-name') ?? + null; const filterButtons = document.querySelectorAll('.filters-toolbar__action-button'); filterButtons.forEach((button) => { button.classList.remove('filters-toolbar__action-button--active'); }); - await hydrateNewsFeedByTypeId(filterID); + await hydrateNewsFeedByTypeId(filterID, termName); + e.target.classList.add('filters-toolbar__action-button--active'); } -async function hydrateNewsFeedByTypeId(filterID) { - let newCardsContent; +async function hydrateNewsFeedByTypeId(filterID, termName) { + let newCardsDatas; if (filterID === 'all') { const response = await fetch(`/wp-json/homegrade-datas/v1/build/news`); - newCardsContent = await response.json(); + newCardsDatas = await response.json(); } else { const response = await fetch(`/wp-json/homegrade-datas/v1/build/news/type/${filterID}`); - newCardsContent = await response.json(); + newCardsDatas = await response.json(); } let container = document.querySelector('.card-grid-container'); - container.innerHTML = newCardsContent; + container.innerHTML = newCardsDatas.html_template; + updateSearchResultsAmount(newCardsDatas.total_posts_found, termName); } +function updateSearchResultsAmount(totalPostsFound, termName) { + const searchResultsComponent = document.querySelector('.filters-toolbar__posts-results-amount'); + + if (termName !== 'all') { + searchResultsComponent.querySelector('.results-amount').innerHTML = totalPostsFound; + searchResultsComponent.querySelector('.results-filter-name').innerHTML = '"' + termName + '"'; + searchResultsComponent.classList.add('filter-active'); + searchResultsComponent.classList.remove('filter-disable'); + return; + } + if (termName === 'all') { + searchResultsComponent.classList.remove('filter-active'); + searchResultsComponent.classList.add('filter-disable'); + searchResultsComponent.querySelector('.results-amount').innerHTML = totalPostsFound; + searchResultsComponent.querySelector('.results-filter-name').innerHTML = termName; + return; + } +} function filterNewsInit() { const filterNewsToolbar = document.querySelector('.filters-toolbar--archive-news'); if (!filterNewsToolbar) return; diff --git a/template-archive-news.php b/template-archive-news.php index 063a27c..67297e9 100644 --- a/template-archive-news.php +++ b/template-archive-news.php @@ -8,6 +8,16 @@ $args = array( $relatedPageTemplatePage = get_pages($args) ? get_pages($args)[0] : null; $pageIcon = get_field('page_icon', get_queried_object_id()) ?? null; +$post_per_page = 12; +$args = array( + "post_type" => "post", + "status" => "publish", + "posts_per_page" => $post_per_page, + +); +$posts = new WP_Query($args); + + ?>
+ + - +
- "post", - "status" => "publish", - "posts_per_page" => $post_per_page, - - ); - $posts = new WP_Query($args); - ?>