<header>
  <input class="mr-2" type="search" id="search" placeholder="Search by Name"/>
  <select class="mr-2">
    <option>All Members</option>
    <option value="premium">Premium</option>
    <option value="basic">Basic</option>
  </select>
  
  <select id="sort" class="">
    <option>Sort:</option>
    <option value="alphabetical">Alpabetical</option>
  </select>
</header>
<div id="cards"></div>
* {
  box-sizing: border-box;
}
body {
  background-color: #ddd;
  font-family: 'Tahoma', sans-serif;
}
header {
  display: flex;
  padding: 10px;
  flex-wrap: wrap;
}
input, select, button {
  padding: 10px;
  border: none;
  border-radius: 8px;
  margin-block: 4px;
}
button {
  background-color: tomato;
  font-weight: bold;
  color: white;
  box-shadow: 5px 5px 5px rgb(000,000,000, .2);
  cursor: pointer;
}

.mr-2 {
  margin-right: 6px;
}

#cards {
  display: flex;
  flex-wrap: wrap;
}
.card {
  background-color: white;
  border-radius: 10px;
  font-weight: bold;
  padding:20px;
  margin: 5px;
  min-height: 150px;
  min-width: 300px;
  box-shadow: 10px 10px 10px rgb(000,000,000, .2);
  border-left: 7px solid skyblue;
  color: #333;
  text-decoration: none;
}
.card.premium {
  border-color: tomato;
}

  const container = document.querySelector("#cards");
  const search = document.querySelector("#search");
  const select = document.querySelector("select");
  const sort = document.querySelector("#sort");

  const cards = [
    { name: "Miguel Fondeur", id: 1, premium: false, profileURL: "#" },
    { name: "Michael Denny", id: 2, premium: false, profileURL: "#" },
    { name: "Scott Endicott", id: 3, premium: true, profileURL: "#" },
    { name: "Bogdan Chayka", id: 4, premium: true, profileURL: "#" },
  ];

  function renderCards(filteredCards = cards) {
    container.innerHTML = filteredCards
      .map(
        (card) => `
        <a href="${card.profileURL}" class="card ${card.premium ? "premium" : "basic"}">
          ${card.name}<br>id: ${card.id}
        </a>`
      )
      .join("");
  }

  function filterCards() {
    let filtered = cards;

    const searchTerm = search.value.trim().toLowerCase();
    if (searchTerm) {
      filtered = filtered.filter((card) => card.name.toLowerCase().includes(searchTerm));
    }

    if (select.value === "premium") {
      filtered = filtered.filter((card) => card.premium);
    } else if (select.value === "basic") {
      filtered = filtered.filter((card) => !card.premium);
    }

    if (sort.value === "alphabetical") {
      filtered = filtered.toSorted((a, b) => a.name.localeCompare(b.name));
    }

    renderCards(filtered);
  }

  document.addEventListener("input", (event) => {
    if (event.target.closest("#search, select, #sort")) {
      filterCards();
    }
  });

  renderCards();

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.