Add a filter chip
const [activeFilters, setActiveFilters] = useState<string[]>([]);
const addFilter = () => {
const randomFilter = `Filter ${Math.floor(Math.random() * 100)}`;
if (!activeFilters.includes(randomFilter)) {
setActiveFilters((prevFilters) => [...prevFilters, randomFilter]);
}
};
const removeFilter = (filter: string) => {
setActiveFilters((prevFilters) => prevFilters.filter((f) => f !== filter));
};<div>
{activeFilters.map((filter) => (
<GoabxFilterChip
key={filter}
content={filter}
onClick={() => removeFilter(filter)}
mr="s"
mb="s"
mt="s"
/>
))}
</div>
<GoabxButton mt="l" onClick={addFilter}>Add Random Filter</GoabxButton>activeFilters: string[] = [];
removeFilter(filter: string): void {
this.activeFilters = this.activeFilters.filter((f) => f !== filter);
}
addFilter(): void {
const randomFilter = "Filter " + Math.floor(Math.random() * 100);
if (!this.activeFilters.includes(randomFilter)) {
this.activeFilters.push(randomFilter);
}
}<div>
<goabx-filter-chip
*ngFor="let filter of activeFilters"
[content]="filter"
(onClick)="removeFilter(filter)"
mr="s"
mb="s"
mt="s">
</goabx-filter-chip>
</div>
<goabx-button mt="l" (onClick)="addFilter()">Add Random Filter</goabx-button>const activeFilters = [];
const container = document.getElementById("filter-container");
const addBtn = document.getElementById("add-filter-btn");
function renderFilters() {
container.innerHTML = "";
activeFilters.forEach((filter) => {
const chip = document.createElement("goa-filter-chip");
chip.setAttribute("version", "2");
chip.setAttribute("content", filter);
chip.setAttribute("mr", "s");
chip.setAttribute("mb", "s");
chip.setAttribute("mt", "s");
chip.addEventListener("_click", () => removeFilter(filter));
container.appendChild(chip);
});
}
function addFilter() {
const randomFilter = "Filter " + Math.floor(Math.random() * 100);
if (!activeFilters.includes(randomFilter)) {
activeFilters.push(randomFilter);
renderFilters();
}
}
function removeFilter(filter) {
const index = activeFilters.indexOf(filter);
if (index > -1) {
activeFilters.splice(index, 1);
renderFilters();
}
}
addBtn.addEventListener("_click", addFilter);<div id="filter-container"></div>
<goa-button version="2" mt="l" id="add-filter-btn">Add Random Filter</goa-button>Allow users to apply filters using selectable chips, which visually represent active filters and can be removed to update results dynamically.
When to use
Use this pattern when:
- Users need to apply multiple filters to a dataset
- Filters should be visible and easily removable
- You want to show active filter state clearly
Considerations
- Each chip should clearly indicate what filter it represents
- Provide visual feedback when adding/removing filters
- Consider the order of chips (most recent, alphabetical, etc.)