Search & Filtering
Find and filter tasks across your workspace with powerful search and filtering tools.
Global Search
Press Cmd/Ctrl + K to open global search:
- Search across all boards
- Find tasks, boards, and users
- Quick navigation
const setGlobalSearchOpen = useAppStore((s) => s.setGlobalSearchOpen)
const setSearchQuery = useAppStore((s) => s.setSearchQuery)
// Open search
setGlobalSearchOpen(true)
// Set query
setSearchQuery('bug fix')Filtering Tasks
Filter Conditions
| Field | Operators |
|---|---|
status | equals, not_equals |
priority | equals, not_equals |
assignee | equals, not_equals |
dueDate | equals, before, after |
group | equals, not_equals |
Filter Schema
interface FilterCondition {
field: "status" | "priority" | "assignee" | "dueDate" | "group"
operator: "equals" | "not_equals" | "contains" | "before" | "after"
value: string
}Applying Filters
const setActiveFilters = useAppStore((s) => s.setActiveFilters)
// Filter high priority tasks
setActiveFilters([
{ field: 'priority', operator: 'equals', value: 'high' }
])
// Filter tasks due this week
setActiveFilters([
{ field: 'dueDate', operator: 'before', value: '2025-01-20' }
])
// Multiple filters (AND logic)
setActiveFilters([
{ field: 'status', operator: 'equals', value: 'working' },
{ field: 'priority', operator: 'equals', value: 'high' }
])Quick Filters
Pre-built filter shortcuts:
import { getQuickFilters } from '@/lib/filter-utils'
const quickFilters = getQuickFilters()
// My tasks
quickFilters.myTasks(currentUserId)
// Due today
quickFilters.dueToday()
// Overdue tasks
quickFilters.overdue()
// High priority
quickFilters.highPriority()
// In progress
quickFilters.inProgress()Sorting
Sort Configuration
interface SortConfig {
field: "name" | "status" | "priority" | "dueDate" | "createdAt" | "assignees"
direction: "asc" | "desc"
}Applying Sort
const setSortConfig = useAppStore((s) => s.setSortConfig)
// Sort by due date ascending
setSortConfig([
{ field: 'dueDate', direction: 'asc' }
])
// Multi-level sort
setSortConfig([
{ field: 'priority', direction: 'desc' },
{ field: 'dueDate', direction: 'asc' }
])Saved Filters
Save frequently used filters:
interface SavedFilter {
id: string
boardId: string
name: string
conditions: FilterCondition[]
}
// Save filter
const saveFilter = useAppStore((s) => s.saveFilter)
saveFilter({
boardId: 'board-id',
name: 'High Priority Due Soon',
conditions: [
{ field: 'priority', operator: 'equals', value: 'high' },
{ field: 'dueDate', operator: 'before', value: '2025-01-30' }
]
})
// Delete saved filter
const deleteFilter = useAppStore((s) => s.deleteFilter)
deleteFilter(filterId)Filter Utility Functions
import { applyFilters, sortTasks } from '@/lib/filter-utils'
// Apply filters to tasks
const filteredTasks = applyFilters(tasks, activeFilters)
// Sort filtered tasks
const sortedTasks = sortTasks(filteredTasks, sortConfig)Search in Table View
Table view supports column-specific filtering:
- Click the filter icon on a column header
- Select filter operator
- Enter filter value
- Apply filter
Filter Examples
All my overdue tasks
[
{ field: 'assignee', operator: 'equals', value: myUserId },
{ field: 'dueDate', operator: 'before', value: today },
{ field: 'status', operator: 'not_equals', value: 'done' }
]Tasks stuck this week
[
{ field: 'status', operator: 'equals', value: 'stuck' },
{ field: 'dueDate', operator: 'before', value: endOfWeek }
]Unassigned high priority
[
{ field: 'priority', operator: 'equals', value: 'high' },
{ field: 'assignee', operator: 'equals', value: '' }
]