feat(05-01): create search types and utility functions
- Add SearchFilters interface for query, tags, type, dateRange - Add defaultFilters constant with empty/default values - Add hasActiveFilters() to detect when filters are active - Add getDatePreset() helper for today/week/month presets
This commit is contained in:
52
src/lib/types/search.ts
Normal file
52
src/lib/types/search.ts
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
export interface SearchFilters {
|
||||||
|
query: string;
|
||||||
|
tags: string[];
|
||||||
|
type: 'task' | 'thought' | 'all';
|
||||||
|
dateRange: {
|
||||||
|
start: string | null;
|
||||||
|
end: string | null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultFilters: SearchFilters = {
|
||||||
|
query: '',
|
||||||
|
tags: [],
|
||||||
|
type: 'all',
|
||||||
|
dateRange: { start: null, end: null }
|
||||||
|
};
|
||||||
|
|
||||||
|
export function hasActiveFilters(filters: SearchFilters): boolean {
|
||||||
|
return (
|
||||||
|
filters.query.length >= 2 ||
|
||||||
|
filters.tags.length > 0 ||
|
||||||
|
filters.type !== 'all' ||
|
||||||
|
filters.dateRange.start !== null ||
|
||||||
|
filters.dateRange.end !== null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Date preset helper for quick date range selection
|
||||||
|
export function getDatePreset(preset: 'today' | 'week' | 'month'): { start: string; end: string } {
|
||||||
|
const now = new Date();
|
||||||
|
const end = now.toISOString().split('T')[0];
|
||||||
|
|
||||||
|
let start: Date;
|
||||||
|
switch (preset) {
|
||||||
|
case 'today':
|
||||||
|
start = now;
|
||||||
|
break;
|
||||||
|
case 'week':
|
||||||
|
start = new Date(now);
|
||||||
|
start.setDate(start.getDate() - 7);
|
||||||
|
break;
|
||||||
|
case 'month':
|
||||||
|
start = new Date(now);
|
||||||
|
start.setMonth(start.getMonth() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
start: start.toISOString().split('T')[0],
|
||||||
|
end
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user