Appearance
Search Filter Component
File Information
- Path:
components/dam/Search/SearchFilter.vue - Purpose: Advanced filter component for search results with multi-level filter selection
Overview
The SearchFilter component provides a comprehensive filtering interface for search results. It supports multiple filter types including tags, file types, custom fields, collages, uploaded by users, date ranges, and orientation. The component uses a hierarchical menu system with three levels of filter selection.
Key Features
Multi-Level Filter Menu
- Level 1: Main filter categories
- Level 2: Filter subcategories
- Level 3: Detailed filter options (ListLevelThree component)
Filter Types
- File Type filters (Images, Videos, Documents, etc.)
- Tag filters
- Custom Field filters
- Collage filters
- Uploaded By filters
- Date Range filters
- Orientation filters (Horizontal, Vertical, Square)
Filter Management
- Apply filters
- Remove filters
- Filter pagination
- Filter search within categories
Dynamic Filter Lists
- Loads available filter options
- Pagination for large filter lists
- Search within filter options
Props
javascript
{
filterObject: {
type: Object,
default: () => ({}),
description: 'Current filter object state'
},
fileTypes: {
type: Array,
default: () => [],
description: 'Available file types for filtering'
},
tagsListProp: {
type: Array,
default: () => [],
description: 'Available tags for filtering'
},
collageList: {
type: Array,
default: () => [],
description: 'Available collages for filtering'
},
uploadedByList: {
type: Array,
default: () => [],
description: 'Available users for filtering'
},
flag: {
type: String,
default: null,
description: 'Special flag for filter behavior'
},
tagsPaginationEnd: {
type: Boolean,
default: false,
description: 'Tags pagination end flag'
},
fileTypePaginationEnd: {
type: Boolean,
default: false,
description: 'File type pagination end flag'
},
collagePaginationEnd: {
type: Boolean,
default: false,
description: 'Collage pagination end flag'
},
uploadedByPaginationEnd: {
type: Boolean,
default: false,
description: 'Uploaded by pagination end flag'
}
}Events
javascript
{
'filter-applied': (filter) => {}, // Filter applied
'filter-removed': (filter) => {}, // Filter removed
'filter-updated': (filters) => {}, // Filters updated
'menu-closed': () => {} // Filter menu closed
}Data Properties
javascript
{
menuActive: boolean, // Filter menu visibility
mainFilterLevel: number, // Current filter level (1, 2, or 3)
filterListLevel: array, // Current level filter list
disabledFilters: object, // Disabled filter flags
filterObject: object, // Filter state object
datePickerLevel: object // Date picker reference
}Components Used
ListLevelThree- Third level filter component (~/components/dam/Search/ListLevelThree.vue)FilterIcon- Filter icon component- Various filter option icons
Methods
captureFilterOption(menu)
Captures filter option selection:
- Updates filter level
- Navigates to next filter level
- Updates filter list
- Handles special filter types (date, orientation)
keepMenuOpen()
Keeps filter menu open:
- Prevents menu from closing
- Used during filter selection
- Maintains menu state
closeMenu()
Closes filter menu:
- Hides menu
- Resets filter level
- Emits
menu-closedevent
handleDateFilter(dateRange)
Handles date range filter:
- Sets date range in filter object
- Applies date filter
- Updates filter state
handleOrientationFilter(orientation)
Handles orientation filter:
- Sets orientation in filter object
- Applies orientation filter (images only)
- Updates filter state
loadFilterOptions(type, page)
Loads filter options:
- Fetches filter options from API
- Handles pagination
- Updates filter list
- Supports search within filters
Filter Levels
Level 1: Main Categories
- File Types
- Tags
- Custom Fields
- Collages
- Uploaded By
- Date Range
- Orientation
Level 2: Subcategories
- Specific filter subcategories
- Nested filter options
Level 3: Detailed Options
- Specific filter values
- Multi-select options
- Search within options
- Pagination
Filter Object Structure
javascript
{
file_types: array, // Selected file types
tags: array, // Selected tags
custom_fields: object, // Custom field filters
collages: array, // Selected collages
uploaded_by: array, // Selected users
date_range: {
start: string, // Start date
end: string // End date
},
orientation: string // Orientation value
}API Integration
GET /dam/search/filter-options- Fetch filter options- Query Parameters:
type: Filter typepage: Page numbersearch: Search query within filters
- Response: Array of filter options
- Query Parameters:
Usage Examples
Basic Usage
vue
<template>
<SearchFilter
:filter-object="activeFilters"
:file-types="availableFileTypes"
:tags-list-prop="availableTags"
@filter-applied="handleFilterApplied"
/>
</template>
<script>
export default {
data() {
return {
activeFilters: {},
availableFileTypes: [],
availableTags: []
}
},
methods: {
handleFilterApplied(filter) {
// Apply filter to search
this.applyFilter(filter)
}
}
}
</script>Styling
- Uses custom CSS classes:
optionMenuList- Filter menu listoptionMenuLink- Filter menu linklink-hover-active- Hover statevisibleScrollbar- Scrollable areas- Responsive design for mobile/tablet/desktop
Integration Points
- ListLevelThree Component: Third level filter display
- Search Page: Main search interface
- Search Common Functions Mixin: Filter building utilities
- Typesense API: Filter application to search
Notes for Development
- Component uses hierarchical menu system
- Filter menu can be kept open during selection
- Orientation filter only applies to images
- Filter pagination supports large filter lists
- Date picker integrated for date range selection
- Filters can be combined with AND logic
Related Documentation
- Search Feature - Complete search system
- Search Page - Search results page
- ListLevelThree Component - Third level filters
- Search Common Functions Mixin - Filter utilities