| @@ -61,7 +61,20 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => { | |||||
| if (version) | if (version) | ||||
| return | 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 ({ | await qc.prefetchQuery ({ | ||||
| queryKey: postsKeys.index (p), | queryKey: postsKeys.index (p), | ||||
| queryFn: () => fetchPosts (p) }) | queryFn: () => fetchPosts (p) }) | ||||
| @@ -70,30 +83,23 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => { | |||||
| const prefetchPostsIndex: Prefetcher = async (qc, url) => { | const prefetchPostsIndex: Prefetcher = async (qc, url) => { | ||||
| const tags = url.searchParams.get ('tags') ?? '' | 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 m: 'all' | 'any' = url.searchParams.get ('match') === 'any' ? 'any' : 'all' | ||||
| const page = Number (url.searchParams.get ('page') || 1) | const page = Number (url.searchParams.get ('page') || 1) | ||||
| const limit = Number (url.searchParams.get ('limit') || 20) | 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 = { | 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 ({ | await qc.prefetchQuery ({ | ||||
| queryKey: postsKeys.index (keys), | queryKey: postsKeys.index (keys), | ||||
| @@ -35,9 +35,14 @@ export default (() => { | |||||
| const page = Number (query.get ('page') ?? 1) | const page = Number (query.get ('page') ?? 1) | ||||
| const limit = Number (query.get ('limit') ?? 20) | 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 ({ | 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 posts = data?.posts ?? [] | ||||
| const cursor = '' | const cursor = '' | ||||
| const totalPages = data ? Math.ceil (data.count / limit) : 0 | const totalPages = data ? Math.ceil (data.count / limit) : 0 | ||||
| @@ -44,43 +44,43 @@ export default (() => { | |||||
| const page = Number (query.get ('page') ?? 1) | const page = Number (query.get ('page') ?? 1) | ||||
| const limit = Number (query.get ('limit') ?? 20) | 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 qTags = query.get ('tags') ?? '' | ||||
| const qMatch: 'all' | 'any' = query.get ('match') === 'any' ? 'any' : 'all' | 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 order = (query.get ('order') || 'original_created_at:desc') as FetchPostsOrder | ||||
| const [activeIndex, setActiveIndex] = useState (-1) | 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 [suggestions, setSuggestions] = useState<Tag[]> ([]) | ||||
| const [suggestionsVsbl, setSuggestionsVsbl] = useState (false) | 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 = { | const keys: FetchPostsParams = { | ||||
| tags: qTags, match: qMatch, page, limit, | 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 ({ | const { data, isLoading: loading } = useQuery ({ | ||||
| queryKey: postsKeys.index (keys), | queryKey: postsKeys.index (keys), | ||||
| queryFn: () => fetchPosts (keys) }) | queryFn: () => fetchPosts (keys) }) | ||||
| @@ -44,10 +44,15 @@ export default () => { | |||||
| queryKey: tagsKeys.show (effectiveTitle), | queryKey: tagsKeys.show (effectiveTitle), | ||||
| queryFn: () => fetchTagByName (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 ({ | const { data } = useQuery ({ | ||||
| enabled: Boolean (effectiveTitle) && !(version), | 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 || [] | const posts = data?.posts || [] | ||||
| useEffect (() => { | useEffect (() => { | ||||
| @@ -12,19 +12,19 @@ export type FetchPostsOrder = `${ FetchPostsOrderField }:${ 'asc' | 'desc' }` | |||||
| export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number] | export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number] | ||||
| export type FetchPostsParams = { | 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[] | export type Menu = MenuItem[] | ||||