Advanced Filters - Build optimizations
This commit is contained in:
@@ -196,6 +196,23 @@ export const storyApi = {
|
||||
getRandomStory: async (filters?: {
|
||||
searchQuery?: string;
|
||||
tags?: string[];
|
||||
minWordCount?: number;
|
||||
maxWordCount?: number;
|
||||
createdAfter?: string;
|
||||
createdBefore?: string;
|
||||
lastReadAfter?: string;
|
||||
lastReadBefore?: string;
|
||||
minRating?: number;
|
||||
maxRating?: number;
|
||||
unratedOnly?: boolean;
|
||||
readingStatus?: string;
|
||||
hasReadingProgress?: boolean;
|
||||
hasCoverImage?: boolean;
|
||||
sourceDomain?: string;
|
||||
seriesFilter?: string;
|
||||
minTagCount?: number;
|
||||
popularOnly?: boolean;
|
||||
hiddenGemsOnly?: boolean;
|
||||
}): Promise<Story | null> => {
|
||||
try {
|
||||
// Create URLSearchParams to properly handle array parameters like tags
|
||||
@@ -208,6 +225,25 @@ export const storyApi = {
|
||||
filters.tags.forEach(tag => searchParams.append('tags', tag));
|
||||
}
|
||||
|
||||
// Advanced filters
|
||||
if (filters?.minWordCount !== undefined) searchParams.append('minWordCount', filters.minWordCount.toString());
|
||||
if (filters?.maxWordCount !== undefined) searchParams.append('maxWordCount', filters.maxWordCount.toString());
|
||||
if (filters?.createdAfter) searchParams.append('createdAfter', filters.createdAfter);
|
||||
if (filters?.createdBefore) searchParams.append('createdBefore', filters.createdBefore);
|
||||
if (filters?.lastReadAfter) searchParams.append('lastReadAfter', filters.lastReadAfter);
|
||||
if (filters?.lastReadBefore) searchParams.append('lastReadBefore', filters.lastReadBefore);
|
||||
if (filters?.minRating !== undefined) searchParams.append('minRating', filters.minRating.toString());
|
||||
if (filters?.maxRating !== undefined) searchParams.append('maxRating', filters.maxRating.toString());
|
||||
if (filters?.unratedOnly !== undefined) searchParams.append('unratedOnly', filters.unratedOnly.toString());
|
||||
if (filters?.readingStatus) searchParams.append('readingStatus', filters.readingStatus);
|
||||
if (filters?.hasReadingProgress !== undefined) searchParams.append('hasReadingProgress', filters.hasReadingProgress.toString());
|
||||
if (filters?.hasCoverImage !== undefined) searchParams.append('hasCoverImage', filters.hasCoverImage.toString());
|
||||
if (filters?.sourceDomain) searchParams.append('sourceDomain', filters.sourceDomain);
|
||||
if (filters?.seriesFilter) searchParams.append('seriesFilter', filters.seriesFilter);
|
||||
if (filters?.minTagCount !== undefined) searchParams.append('minTagCount', filters.minTagCount.toString());
|
||||
if (filters?.popularOnly !== undefined) searchParams.append('popularOnly', filters.popularOnly.toString());
|
||||
if (filters?.hiddenGemsOnly !== undefined) searchParams.append('hiddenGemsOnly', filters.hiddenGemsOnly.toString());
|
||||
|
||||
const response = await api.get(`/stories/random?${searchParams.toString()}`);
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
@@ -443,6 +479,22 @@ export const searchApi = {
|
||||
sortBy?: string;
|
||||
sortDir?: string;
|
||||
facetBy?: string[];
|
||||
// Advanced filters
|
||||
minWordCount?: number;
|
||||
maxWordCount?: number;
|
||||
createdAfter?: string;
|
||||
createdBefore?: string;
|
||||
lastReadAfter?: string;
|
||||
lastReadBefore?: string;
|
||||
unratedOnly?: boolean;
|
||||
readingStatus?: string;
|
||||
hasReadingProgress?: boolean;
|
||||
hasCoverImage?: boolean;
|
||||
sourceDomain?: string;
|
||||
seriesFilter?: string;
|
||||
minTagCount?: number;
|
||||
popularOnly?: boolean;
|
||||
hiddenGemsOnly?: boolean;
|
||||
}): Promise<SearchResult> => {
|
||||
// Resolve tag aliases to canonical names for expanded search
|
||||
let resolvedTags = params.tags;
|
||||
@@ -468,6 +520,23 @@ export const searchApi = {
|
||||
if (params.sortBy) searchParams.append('sortBy', params.sortBy);
|
||||
if (params.sortDir) searchParams.append('sortDir', params.sortDir);
|
||||
|
||||
// Advanced filters
|
||||
if (params.minWordCount !== undefined) searchParams.append('minWordCount', params.minWordCount.toString());
|
||||
if (params.maxWordCount !== undefined) searchParams.append('maxWordCount', params.maxWordCount.toString());
|
||||
if (params.createdAfter) searchParams.append('createdAfter', params.createdAfter);
|
||||
if (params.createdBefore) searchParams.append('createdBefore', params.createdBefore);
|
||||
if (params.lastReadAfter) searchParams.append('lastReadAfter', params.lastReadAfter);
|
||||
if (params.lastReadBefore) searchParams.append('lastReadBefore', params.lastReadBefore);
|
||||
if (params.unratedOnly !== undefined) searchParams.append('unratedOnly', params.unratedOnly.toString());
|
||||
if (params.readingStatus) searchParams.append('readingStatus', params.readingStatus);
|
||||
if (params.hasReadingProgress !== undefined) searchParams.append('hasReadingProgress', params.hasReadingProgress.toString());
|
||||
if (params.hasCoverImage !== undefined) searchParams.append('hasCoverImage', params.hasCoverImage.toString());
|
||||
if (params.sourceDomain) searchParams.append('sourceDomain', params.sourceDomain);
|
||||
if (params.seriesFilter) searchParams.append('seriesFilter', params.seriesFilter);
|
||||
if (params.minTagCount !== undefined) searchParams.append('minTagCount', params.minTagCount.toString());
|
||||
if (params.popularOnly !== undefined) searchParams.append('popularOnly', params.popularOnly.toString());
|
||||
if (params.hiddenGemsOnly !== undefined) searchParams.append('hiddenGemsOnly', params.hiddenGemsOnly.toString());
|
||||
|
||||
// Add array parameters - each element gets its own parameter
|
||||
if (params.authors && params.authors.length > 0) {
|
||||
params.authors.forEach(author => searchParams.append('authors', author));
|
||||
|
||||
Reference in New Issue
Block a user