Filtering the Inbox
When your inbox grows large, filters help you quickly find the tasks that need your immediate attention. The filter panel supports multi-criteria filtering — filters combine with AND logic and are preserved during your session.
Available Filters
| Filter | Values | API Parameter |
|---|---|---|
| Task Type | All, Approval, Form, Review | ?type=approval |
| Due Date | All, Overdue, Due Today, Due This Week, No Deadline | ?dueFilter=overdue |
| Urgency | All, Low, Normal, High, Urgent | ?urgency=high |
| Claim State | All, Unclaimed, Claimed by Me, Claimed by Others | ?claimState=unclaimed |
| Workflow Name | Free text partial match | ?workflowName=payroll |
| Status | Pending, Completed, Expired | ?status=pending |
Quick Filter Chips
Above the task list, a row of quick-filter chips provides one-click access to common filter combinations:
Advanced Filter Panel
Click the Filter button to open the advanced filter panel on the right side. This allows multi-select on all filter dimensions simultaneously. Applied filters are shown as dismissible tags above the task list.
// Filter panel state (Zustand slice)
interface InboxFilterState {
type: ('approval' | 'form' | 'review')[]; // empty = all
dueFilter: 'all' | 'overdue' | 'today' | 'this_week' | 'no_deadline';
urgency: ('low' | 'normal' | 'high' | 'urgent')[];
claimState: 'all' | 'unclaimed' | 'claimed_by_me' | 'claimed_by_others';
workflowName: string;
status: 'pending' | 'completed' | 'expired';
}
// Convert filter state to API query string
function buildInboxQuery(filters: InboxFilterState): string {
const params = new URLSearchParams();
if (filters.type.length > 0) params.set('type', filters.type.join(','));
if (filters.dueFilter !== 'all') params.set('dueFilter', filters.dueFilter);
if (filters.urgency.length > 0) params.set('urgency', filters.urgency.join(','));
if (filters.claimState !== 'all') params.set('claimState', filters.claimState);
if (filters.workflowName) params.set('workflowName', filters.workflowName);
params.set('status', filters.status);
return params.toString();
}
Filter Persistence
Active filters are:
- Session-preserved — navigating away and returning restores the filter state (Zustand store)
- URL-synced — the active filter combination is reflected in the URL query string, making the view shareable and bookmarkable
- Saveable — named filter sets can be saved to your profile for quick recall (see Guide6_SearchAndFilters › 05-saved-filters.html)
Filters and sort order are independent. You can filter to "Overdue Approvals" and then sort by "Created Date (Oldest)" to process them in FIFO order. Both settings persist together in the URL.
Applied Filter Tags
When any filter is active (other than the defaults), a row of applied-filter tags appears above the task list. Each tag shows the active filter value and has an ✕ to remove it individually. A "Clear All" link resets all filters to defaults.
API — Filtered Request Example
// Get overdue, unclaimed approval tasks
GET /api/workdesk/inbox?type=approval&dueFilter=overdue&claimState=unclaimed&status=pending
// Get all urgent tasks across all types
GET /api/workdesk/inbox?urgency=urgent&status=pending&sortBy=dueAt&sortDir=asc