| @@ -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), | |||
| @@ -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 | |||
| @@ -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<string | null> (null) | |||
| const [createdTo, setCreatedTo] = useState<string | null> (null) | |||
| const [matchType, setMatchType] = useState<'all' | 'any'> ('all') | |||
| const [originalCreatedFrom, setOriginalCreatedFrom] = useState<string | null> (null) | |||
| const [originalCreatedTo, setOriginalCreatedTo] = useState<string | null> (null) | |||
| const [suggestions, setSuggestions] = useState<Tag[]> ([]) | |||
| 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<string | null> (null) | |||
| const [updatedTo, setUpdatedTo] = useState<string | null> (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) }) | |||
| @@ -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 (() => { | |||
| @@ -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[] | |||