Как совместить автоподгрузку контента с фильтрацией?

Помогите, пожалуйста, реализовать код.

У меня есть фильтр, который состоит из кнопок с data атрибутом data-filter

<button class="portfolio__btn" type="button" title="Смотреть категорию" data-filter="group1"></button>
<button class="portfolio__btn" type="button" title="Смотреть категорию" data-filter="group2"></button>
<button class="portfolio__btn" type="button" title="Смотреть категорию" data-filter="group3"></button>
<button class="portfolio__btn" type="button" title="Смотреть категорию" data-filter="group4"></button>
<button class="portfolio__btn" type="button" title="Смотреть категорию" data-filter="group5"></button>

Есть контент в виде карточек, у которых категория указана в виде класса

<div class="portfolio__item group1"></div>
<div class="portfolio__item group2"></div>
<div class="portfolio__item group3"></div>
<div class="portfolio__item group4"></div>
<div class="portfolio__item group5"></div>

При загрузке страницы отображаются все карточки, есть функция которая занимается фильтрацией контента, и при клике на кнопку отображаются только карточки определенной категории, остальные все скрываются. А так же есть кнопка, которая отображает все категории(она по сути просто удаляет все классы со всех кнопок и карточек)

<button class="portfolio__all" type="button" title="Все категории" data-filter="all">Все кейсы</button>
function filterCategories() {
    const allBtn = document.querySelector('.portfolio__all'); //Ищем кнопку для всех категорий
    const sidebarBtn = document.querySelectorAll('.portfolio__btn');//Ищем все кнопки
    const casesCard = document.querySelectorAll('.portfolio__item');//Ищем все карточки
    for (const button of sidebarBtn) {//Перебираем карточки
        const currentCategory = button.dataset.filter;//Проверяем значение дата атрибута каждой кнопки
        button.addEventListener('click', function () {//Кликаем по кнопке
            for (let i = 0; i < sidebarBtn.length; i++) {
                let button = sidebarBtn[i];
                button.classList.remove('active')//Делаем все кнопки не активными
            }
            button.classList.add('active');//Активной делаем только ту кнопку, на которую кликнули
            for (let i = 0; i < casesCard.length; i++) {
                let card = casesCard[i];
                card.classList.add('hide')//Скрываем все карточки
                card.ontransitionend = function () {
                    if (card.classList.contains('hide')) {
                        card.classList.add('hidden')
                    }
                }
            }
            const currentCard = document.getElementsByClassName(currentCategory);//Ищем карточки активной категории
            for (const currentCardItem of currentCard) {//Отображаем карточки активной категории
                currentCardItem.classList.remove('hide')
                currentCardItem.classList.remove('hidden')
            }
        });
    }
    allBtn.addEventListener('click', function () {//При нажатии на кнопку "все кейсы" удаляем все классы у кнопок и карточек, тем самым показываем все карточки всех категорий
        for (const button of sidebarBtn) {
            button.classList.remove('active')
        }
        for (const card of casesCard) {
            card.classList.remove('active')
            card.classList.remove('hide-mobile')
            card.classList.remove('hide')
            card.classList.remove('hidden')
        }
    })
}
filterCategories();

Есть функция, которая отлавливает момент, в который нужно подгрузить контент

const loadMoreBlock = document.querySelector('.portfolio__content')

function LoadMore() {
    const loadMoreBlockPos = loadMoreBlock.getBoundingClientRect().top + pageXOffset;
    const loadMoreBlockHeight = loadMoreBlock.offsetHeight;

    if (pageXOffset > (loadMoreBlockPos + loadMoreBlockHeight) - windowHeight - 300) {
        getContent();
    }

}

async function getContent() {
    //Тут должен быть код для автоподгрузки контента
}
window.addEventListener('scroll', lazyScroll);

function lazyScroll() {
    if (!loadMoreBlock.classList.contains('loading')) {
        LoadMore();
        filterCategories();
    }
}

Я не понимаю как подгружать контент. Бэкенд говорит что нужно передавать в скрипт cases.php нужные категории карточек, в ответ будет приходить json с массивом объектов. Но нужно же еще как то отслеживать выбрана ли категория, если нет то передавать все категории, если да, то передавать только ту что выбрана. И что будет если после атоподгрузки карточек из одной категории пользователь возьмет и переключит на другую категорию? Может кто-нибудь помочь мне с решением этой задачи? Или хотя бы направить в нужное русло. Я не знаю как работает ajax и json:(


Ответы (0 шт):