diff --git a/frontend/src/lib/prefetchers.ts b/frontend/src/lib/prefetchers.ts index 56361c7..4461ae7 100644 --- a/frontend/src/lib/prefetchers.ts +++ b/frontend/src/lib/prefetchers.ts @@ -61,7 +61,20 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => { if (version) return - const p = { tags: effectiveTitle, match: 'all', page: 1, limit: 8 } as const + const p = { + tags: effectiveTitle, + match: 'all', + page: 1, + limit: 8, + url: '', + title: '', + originalCreatedFrom: '', + originalCreatedTo: '', + createdFrom: '', + createdTo: '', + updatedFrom: '', + updatedTo: '', + order: 'original_created_at:desc' } as const await qc.prefetchQuery ({ queryKey: postsKeys.index (p), queryFn: () => fetchPosts (p) }) @@ -70,30 +83,23 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => { const prefetchPostsIndex: Prefetcher = async (qc, url) => { const tags = url.searchParams.get ('tags') ?? '' - const qURL = url.searchParams.get ('url') - const title = url.searchParams.get ('title') - const originalCreatedFrom = url.searchParams.get ('original_created_from') - const originalCreatedTo = url.searchParams.get ('original_created_to') - const createdFrom = url.searchParams.get ('created_from') - const createdTo = url.searchParams.get ('created_to') - const updatedFrom = url.searchParams.get ('updated_from') - const updatedTo = url.searchParams.get ('updated_to') + const qURL = url.searchParams.get ('url') ?? '' + const title = url.searchParams.get ('title') ?? '' + const originalCreatedFrom = url.searchParams.get ('original_created_from') ?? '' + const originalCreatedTo = url.searchParams.get ('original_created_to') ?? '' + const createdFrom = url.searchParams.get ('created_from') ?? '' + const createdTo = url.searchParams.get ('created_to') ?? '' + const updatedFrom = url.searchParams.get ('updated_from') ?? '' + const updatedTo = url.searchParams.get ('updated_to') ?? '' const m: 'all' | 'any' = url.searchParams.get ('match') === 'any' ? 'any' : 'all' const page = Number (url.searchParams.get ('page') || 1) const limit = Number (url.searchParams.get ('limit') || 20) - const order = url.searchParams.get ('order') as FetchPostsOrder | null + const order = (url.searchParams.get ('order') ?? 'original_created_at:desc') as FetchPostsOrder const keys = { - tags, match: m, page, limit, - ...(qURL && { url: qURL }), - ...(title && { title }), - ...(originalCreatedFrom && { originalCreatedFrom }), - ...(originalCreatedTo && { originalCreatedTo }), - ...(createdFrom && { createdFrom }), - ...(createdTo && { createdTo }), - ...(updatedFrom && { updatedFrom }), - ...(updatedTo && { updatedTo }), - ...(order && { order }) } + tags, match: m, page, limit, url: qURL, title, + originalCreatedFrom, originalCreatedTo, createdFrom, createdTo, + updatedFrom, updatedTo, order } await qc.prefetchQuery ({ queryKey: postsKeys.index (keys), diff --git a/frontend/src/pages/posts/PostListPage.tsx b/frontend/src/pages/posts/PostListPage.tsx index 95eca92..70e3e68 100644 --- a/frontend/src/pages/posts/PostListPage.tsx +++ b/frontend/src/pages/posts/PostListPage.tsx @@ -35,9 +35,14 @@ export default (() => { const page = Number (query.get ('page') ?? 1) const limit = Number (query.get ('limit') ?? 20) + const keys = { + tags: tagsKey, match, page, limit, + url: '', title: '', originalCreatedFrom: '', originalCreatedTo: '', + createdFrom: '', createdTo: '', updatedFrom: '', updatedTo: '', + order: 'original_created_at:desc' } as const const { data, isLoading: loading } = useQuery ({ - queryKey: postsKeys.index ({ tags: tagsKey, match, page, limit }), - queryFn: () => fetchPosts ({ tags: tagsKey, match, page, limit }) }) + queryKey: postsKeys.index (keys), + queryFn: () => fetchPosts (keys) }) const posts = data?.posts ?? [] const cursor = '' const totalPages = data ? Math.ceil (data.count / limit) : 0 diff --git a/frontend/src/pages/posts/PostSearchPage.tsx b/frontend/src/pages/posts/PostSearchPage.tsx index e100d5b..727dced 100644 --- a/frontend/src/pages/posts/PostSearchPage.tsx +++ b/frontend/src/pages/posts/PostSearchPage.tsx @@ -44,43 +44,43 @@ export default (() => { const page = Number (query.get ('page') ?? 1) const limit = Number (query.get ('limit') ?? 20) - const qURL = query.get ('url') - const qTitle = query.get ('title') + const qURL = query.get ('url') ?? '' + const qTitle = query.get ('title') ?? '' const qTags = query.get ('tags') ?? '' const qMatch: 'all' | 'any' = query.get ('match') === 'any' ? 'any' : 'all' - const qOriginalCreatedFrom = query.get ('original_created_from') - const qOriginalCreatedTo = query.get ('original_created_to') - const qCreatedFrom = query.get ('created_from') - const qCreatedTo = query.get ('created_to') - const qUpdatedFrom = query.get ('updated_from') - const qUpdatedTo = query.get ('updated_to') + const qOriginalCreatedFrom = query.get ('original_created_from') ?? '' + const qOriginalCreatedTo = query.get ('original_created_to') ?? '' + const qCreatedFrom = query.get ('created_from') ?? '' + const qCreatedTo = query.get ('created_to') ?? '' + const qUpdatedFrom = query.get ('updated_from') ?? '' + const qUpdatedTo = query.get ('updated_to') ?? '' const order = (query.get ('order') || 'original_created_at:desc') as FetchPostsOrder const [activeIndex, setActiveIndex] = useState (-1) - const [createdFrom, setCreatedFrom] = useState (qCreatedFrom) - const [createdTo, setCreatedTo] = useState (qCreatedTo) - const [matchType, setMatchType] = useState (qMatch ?? 'all') - const [originalCreatedFrom, setOriginalCreatedFrom] = useState (qOriginalCreatedFrom) - const [originalCreatedTo, setOriginalCreatedTo] = useState (qOriginalCreatedTo) + const [createdFrom, setCreatedFrom] = useState (null) + const [createdTo, setCreatedTo] = useState (null) + const [matchType, setMatchType] = useState<'all' | 'any'> ('all') + const [originalCreatedFrom, setOriginalCreatedFrom] = useState (null) + const [originalCreatedTo, setOriginalCreatedTo] = useState (null) const [suggestions, setSuggestions] = useState ([]) const [suggestionsVsbl, setSuggestionsVsbl] = useState (false) - const [tagsStr, setTagsStr] = useState (qTags) - const [title, setTitle] = useState (qTitle ?? '') - const [updatedFrom, setUpdatedFrom] = useState (qUpdatedFrom) - const [updatedTo, setUpdatedTo] = useState (qUpdatedTo) - const [url, setURL] = useState (qURL ?? '') + const [tagsStr, setTagsStr] = useState ('') + const [title, setTitle] = useState ('') + const [updatedFrom, setUpdatedFrom] = useState (null) + const [updatedTo, setUpdatedTo] = useState (null) + const [url, setURL] = useState ('') const keys: FetchPostsParams = { tags: qTags, match: qMatch, page, limit, - ...(qURL && { url: qURL }), - ...(qTitle && { title: qTitle }), - ...(qOriginalCreatedFrom && { originalCreatedFrom: qOriginalCreatedFrom }), - ...(qOriginalCreatedTo && { originalCreatedTo: qOriginalCreatedTo }), - ...(qCreatedFrom && { createdFrom: qCreatedFrom }), - ...(qCreatedTo && { createdTo: qCreatedTo }), - ...(qUpdatedFrom && { updatedFrom: qUpdatedFrom }), - ...(qUpdatedTo && { updatedTo: qUpdatedTo }), - ...(order && { order }) } + url: qURL, + title: qTitle, + originalCreatedFrom: qOriginalCreatedFrom, + originalCreatedTo: qOriginalCreatedTo, + createdFrom: qCreatedFrom, + createdTo: qCreatedTo, + updatedFrom: qUpdatedFrom, + updatedTo: qUpdatedTo, + order } const { data, isLoading: loading } = useQuery ({ queryKey: postsKeys.index (keys), queryFn: () => fetchPosts (keys) }) diff --git a/frontend/src/pages/wiki/WikiDetailPage.tsx b/frontend/src/pages/wiki/WikiDetailPage.tsx index eeb0b87..fd2c0b5 100644 --- a/frontend/src/pages/wiki/WikiDetailPage.tsx +++ b/frontend/src/pages/wiki/WikiDetailPage.tsx @@ -44,10 +44,15 @@ export default () => { queryKey: tagsKeys.show (effectiveTitle), queryFn: () => fetchTagByName (effectiveTitle) }) + const keys = { + tags: effectiveTitle, match: 'all', page: 1, limit: 8, url: '', title: '', + originalCreatedFrom: '', originalCreatedTo: '', + createdFrom: '', createdTo: '', updatedFrom: '', updatedTo: '', + order: 'original_created_at:desc' } as const const { data } = useQuery ({ enabled: Boolean (effectiveTitle) && !(version), - queryKey: postsKeys.index ({ tags: effectiveTitle, match: 'all', page: 1, limit: 8 }), - queryFn: () => fetchPosts ({ tags: effectiveTitle, match: 'all', page: 1, limit: 8 }) }) + queryKey: postsKeys.index (keys), + queryFn: () => fetchPosts (keys) }) const posts = data?.posts || [] useEffect (() => { diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 7cecaa2..d7b0afd 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -12,19 +12,19 @@ export type FetchPostsOrder = `${ FetchPostsOrderField }:${ 'asc' | 'desc' }` export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number] export type FetchPostsParams = { - url?: string - title?: string - tags?: string - match?: 'all' | 'any' - createdFrom?: string - createdTo?: string - updatedFrom?: string - updatedTo?: string - originalCreatedFrom?: string - originalCreatedTo?: string - page?: number - limit?: number - order?: FetchPostsOrder } + url: string + title: string + tags: string + match: 'all' | 'any' + originalCreatedFrom: string + originalCreatedTo: string + createdFrom: string + createdTo: string + updatedFrom: string + updatedTo: string + page: number + limit: number + order: FetchPostsOrder } export type Menu = MenuItem[]